文章目录
首要条件
- 你得先有一个Ceph存储,单节点安装Ceph
- ceph版本信息
# ceph version ceph version 10.2.11 (e4b061b47f07f583c92a050d9e84b1813a35671e)
参考
ceph集群上的操作
pool
- 创建pool
ceph osd pool create kubernetes
- 初始化pool
rbd pool init kubernetes
- 检查
应该看到
kubernetes
这个poolroot@ceph:~# ceph osd lspools 1 device_health_metrics 4 pool-01 5 cephfs_data 6 cephfs_metadata 7 kubernetes
用户
- 在Ceph上创建用于CSI的用户
$ ceph auth get-or-create client.kubernetes mon 'profile rbd' osd 'profile rbd pool=kubernetes' mgr 'profile rbd pool=kubernetes' [client.kubernetes] key = AQD9o0Fd6hQRChAAt7fMaSZXduT3NWEqylNpmg==
- 发生错误,可能是我用的Ceph版本的原因:
# ceph auth get-or-create client.kubernetes-for-csi mon 'profile rbd' osd 'profile rbd pool=kubernetes' mgr 'profile rbd pool=kubernetes' Error EINVAL: moncap parse failed, stopped at 'profile rbd' of 'profile rbd'
- 更正为如下的语句,参考設定 StorageClass (以 Ceph RBD 為例)
ceph auth get-or-create client.kubernetes mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=kubernetes' -o ceph.client.kubernetes.keyring
- 检查创建的用户并获取
root@ceph:~# ceph auth get client.kubernetes [client.kubernetes] key = AQDG6dVg8pfmGRAA2vPkmr3sesTo+2PVrfcN+A== caps mon = "allow r" caps osd = "allow class-read object_prefix rbd_children, allow rwx pool=kubernetes" exported keyring for client.kubernetes
获取Ceph信息
# ceph mon dump
dumped monmap epoch 1
epoch 1
fsid 63d60969-7dd4-46f4-bada-de9a2ded0e10
last_changed 2021-05-18 15:46:41.007169
created 2021-05-18 15:46:41.007169
0: 192.168.11.231:6789/0 mon.zmysql231
在K8s集群上的操作
创建新的namespace
接下来的所有操作都在这个namesapce里进行
kubectl create namespace csi-ceph
生成secret
- userID: 就是在ceph集群上创建的用户名
- userKey: 就是在ceph集群上创建的用户的
key
- kubectl apply -f
csi-rbd-secret.yaml
apiVersion: v1 kind: Secret metadata: name: csi-rbd-secret namespace: default stringData: userID: kubernetes userKey: AQDG6dVg8pfmGRAA2vPkmr3sesTo+2PVrfcN+A== # 这里填入原始值就ok,不用base64转换
生成Ceph-CSI的ConfigMap
- 把
ceph集群上的操作.获取Ceph信息
的fsid
后面的那块换成下面的clusterID
- 把
ceph集群上的操作.获取Ceph信息
的mon.xxx
前面的ip地址和端口替换为下面的montiors
里面的东西 - kubectl apply -f
csi-config-map.yaml
--- apiVersion: v1 kind: ConfigMap data: config.json: |- [ { "clusterID": "63d60969-7dd4-46f4-bada-de9a2ded0e10", "monitors": ["192.168.11.231:678"] # 这里如果是单个的话,写成一行,不要多行 } ] metadata: name: ceph-csi-config namespace: csi-ceph
生成KMS
这个里面没啥数据,可以参看官方文档
- k apply -f
csi-kms-config-map.yaml
apiVersion: v1 kind: ConfigMap data: config.json: |- {} metadata: name: ceph-csi-encryption-kms-config
配置plugin
RBAC
在附件的压缩包的
rbac
目录里已经有这2个文件了,直接执行就可以了
kubectl apply -f https://raw.githubusercontent.com/ceph/ceph-csi/master/deploy/rbd/kubernetes/csi-provisioner-rbac.yaml
kubectl apply -f https://raw.githubusercontent.com/ceph/ceph-csi/master/deploy/rbd/kubernetes/csi-nodeplugin-rbac.yaml
provisioner and node plugins
在附件的压缩包的
rbdplugin
目录里已经有这2个文件了,直接执行就可以了
wget https://raw.githubusercontent.com/ceph/ceph-csi/master/deploy/rbd/kubernetes/csi-rbdplugin-provisioner.yaml
kubectl apply -f csi-rbdplugin-provisioner.yaml
wget https://raw.githubusercontent.com/ceph/ceph-csi/master/deploy/rbd/kubernetes/csi-rbdplugin.yaml
kubectl apply -f csi-rbdplugin.yaml
- 事先下载要用到的镜像,上传到自己的私有仓库并在这两个文件里替换地址(附件里的文件已经替换c成国内可以访问的镜像源了)
csi-rbdplugin-provisioner.yaml
里涉及镜像:- csi-attacher:v3.0.2
- csi-resizer:v1.0.1
- csi-snapshotter:v4.0.0
- csi-provisioner:v2.0.4
- cephcsi:canary
csi-rbdplugin.yaml
里涉及镜像:- csi-node-driver-registrar:v2.0.1
- 如果遇到资源不够,可以把
csi-rbdplugin-provisioner.yaml
里的replicas
改为1 - 创建出来的po
root@k8s-master:~/ceph-csi# kubectl get po -n csi-ceph NAME READY STATUS RESTARTS AGE csi-rbdplugin-kbfl8 3/3 Running 0 5m42s csi-rbdplugin-provisioner-77477bc9b-zgh8m 7/7 Running 0 5m50s
创建sc
上一步的po都ok了,才进行这一步
- kubectl apply -f
csi-rbd-sc.yaml
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-rbd-sc namespace: csi-ceph provisioner: rbd.csi.ceph.com parameters: clusterID: 8f6553be-c686-11eb-bb57-000c29e37ba8 pool: kubernetes imageFeatures: layering csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret csi.storage.k8s.io/provisioner-secret-namespace: csi-ceph csi.storage.k8s.io/controller-expand-secret-name: csi-rbd-secret csi.storage.k8s.io/controller-expand-secret-namespace: csi-ceph csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret csi.storage.k8s.io/node-stage-secret-namespace: csi-ceph reclaimPolicy: Delete allowVolumeExpansion: true mountOptions: - discard
- 检查
root@k8s-master:~/ceph-csi# kubectl get sc -n csi-ceph NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE csi-rbd-sc rbd.csi.ceph.com Delete Immediate true 21s
测试
创建pvc
- 对应的文件在附件的
test/raw-block-pvc.yaml
- 注意:
volumeMode
为Block
,下面pod的就是volumeDevices
volumeMode
为Filesystem
,那么下面pod就是我们常见的volumeMount
- kubectl apply -f
raw-block-pvc.yaml
--- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: raw-block-pvc namespace: csi-ceph spec: accessModes: - ReadWriteOnce volumeMode: Block # 注意这里Block与下面pod的volumeDevices是对应的 # volumeMode: Filesystem resources: requests: storage: 1Gi storageClassName: csi-rbd-sc
- 错误,检查前面的用户和secret
- 成功的pvc,注意:
STATUS
为Bound
root@k8s-master:~/ceph-csi/test# kubectl get pvc -n csi-ceph NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE raw-block-pvc Bound pvc-2f6d5c0f-d073-4b7b-99e1-95b962ee4e14 1Gi RWO csi-rbd-sc 12s
- 检查pv
root@k8s-master:~/ceph-csi/test# kubectl get pv -n csi-ceph NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-2f6d5c0f-d073-4b7b-99e1-95b962ee4e14 1Gi RWO Delete Bound csi-ceph/raw-block-pvc csi-rbd-sc 8m21s
创建pod
- 对应的文件在附件的
test/raw-block-pod.yaml
- kubectl apply -f
raw-block-pod.yaml
apiVersion: v1 kind: Pod metadata: name: pod-with-raw-block-volume namespace: csi-ceph spec: containers: - name: fc-container image: fedora:26 command: ["/bin/sh", "-c"] args: ["tail -f /dev/null"] #volumeDevices: # 与上面的volumeMode: Filesystem对应 # - name: data # devicePath: /dev/xvda volumeDevices: - name: data devicePath: /dev/xvda volumes: - name: data persistentVolumeClaim: claimName: raw-block-pvc
- 检查
前2个pod是
配置plugin
这一步生成的,最后一个pod才是这次生成的root@k8s-master:~/ceph-csi/test# kubectl get po -n csi-ceph NAME READY STATUS RESTARTS AGE csi-rbdplugin-kbfl8 3/3 Running 0 29m csi-rbdplugin-provisioner-77477bc9b-zgh8m 7/7 Running 0 29m pod-with-raw-block-volume 1/1 Running 0 2m43s
用到的附件
- 地址: ceph-csi.tar.gz