
04.k8s使用ceph作为pod存储
1.PV与PVC概述
PV持久卷
对外部存储资源创建和使用的抽象,使得存储作为集群中的资源管理,PV又分为静态供给和动态供给,由于静态供给需要提前创建一堆PV,维护成本较高,所以企业一般使用动态供给
PVC持久卷申请
让用户不需要关心具体的Volume实现细节,只需要定义PVC需要多少多少磁盘容量即可
过程:
Pod --> pvc --> pv --> ceph
2.ceph-csi供给程序
Ceph-csi是ceph官方维护的PV供给程序,专门用于在Kubernetes中使用RBD、CephFS为pod提供存储
项目地址:https://github.com/ceph/ceph-csi
3.Pod使用RBD块存储
deploy YAML文件:
https://github.com/ceph/ceph-csi/tree/release-v3.3/deploy
关于部署,RBD YAML文件在deploy/rbd/jubernetes目录,YAML需要改动如下:
- 全部统一命名空间到ceph-csi
- 将镜像转存到docker hub
- 增加secret.yaml和storage class.yaml文件
- 将csi-rbdplugin-provisioner.yaml和cis-rbdplugin.yaml中关于kms配置注释
在使用过程中,还需要根据自己的集群环境修改:
- Csi-config-map.yaml修改连接ceph集群信息
- Secret.yaml修改密钥
- Storage class.yaml修改集群ID和存储池
步骤:
kubectl create ns ceph-csi sed -i 's#namespace: default#namespace: ceph-csi#g' *.yamlSecret.yaml
# ceph auth list client.admin key: AQBBs09iXvJNGhAAj3q69jgXyAnDKoP/KPv7wQ== --- apiVersion: v1 kind: Secret metadata: name: csi-rbd-secret namespace: ceph-csi stringData: userID: admin userKey: AQBBs09iXvJNGhAAj3q69jgXyAnDKoP/KPv7wQ==node节点安装客户端
pssh -h host.list -i "yum install -y ceph-common"修改 vi csi-config-map.yaml
# 查看ceph集群id [root@ceph-node01 ~]# ceph -s cluster: id: 2619f4ef-ca59-4798-8031-87501f2bf266 health: HEALTH_OK # cat csi-config-map.yaml --- apiVersion: v1 kind: ConfigMap data: config.json: |- [ { "clusterID": "2619f4ef-ca59-4798-8031-87501f2bf266", "monitors": [ "192.168.6.141:6789", "192.168.6.171:6789", "192.168.6.212:6789" ] } ] metadata: name: ceph-csi-config namespace: ceph-csistorage class.yaml
# 暂时没 # 1.修改ceph集群id # 2.修改ceph pool名称 apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-rbd-sc annotations: storageclass.kubernetes.io/is-default-class: "false" provisioner: kubernetes.io/rbd parameters: clusterID: 2619f4ef-ca59-4798-8031-87501f2bf266 pool: rbd-pool # 不完整,忽略使用以下secret和storageclass
1.获取key
# grep key ceph.client.admin.keyring |awk '{printf "%s", $NF}' |base64 QVFCQnMwOWlYdkpOR2hBQWozcTY5amdYeUFuREtvUC9LUHY3d1E9PQ==2.创建yaml文件
apiVersion: v1 kind: Secret metadata: name: ceph-admin-secret namespace: ceph-csi type: "kubernetes.io/rbd" data: key: QVFCQnMwOWlYdkpOR2hBQWozcTY5amdYeUFuREtvUC9LUHY3d1E9PQ== --- allowVolumeExpansion: true apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: annotations: storageclass.kubernetes.io/is-default-class: "true" name: csi-rbd-sc parameters: adminId: admin adminSecretName: ceph-admin-secret adminSecretNamespace: ceph-csi fsType: ext4 imageFeatures: layering imageFormat: "2" monitors: 192.168.6.141:6789,192.168.6.171:6789,192.168.6.212:6789 pool: rbd-pool userId: admin userSecretName: ceph-admin-secret userSecretNamespace: ceph-csi provisioner: kubernetes.io/rbd reclaimPolicy: Retain volumeBindingMode: Immediate将csi-rbdplugin-provisioner.yaml和cis-rbdplugin.yaml中关于kms配置注释
[root@bjo-ops-242 rbd_yaml]# grep kms csi-rbdplugin-provisioner.yaml # - name: ceph-csi-encryption-kms-config # mountPath: /etc/ceph-csi-encryption-kms-config/ #- name: ceph-csi-encryption-kms-config # name: ceph-csi-encryption-kms-config [root@bjo-ops-242 rbd_yaml]# grep kms csi-rbdplugin.yaml #- name: ceph-csi-encryption-kms-config # mountPath: /etc/ceph-csi-encryption-kms-config/ #- name: ceph-csi-encryption-kms-config # name: ceph-csi-encryption-kms-config执行apply
# kubectl apply -f .
4.Pod使用CephFS块存储
忽略
5.k8s使用ceph场景
RBD:
优点:读写性能好,支持镜像快照和克隆
缺点:不支持多节点挂载
适用场景:对读写性能要求高,且无多节点同时读取数据需求的应用,例如数据库
CephFS:
优点:支持k8s所有访问模式,支持多节点同时读写数据
缺点:读写性能一般,延迟时间不稳定
适用场景:对读写性能要求不高,I/O延迟不敏感的应用,例如文件共享
