[toc]
k8s挂载Ceph RBD
k8s挂载Ceph RBD有两种方式,一种是传统的PV&PVC的方式,也就是说需要管理员先预先创建好相关PV和PVC,然后对应的deployment或者replication来挂载PVC使用。而在k8s 1.4以后,kubernetes提供了一种更加方便的动态创建PV的方式,即StorageClass。使用StorageClass时无需预先创建固定大小的PV来等待使用者创建PVC使用,而是直接创建PVC即可使用。
需要说明的是,要想让k8s的node节点执行挂载ceph rbd的指令,需要在所有节点上安装ceph-common包。直接通过yum安装即可。
PV & PVC方式
创建secret
#获取管理key并进行64位编码ceph auth get-key client.admin | base64
创建ceph-secret.yml文件,内容如下:
apiVersion: v1kind: Secretmetadata: ?name: ceph-secretdata:#Please note this value is base64 encoded.# echo "keystring"|base64 ?key: QVFDaWtERlpzODcwQWhBQTdxMWRGODBWOFZxMWNGNnZtNmJHVGc9PQo=
创建PV
创建test.pv.yml文件,内容如下:
apiVersion: v1kind: PersistentVolumemetadata: ?name: test-pvspec: ?capacity: ???storage: 2Gi ?accessModes: ???- ReadWriteOnce ?rbd: ???#ceph的monitor节点 ???monitors: ????????????- 10.5.10.117:6789 ?????- 10.5.10.236:6789 ?????- 10.5.10.227:6789 ???#ceph的存储池名字 ???pool: data ????#在存储池里创建的image的名字 ???image: data ????????????user: admin ???secretRef: ?????name: ceph-secret ???fsType: xfs ???readOnly: false ?persistentVolumeReclaimPolicy: Recycle
kubectl create -f test.pv.yml
创建PVC
创建test.pvc.yml文件,内容如下:
kind: PersistentVolumeClaimapiVersion: extensions/v1beta1metadata: ?name: test-pvcspec: ?accessModes: ???- ReadWriteOnce ?resources: ???requests: ?????storage: 2Gi
kubectl create -f test.pvc.yml
创建deployment挂载PVC
创建test.dm文件,内容如下:
apiVersion: extensions/v1beta1kind: Deploymentmetadata: ?name: testspec: ?replicas: 1 ?template: ???metadata: ?????labels: ???????app: test ???spec: ?????containers: ?????- name: test ???????image: dk-reg.op.douyuyuba.com/op-base/openresty:1.9.15 ???????ports: ???????- containerPort: 80 ???????volumeMounts: ?????????- mountPath: "/data" ???????????name: data ?????volumes: ???????- name: data ?????????persistentVolumeClaim: ???????????claimName: test-pvc
kubectl create -f test.dm.yml
StorageClass方式
创建secret
由于StorageClass要求ceph的secret type必须为kubernetes.io/rbd,所以在上面PV & PVC方式中创建的secret无法使用,需要重新创建。如下:
# 其中key的部分为ceph原生的key,未使用base64重新编码kubectl create secret generic ceph-secret --type="kubernetes.io/rbd" --from-literal=key=‘AQCikDFZs870AhAA7q1dF80V8Vq1cF6vm6bGTg==‘ --namespace=kube-systemkubectl create secret generic ceph-secret --type="kubernetes.io/rbd" --from-literal=key=‘AQCikDFZs870AhAA7q1dF80V8Vq1cF6vm6bGTg==‘ --namespace=default
创建StorageClass
创建test.sc.yml文件,内容如下:
apiVersion: storage.k8s.io/v1kind: StorageClassmetadata: ?name: test-storageclassprovisioner: kubernetes.io/rbdparameters: ?monitors: 192.168.1.11:6789,192.168.1.12:6789,192.168.1.13:6789 ?# Ceph 客户端用户ID(非k8s的) ?adminId: admin ?adminSecretName: ceph-secret ?adminSecretNamespace: kube-system ?pool: data ?userId: admin ?userSecretName: ceph-secret
创建PVC
创建test.pvc.yml文件,内容如下:
kind: PersistentVolumeClaimapiVersion: v1metadata: ?name: test-sc-pvc ?annotations: ????volume.beta.kubernetes.io/storage-class: test-storageclassspec: ?accessModes: ???- ReadWriteOnce ?resources: ???requests: ?????storage: 2Gi
kubectl create -f test.pvc.yml
至于挂载,与PV & PVC的方式一致,不再重复说明
k8s挂载Cephfs
上面大致说明了使用k8s挂载ceph rbd块设备的方法。这里简单说下k8s挂载ceph 文件系统的方法。
首先secret可以直接与上面复用,不用再单独创建。也不需要再创建pv和pvc。直接在deployment中挂载即可,方法如下:
apiVersion: extensions/v1beta1kind: Deploymentmetadata: ?name: testspec: ?replicas: 1 ?template: ???metadata: ?????labels: ???????app: test ???spec: ?????containers: ?????- name: test ???????image: dk-reg.op.douyuyuba.com/op-base/openresty:1.9.15 ???????ports: ???????- containerPort: 80 ???????volumeMounts: ?????????- mountPath: "/data" ???????????name: data ?????volumes: ???????- name: data ?????????cephfs: ???????????monitors: ?????????????- 10.5.10.117:6789 ?????????????- 10.5.10.236:6789 ?????????????- 10.5.10.227:6789 ???????????path: /data ???????????user: admin ???????????secretRef: ?????????????name: ceph-secret
kubernetes挂载ceph rbd和cephfs的方法
原文地址:https://www.cnblogs.com/breezey/p/8849501.html