k8s使用cephfs动态存储

参考https://github.com/kubernetes-incubator/external-storage/tree/master/ceph/cephfs

# 官方没有cephfs动态卷支持
# 使用社区提供的cephfs-provisioner
kubectl create ns cephfs
#部署Provisioner 
# yaml文件 https://github.com/kubernetes-incubator/external-storage/tree/master/ceph/cephfs/deploy/rbac
NAMESPACE=cephfs
sed -r -i "s/namespace: [^ ]+/namespace: $NAMESPACE/g" ./rbac/*.yaml
sed -r -i "N;s/(name: PROVISIONER_SECRET_NAMESPACE.*\n[[:space:]]*)value:.*/\1value: $NAMESPACE/" ./rbac/deployment.yaml
kubectl -n $NAMESPACE apply -f ./rbac
#检查pod 的状态是否正常
 kubectl get pods -n cephfs
     NAME                                  READY   STATUS    RESTARTS   AGE
     cephfs-provisioner-7bf7d44886-wvjz8   1/1     Running   0          4h13m

创建secret。在secret中,data域的各子域的值必须为base64编码值。key值为ceph.client.admin.keyring中的值

#echo "AQDchXhYTtjwHBAAk2/H1Ypa23WxKv4jA1NFWw==" | base64
QVFEY2hYaFlUdGp3SEJBQWsyL0gxWXBhMjNXeEt2NGpBMU5GV3c9PQo=

#vim ceph-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: ceph-secret
data:
  key: QVFEY2hYaFlUdGp3SEJBQWsyL0gxWXBhMjNXeEt2NGpBMU5GV3c9PQo=

配置 storageclass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: cephfs
  namespace: cephfs
provisioner: ceph.com/cephfs
parameters:
  monitors: 172.16.1.91:6789,172.16.1.92:6789,172.16.1.93:6789
  adminId: admin
  adminSecretName: ceph-secret
  adminSecretNamespace: cephfs
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: claim
  namespace: cephfs
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: cephfs
  resources:
    requests:
      storage: 1Gi
---
kind: Pod
apiVersion: v1
metadata:
  name: test-pod
  namespace: cephfs
spec:
  containers:
  - name: test-pod
    image: ikubernetes/myapp:v4
    volumeMounts:
      - name: pvc
        mountPath: "/data/cephfs"
  volumes:
    - name: pvc
      persistentVolumeClaim:
        claimName: claim

      provisioner 该字段指定使用存储卷类型为 kubernetes.io/rbd,注意 kubernetes.io/ 开头为 k8s 内部支持的存储提供者,不同的存储卷提供者类型这里要修改成对应的值。
      adminId | userId 这里需要指定两种 Ceph 角色 admin 和其他 user,admin 角色默认已经有了,其他 user 可以去 Ceph 集群创建一个并赋对应权限值,如果不创建,也可以都指定为 admin。
      adminSecretName 为上边创建的 Ceph 管理员 admin 使用的 ceph-secret-admin。
      adminSecretNamespace 管理员 secret 使用的命名空间,默认 default,如果修改为其他的话,需要修改 ceph-secret-  admin.yaml 增加 namespace: other-namespace。
 

你可能感兴趣的:(k8s使用cephfs动态存储)