参考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/devmonitors:
- 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