28.4.3. 使用现有的 Ceph 集群进行动态持久性存储
使用现有的 Ceph 集群进行动态持久性存储:
生成 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
为 client.admin 创建 Ceph secret:
$ oc create -f ceph-secret.yaml secret "ceph-secret" created
验证是否已创建 secret:
$ oc get secret ceph-secret NAME TYPE DATA AGE ceph-secret kubernetes.io/rbd 1 5d
创建存储类:
$ 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 设置为默认值,否则您必须提供此参数值。
验证存储类是否已创建:
$ oc get storageclasses NAME TYPE dynamic (default) kubernetes.io/rbd
创建 PVC 对象定义:
PVC 对象定义示例
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: ceph-claim-dynamic spec: accessModes: 1 - ReadWriteOnce resources: requests: storage: 2Gi 2
创建 PVC:
$ oc create -f ceph-pvc.yaml persistentvolumeclaim "ceph-claim-dynamic" created
验证 PVC 是否已创建并绑定到预期的 PV:
$ oc get pvc NAME STATUS VOLUME CAPACITY ACCESSMODES AGE ceph-claim Bound pvc-f548d663-3cac-11e7-9937-0024e8650c7a 2Gi RWO 1m
创建 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
创建 pod:
$ oc create -f ceph-pod1.yaml pod "ceph-pod1" created
验证 pod 是否已创建:
$ oc get pod NAME READY STATUS RESTARTS AGE ceph-pod1 1/1 Running 0 2m
过一分钟后,pod 状态更改为 Running
。