28.4.3. 使用现有的 Ceph 集群进行动态持久性存储


使用现有的 Ceph 集群进行动态持久性存储:

  1. 生成 client.admin base64 编码的密钥:

    $ ceph auth get client.admin

    Ceph secret 定义示例

    apiVersion: v1
    kind: Secret
    metadata:
      name: ceph-secret
      namespace: kube-system
    data:
      key: QVFBOFF2SlZheUJQRVJBQWgvS2cwT1laQUhPQno3akZwekxxdGc9PQ== 1
    type: kubernetes.io/rbd 2

    1
    此 base64 密钥在其中一个 Ceph MON 节点上生成,使用 ceph auth get-key client.admin | base64 命令,然后复制输出并将其复制为 secret 密钥的值。
    2
    Ceph RBD 需要此值才能用于动态置备。
  2. 为 client.admin 创建 Ceph secret:

    $ oc create -f ceph-secret.yaml
    secret "ceph-secret" created
  3. 验证是否已创建 secret:

    $ oc get secret ceph-secret
    NAME          TYPE                DATA      AGE
    ceph-secret   kubernetes.io/rbd   1         5d
  4. 创建存储类:

    $ oc create -f ceph-storageclass.yaml
    storageclass "dynamic" created

    Ceph 存储类示例

    apiVersion: storage.k8s.io/v1beta1
    kind: StorageClass
    metadata:
      name: dynamic
      annotations:
        storageclass.kubernetes.io/is-default-class: "true"
    provisioner: kubernetes.io/rbd
    parameters:
      monitors: 192.168.1.11:6789,192.168.1.12:6789,192.168.1.13:6789 1
      adminId: admin 2
      adminSecretName: ceph-secret 3
      adminSecretNamespace: kube-system 4
      pool: kube  5
      userId: kube  6
      userSecretName: ceph-user-secret 7

    1
    以逗号分隔的 IP 地址 Ceph 监视器列表。此值是必需的。
    2
    能够在池中创建镜像的 Ceph 客户端 ID。默认值为 admin
    3
    adminId 的机密名称。此值是必需的。您提供的 secret 必须具有 kubernetes.io/rbd
    4
    adminSecret 的命名空间。默认为 default
    5
    Ceph RBD 池。默认值为 rbd,但不推荐使用此值。
    6
    用于映射 Ceph RBD 镜像的 Ceph 客户端 ID。默认值与 adminId 的 secret 名称相同。
    7
    用于映射 Ceph RBD 镜像的 userId 的 Ceph secret 名称。它必须与 PVC 位于同一个命名空间中。除非在新项目中将 Ceph secret 设置为默认值,否则您必须提供此参数值。
  5. 验证存储类是否已创建:

    $ oc get storageclasses
    NAME                TYPE
    dynamic (default)   kubernetes.io/rbd
  6. 创建 PVC 对象定义:

    PVC 对象定义示例

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: ceph-claim-dynamic
    spec:
      accessModes:  1
        - ReadWriteOnce
      resources:
        requests:
          storage: 2Gi 2

    1
    accessModes 不强制访问权利,而是作为标签来把一个 PV 与 PVC 匹配。
    2
    这个声明会寻找提供 2Gi 或更高容量的 PV。
  7. 创建 PVC:

    $ oc create -f ceph-pvc.yaml
    persistentvolumeclaim "ceph-claim-dynamic" created
  8. 验证 PVC 是否已创建并绑定到预期的 PV:

    $ oc get pvc
    NAME        STATUS  VOLUME                                   CAPACITY ACCESSMODES  AGE
    ceph-claim  Bound   pvc-f548d663-3cac-11e7-9937-0024e8650c7a 2Gi      RWO          1m
  9. 创建 pod 对象定义:

    Pod 对象定义示例

    apiVersion: v1
    kind: Pod
    metadata:
      name: ceph-pod1 1
    spec:
      containers:
      - name: ceph-busybox
        image: busybox 2
        command: ["sleep", "60000"]
        volumeMounts:
        - name: ceph-vol1 3
          mountPath: /usr/share/busybox 4
          readOnly: false
      volumes:
      - name: ceph-vol1
        persistentVolumeClaim:
          claimName: ceph-claim-dynamic 5

    1
    oc get pod 显示此 pod 的名称。
    2
    此 pod 运行的镜像。在这种情况下,busybox 设置为 sleep
    3
    卷的名称。这个名称在 containersvolumes 部分中必须相同。
    4
    容器中的挂载路径。
    5
    绑定到 Ceph RBD 集群的 PVC。
  10. 创建 pod:

    $ oc create -f ceph-pod1.yaml
    pod "ceph-pod1" created
  11. 验证 pod 是否已创建:

    $ oc get pod
    NAME        READY     STATUS   RESTARTS   AGE
    ceph-pod1   1/1       Running  0          2m

过一分钟后,pod 状态更改为 Running

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.