k8s使用ceph-csi集成cephfs
·
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 #读写权限设置
更多推荐
所有评论(0)