下载代码 https://github.com/ceph/ceph-csi
[root@ceph-01 ~]# ceph -s
cluster:
id: c8ae7537-8693-40df-8943-733f82049642
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-01,ceph-02,ceph-03 (age 5h)
mgr: ceph-02(active, since 5d), standbys: ceph-03, ceph-01
mds: cephfs-abcdocker:1 {0=ceph-01=up:active} 2 up:standby
osd: 4 osds: 4 up (since 5h), 4 in (since 5h)
rgw: 2 daemons active (ceph-01, ceph-02)
task status:
data:
pools: 9 pools, 384 pgs
objects: 3.16k objects, 11 GiB
usage: 36 GiB used, 144 GiB / 180 GiB avail
pgs: 384 active+clean
注意当前内容中的 cluster->id:重要信息:c8ae7537-8693-40df-8943-733f82049642
默认情况下,Ceph 块设备使用rbd池。为 Kubernetes 卷存储创建一个池。确保您的 Ceph 集群正在运行,然后创建池。
查看存储池,如果需要新创建存储池.
新创建的池必须在使用前进行初始化。使用该rbd工具初始化池:
[root@ceph-01 ~]# ceph osd pool ls
.mgr
[root@ceph-01 ~]# ceph osd pool create k8s 128 128
[root@ceph-01 ~]# rbd pool init k8s
.mgr
k8s
设置 CEPH 客户端身份验证 建议使用admin用户,如果需要安全使用权限,则需要自己创建用户信息
为 Kubernetes 和 ceph -csi创建一个新用户,当然也可以直接使用client.admin用户
[root@ceph-01 ~]# ceph auth get-or-create client.k8s mon 'profile rbd' osd 'profile rbd pool=k8s' mgr 'profile rbd pool=k8s'
[client.k8s]
key = AQBYpZRiY/JmHRAAD6/jr3cE9E0B/7QjLGi8/w==
ceph auth list
[root@ceph176 ~]# ceph mon dump
epoch 1
fsid b00ed62a-a91b-11ed-820c-00505686a3b8
last_changed 2023-02-10T08:34:13.518137+0000
created 2023-02-10T08:34:13.518137+0000
min_mon_release 17 (quincy)
election_strategy: 1
0: [v2:10.0.19.176:3300/0,v1:10.0.19.176:6789/0] mon.ceph176
dumped monmap epoch 1
当前获取的重要信息为连接地址信息:
[v2:10.0.19.176:3300/0,v1:10.0.19.176:6789/0] mon.ceph176 提示当前连接信息地址:
10.0.19.176:6789`,如果存储多个地址,都需要提取。
ceph中不推荐在ceph rbd模式下使用RWX访问控制,如果应用层没有访问锁机制,可能会造成数据损坏。所以rbd模式我们只可以使用一个节点
ceph-csi需要创建ServiceAccount和RBAC用于访问Kubernetes集群内部信息
kubectl create -f ceph-csi/deploy/rbd/kubernetes/csidriver.yaml
kubectl create -f ceph-csi/deploy/rbd/kubernetes/csi-provisioner-rbac.yaml
kubectl create -f ceph-csi/deploy/rbd/kubernetes/csi-nodeplugin-rbac.yaml
根据上述操作拿到了 ClusterId 和 连接信息,将内容填写到ceph-csi/deploy/rbd/kubernetes/csi-config-map.yaml
当中
clusterID >> c8ae7537-8693-40df-8943-733f82049642
monitors >> "10.0.19.176:6789"
文件内容如下
apiVersion: v1
kind: ConfigMap
metadata:
annotations:
desc: ''
name: ceph-csi-config
namespace: default
data:
config.json: |-
[
{
"clusterID": "c8ae7537-8693-40df-8943-733f82049642",
"monitors": ["10.0.19.176:6789"]
}
]
kubectl create -f ceph-csi/deploy/rbd/kubernetes/csi-config-map.yaml
最新版本的ceph-csi还需要一个额外的ConfigMap对象来定义密钥管理服务 (KMS) 提供者的详细信息。如果未设置 KMS,请将空配置放入csi-kms-config-map.yaml
kubectl apply -f ceph-csi/examples/kms/vault/kms-config.yaml
ceph-csi还需要创建一个configmap,用于读取ceph节点中的ceph.conf中的配置文件,csi容器会读取这个配置文件
kubectl create -f ceph-csi/examples/ceph-conf.yaml
通过 ceph auth list
获取ceph用户,找到admin用户,复制后面的Key
写入对应的文件当中`ceph-csi/examples/rbd/secret.yaml
...
client.admin
key: AQCFAeZjBGZ6BRAAt61/K9K6aoHgqZXJxQOxFg==
caps: [mds] allow *
caps: [mgr] allow *
caps: [mon] allow *
caps: [osd] allow *
...
文件内容如下
cat <<EOF > /root/ceph/csi-rbd-secret.yaml
---
apiVersion: v1
kind: Secret
metadata:
name: csi-rbd-secret
namespace: default
stringData:
userID: admin
userKey: AQCFAeZjBGZ6BRAAt61/K9K6aoHgqZXJxQOxFg==
EOF
创建文件
kubectl apply -f ceph-csi/examples/rbd/secret.yaml
CEPH-CSI RBD 创建
ceph中不推荐在ceph rbd模式下使用RWX访问控制,如果应用层没有访问锁机制,可能会造成数据损坏。所以rbd模式我们只可以使用一个节点
部署CEPH-CSI RBAC
ceph-csi需要创建ServiceAccount和RBAC用于访问Kubernetes集群内部信息
kubectl cephkubectl create -fl create -f ceph-csi/deploy/rbdtlkubectl create -f cephtl -fkubectl create -f ceph-csi/deploy/rbd/kubernetestlephploy/rbd/kubernetes/csi-rbdplugin-provisioner.yaml
kubectl createkubectlcreate -f ceph-csi/deploy/rbd/kubernetes/csi-rbdplugin-provisioner.yamltlekubectl create -f ceph-csi/deployeatefkubectl create -f ceph-csitekubectl create -f ceph-csikubectl create -f ceph-csikubectl create -f ceph-csi/deploy/rbd/kuberneteskubectl create -f ceph-csitekubectl create -f ceph-csi/deploy/rbd/kuberneteskubectlkubectl create -f ceph-csikubectlkubectl create -f ceph-csi/deploy/rbd/kubernetesatedeploykubectl create -ftekubectl create -f ceph-csikubectlkubectl create -f cephctl create -f ceph-csi/deploy/rbd/kubernetesateph/deploykubectl create -f ceph-csi/deploy/rbd/kuberneteskubectlkubectl create -f cephkubectl create -f cephtlcreate -fkubectl create -f ceph-csi/deploykubectlate ceph-csi/deploy/rbd/kubernetestltekubectl create -f ceph-csi/deploy/rbd createcephkubectl create -f ceph-csi/deploy/rbd/kubernetes/csireate-f ceph-csieployrbdkubectl create -f ceph-csi/deploy/rbd/kubernetes/csi-rbdpluginkubectl createkubectl create -f ceph-csikubectl create -f ceph-csi/deploykubectl create -f ceph-csi/deploy/rbdate cephkubectl create -f cephtlkubectl create -f ceph-csi/deploy/rbdkubectlcephsikubectl create -f ceph-csi/deploytl create -f ceph-csi/deploy/rbdkubectl create -f ceph-csi/deploy/rbd/kubernetes/csi-rbdplugin-provisioner.yaml
kubectl create -f ceph-csi/deploy/rbd/kubernetes/csi-rbdplugin.yaml
kubectl apply -f ceph-csi/examples/rbd/storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ceph-rbd #storageclass 名称
provisioner: rbd.csi.ceph.com # 驱动器
parameters:
clusterID: c8ae7537-8693-40df-8943-733f82049642 # ceph集群id
pool: k8s # pool空间
imageFeatures: "layering" # rbd特性
csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret
csi.storage.k8s.io/provisioner-secret-namespace: default
csi.storage.k8s.io/controller-expand-secret-name: csi-rbd-secret
csi.storage.k8s.io/controller-expand-secret-namespace: default
csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret
csi.storage.k8s.io/node-stage-secret-namespace: default
csi.storage.k8s.io/fstype: ext4
reclaimPolicy: Delete # pvc回收机制
allowVolumeExpansion: true # 对扩展卷进行扩展
mountOptions:
略