參考https://github.com/kubernetes-incubator/external-storage/tree/master/ceph/cephfs
# 官方沒有cephfs動態卷支持
# 使用社區提供的cephfs-provisioner
一、部署cephfs-provisioner
github地址: https://github.com/kubernetes-retired/external-storage/tree/master/ceph/cephfs/deploy
kubectl create ns cephfs kubectl apply -f rbac -n cephfs [sysadm@ST-Middleware-05 k8s]$ kubectl -n cephfs get pod NAME READY STATUS RESTARTS AGE cephfs-provisioner-86794546cc-hbt8j 1/1 Running 0 23h test-pod 1/1 Running 0 20h
2、創建secret。在secret中,data域的各子域的值必須為key的base64編碼值。key值為ceph.client.admin.keyring中的值
先對ceph.client.admin.keyring中的值進行base64編碼
#echo "AQDchXhYTtjwHBAAk2/H1Ypa23WxKv4jA1NFWw==" | base64 QVFEY2hYaFlUdGp3SEJBQWsyL0gxWXBhMjNXeEt2NGpBMU5GV3c9PQo=
創建 ceph-secret.yaml
apiVersion: v1 kind: Secret metadata: name: ceph-secret
namespace: cephfs data: key: QVFEY2hYaFlUdGp3SEJBQWsyL0gxWXBhMjNXeEt2NGpBMU5GV3c9PQo=
3、配置 storageclass
--- apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: cephfs-dev namespace: cephfs provisioner: ceph.com/cephfs parameters: monitors: 192.168.130.135:6789,192.168.130.136:6789,192.168.130.137:6789 adminId: admin adminSecretName: ceph-secret adminSecretNamespace: cephfs claimRoot: /volumes/kubernetes/dev
- provisioner: 該字段指定使用存儲卷類型為 kubernetes.io/rbd,注意 kubernetes.io/ 開頭為 k8s 內部支持的存儲提供者,不同的存儲卷提供者類型這里要修改成對應的值
-
monitors: ceph監控節點
-
adminId: 這里需要指定兩種 Ceph 角色 admin 和其他 user,admin 角色默認已經有了,其他 user 可以去 Ceph 集群創建一個並賦對應權限值,如果不創建,也可以都指定為 admin
-
adminSecretName: 為上邊創建的 Ceph 管理員 admin 使用的 ceph-secret
-
claimRoot: 在ceph上的目錄結構
4、創建test-pvc.yaml
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: claim namespace: cephfs spec: accessModes: - ReadWriteMany storageClassName: cephfs-dev resources: requests: storage: 1Gi
5、創建test-pod.yaml
--- kind: Pod apiVersion: v1 metadata: name: test-pod namespace: cephfs spec: containers: - name: test-pod image: 10.2.57.16:5000/library/nginx:1.18.0 volumeMounts: - name: pvc mountPath: "/data/cephfs" volumes: - name: pvc persistentVolumeClaim: claimName: claim