下载代码 https://github.com/ceph/ceph-csi
1.环境准备 使用命令查看CEPH的环境信息
[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
2. Ceph Csi 驱动部署
默认情况下,Ceph 块设备使用rbd池。为 Kubernetes 卷存储创建一个池。确保您的 Ceph 集群正在运行,然后创建池。
2.1 Ceph Csi 驱动部署
查看存储池,如果需要新创建存储池.
新创建的池必须在使用前进行初始化。使用该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
3. 配置CEPH-CSI
设置 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==
3.1 通过命令就可以查看到 客户端信息
ceph auth list
4.生成CEPH-CSI CONFIGMAP 配置信息
[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`,如果存储多个地址,都需要提取。
5.进入 deploy/rbd/kubernetes
5.1 部署CEPH-CSI RBAC
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
5.2 在Kubernetes创建的configmap。
根据上述操作拿到了 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"]
}
]
5.3 创建配置
kubectl create -f ceph-csi/deploy/rbd/kubernetes/csi-config-map.yaml
5.4 安装激活密钥
最新版本的ceph-csi还需要一个额外的ConfigMap对象来定义密钥管理服务 (KMS) 提供者的详细信息。如果未设置 KMS,请将空配置放入csi-kms-config-map.yaml
kubectl apply -f ceph-csi/examples/kms/vault/kms-config.yaml
5.5 创建节点读取配置文件
ceph-csi还需要创建一个configmap,用于读取ceph节点中的ceph.conf中的配置文件,csi容器会读取这个配置文件
kubectl create -f ceph-csi/examples/ceph-conf.yaml
5.6 创建连接密钥
通过 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
6.创建提供者,deploy/rbd/kubernetes目录
CEPH-CSI RBD 创建
ceph中不推荐在ceph rbd模式下使用RWX访问控制,如果应用层没有访问锁机制,可能会造成数据损坏。所以rbd模式我们只可以使用一个节点
部署CEPH-CSI RBAC
ceph-csi需要创建ServiceAccount和RBAC用于访问Kubernetes集群内部信息
kubectl create -f ceph-csi/deploy/rbd/kubernetes/csi-rbdplugin-provisioner.yaml
kubectl create -f ceph-csi/deploy/rbd/kubernetes/csi-rbdplugin.yaml
6. 创建存储,找到CEPH当中的存储池
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:
- discard
···
验证
略