k8s使用ceph-csi集成cephfs

前提:k8s集群和ceph集群已搭建完成。

cephfs的创建
#查看
#] eph fs ls

#创建名为k8s_cephfs的cephfs
#] ceph fs volume create k8s_cephfs --placement=3

#查看mds服务
#] ceph mds stat

#查看pool池
#] ceph osd pool ls

在这里插入图片描述

创建客户端用户和key
#]创建客户端用户 k8s_user
#] ceph auth add client.k8s_user mon 'allow rw' mds 'allow rw' osd 'allow rwx pool=cephfs.k8s_cephfs.data'

#查看客户端用户信息
#] ceph auth get client.k8s_user

#到/etc/ceph下创建一个user_keyring的目录,用来存放用户keyring文件
#] cd /etc/ceph/ && mkdir user_keyring

#到user_keyring目录下,创建客户端用户keyring文件
#] cd user_keyring/
#] ceph auth get client.k8s_user -o ceph.client.k8s_user.keyring

#验证
#] cat ceph.client.k8s_user.keyring 

在这里插入图片描述

在这里插入图片描述

k8s部署cephfs
#下载ceph-csi包
#] wget https://github.com/ceph/ceph-csi/archive/refs/tags/v3.4.0.tar.gz

#解压
#] tar zvxf v3.4.0.tar.gz

#进入到ceph-csi-3.4.0/deploy/cephfs/kubernetes目录下操作
#] cd ceph-csi-3.4.0/deploy/cephfs/kubernetes

#创建一个名为 cephfs-csi 的namespace,防止cephfs-csi的pod被意外删除
#] kubectl create ns cephfs-csi

#当前目录下的所有yaml文件中都加入
#]vim *.yaml
metadata:
  namespace: cephfs-csi

#修改csi-config-map.yaml文件,填入cephfs的相关信息。
#vim csi-config-map.yaml
---
apiVersion: v1
kind: ConfigMap
data:
  config.json: |-
    [
      {
        "clusterID": "67a93278-b6cd-11f0-96bf-4dc0d6523883",	#ceph集群ID
        "monitors": [											#ceph集群的mon节点ip+port
          "192.168.100.231:6789",	
          "192.168.100.232:6789",
          "192.168.100.233:6789"
        ]
      }
    ]
metadata:
  name: ceph-config
  namespace: cephfs-csi


#部署ceph-csi
#] kubectl apply -f .

#查看
#]  kubectl get pod -n cephfs-csi -o wide

在这里插入图片描述

创建Secret和StorageClass文件
#创建secret-csi-cephfs.yaml文件
#] vim secret-csi-cephfs.yaml
---
apiVersion: v1
kind: Secret
metadata:
  name: csi-cephfs-secret
  namespace: cephfs-csi
stringData:
  userID: k8s_user										#上面ceph集群创建的用户k8s_user
  userKey: AQDufQlpTSiqLxAAodfZV50ok+E6JlQFBz141Q==		#用户k8s_user的key值
  adminID: admin										#ceph集群的admin用户
  adminKey: AQBEdQVpQ4UmFxAA7+r4S5WK0/FDwjtZWsQ8SQ==	
  
#创建storageclass-csi-cephfs.yaml文件
#] vim storageclass-csi-cephfs.yaml
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: csi-cephfs-sc
  namespace: cephfs-csi
provisioner: cephfs.csi.ceph.com
parameters:
  clusterID: 67a93278-b6cd-11f0-96bf-4dc0d6523883			#ceph集群ID
  fsName: k8s_cephfs										#ceph创建的cephfs的名字
  csi.storage.k8s.io/provisioner-secret-name: csi-cephfs-secret
  csi.storage.k8s.io/provisioner-secret-namespace: cephfs-csi
  csi.storage.k8s.io/controller-expand-secret-name: csi-cephfs-secret
  csi.storage.k8s.io/controller-expand-secret-namespace: cephfs-csi
  csi.storage.k8s.io/node-stage-secret-name: csi-cephfs-secret
  csi.storage.k8s.io/node-stage-secret-namespace: cephfs-csi
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
  - debug		#让内核把挂载细节打印到 dmesg,排错时打开,用完关掉,对性能零影响。

#应用
#] kubectl apply -f secret-csi-cephfs.yaml
#] kubectl apply -f storageclass-csi-cephfs.yaml

#查看
#] kubectl get secrets -n cephfs-csi
#] kubectl get storageclasses.storage.k8s.io -n cephfs-csi

在这里插入图片描述

测试
#创建一个pvc
#] vim csi-pvc01.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: csi-cephfs-pvc01	#pvc的名称
spec:
  accessModes:
    - ReadWriteMany			#读写权限设置
  resources:
    requests:
      storage: 10Gi			#大小
  storageClassName: csi-cephfs-sc	#上面创建的StorageClass的名称

#创建一个Deployment来验证
#vim csi-pvc01-pod.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: csi-cephfs-pvc01
  labels:
    apps: csi-pvc01
spec:
  replicas: 3
  selector:
    matchExpressions:
    - key: apps
      values:
      - "csi-pvc01"
      operator: In
  template:
    metadata:
      labels:
        apps: csi-pvc01
    spec:
      containers:
      - name: web-server
        image: harbor.ming.com/library/nginx:latest
        volumeMounts:
          - name: mypvc01
            mountPath: /var/lib/www
      volumes:
      - name: mypvc01
        persistentVolumeClaim:
          claimName: csi-cephfs-pvc01
          readOnly: false
          
#] kubectl apply -f csi-pvc01.yaml
#] kubectl apply -f csi-pvc01-pod.yaml

在这里插入图片描述

注:后续使用,只需要创建对应的pvc,然后再pod中引用就可以,有namespace的需要再创建时加入命名空间。

例:
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc_name				#需要的pvc名称
  namespace: ns_name			#被ns_name的命名空间使用
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi				#设置pvc的存储大小
  storageClassName: csi-cephfs-sc
  

使用:
	spec:
      containers:
      - name: 
        image: 
        volumeMounts:
          - name: data				#和下面定义的保持一致
            mountPath: /var/lib/www	#pod挂载目录
      volumes:
      - name: data					#自定义命名
        persistentVolumeClaim:
          claimName: pvc_name		#创建的pvc名称
          readOnly: false			#读写权限设置

更多推荐