28.4.3. 動的な永続ストレージでの既存の Ceph クラスターの使用
動的な永続ストレージに既存の Ceph クラスターを使用するには、以下を実行します。
client.admin 向けに base64 でエンコードされたキーを作成します。
$ ceph auth get client.admin
Ceph シークレット定義例
apiVersion: v1 kind: Secret metadata: name: ceph-secret namespace: kube-system data: key: QVFBOFF2SlZheUJQRVJBQWgvS2cwT1laQUhPQno3akZwekxxdGc9PQ== 1 type: kubernetes.io/rbd 2
client.admin 用に Ceph シークレットを作成します。
$ oc create -f ceph-secret.yaml secret "ceph-secret" created
シークレットが作成されたことを確認します。
$ 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
- Ceph が監視する IP アドレスのコンマ区切りの一覧。この値は必須です。
- 2
- Ceph クライアント ID。デフォルトは
admin
です。 - 3
adminId
のシークレット名。この値は必須です。設定するシークレットにはkubernetes.io/rbd
が含まれる必要があります。- 4
adminSecret
の namespace。デフォルトはdefault
です。- 5
- Ceph RBD プール。デフォルトは
rbd
ですが、この値は推奨されません。 - 6
- Ceph RBD イメージのマッピングに使用される Ceph クライアント ID。デフォルトは
adminId
のシークレット名と同じです。 - 7
- Ceph RBD イメージをマッピングするための
userId
の Ceph シークレット名。PVC と同じ namespace に存在する必要があります。Ceph シークレットが新規プロジェクトのデフォルトとして設定されていない限り、このパラメーターの値を指定する必要があります。
ストレージクラスが作成されたことを確認します。
$ 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
に変わります。