kubernetes-使用ceph-csi
Kubernetes (简称K8s)和Ceph都是开源的云计算技术,K8s是一个容器编排平台,而Ceph是一个分布式存储系统。将K8s和Ceph集成在一起可以为应用程序提供高可用性和持久性存储。本文主要介绍如何在使用openEuler 22.03操作系统的鲲鹏服务器上操作K8s集成Ceph。
Ceph是一个可靠的、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务。Ceph提供统一的横向扩展存储,带有自我修复和智能预测故障的功能,已经成为软件定义存储的事实上的标准之一。
Ceph是开源的,它使许多供应商能够提供基于Ceph的软件去定义合适的存储系统。K8s是用于自动部署、扩展和管理容器化(Containerized)应用程序的开源系统。它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。因各个项目集群在部署时对存储的需求各有差异,使用Ceph作为统一储存,则在确保可靠性的同时又能具备相应的灵活性,将计算与存储解耦与K8s灵活的部署方式相得益彰。
这里主要讲解集成使用ceph rbd 功能
1. 创建 rbd pool
rbd 块存储于ceph pool中,所以需要创建一个pool 用于存储后续的pv disk
#ceph osd pool create kubernetes
#rbd pool init kubernetes
2. 配置ceph-csi
ceph 如果需要通过cephx认证的情况下,需要创建config map 传递 ceph config 以及secret。如果不开启cephx,下面的cephx改成none即可。
# cat <<EOF > ceph-config.yaml
---
apiVersion: v1
kind: ConfigMap
data:
ceph.conf: |
[global]
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
# keyring is a required key and its value should be empty
keyring: |
metadata:
name: ceph-config
EOF
# kubectl apply -f ceph-config.yaml
配置ceph monitor
# cat <<EOF > csi-config-map.yaml
---
apiVersion: v1
kind: ConfigMap
data:
ceph.conf: |
[{"clusterID":"80451321eeqeqw-eqeq-eqeq-eqeqewqeq-dqeq-eqe","monitors":["10.220.134.7:6789","10.220.134.43:6789","10.220.130.200:6789"]}]
metadata:
name: ceph-csi-config
EOF
# kubectl apply -f csi-config-map.yaml
3. 配置cephx
配置cephx的账号和密码(ceph auth 的账号和密码在ceph侧自行生成即可,当然如果不开启cephx的情况下,这里userID和userKey随便填就行)
#cat <<EOF > csi-rbd-secret.yaml
---
apiVersion: v1
kind: Secret
metadata:
name: csi-rbd-secret
namespace: default
stringData:
userID: kubernetes
userKey: AQD9o0Fd6hQRChAAt7fMaSZXduT3NWEqylNpmg==
EOF
# kubectl apply -f csi-rbd-secret.yaml
3. 配置ceph-csi
3.1 选择和ceph、kubernetes版本对应的ceph-csi版本
#ceph -v
ceph version 14.2.22
# kubectl version
Client Version: v1.31.4
Kustomize Version: v5.4.2
Server Version: v1.31.4
3.2 选择对应的ceph-csi版本
这里选择使用ceph-csi v3.7.2 , 和用的ceph 和kubernetes匹配
#git clone -b v3.7.2 https://github.com/ceph/ceph-csi.git
#cd ceph-csi/deploy/rbd/kubernetes
配置访问Kubernetes API对象的ServiceAccount和RBAC
#kubectl apply -f csi-provisioner-rbac.yaml
#kubectl apply -f csi-nodeplugin-rbac.yaml
部署csi 程序与节点插件
修改 csi-rbdplugin.yaml 和 csi-rbdplugin-provisioner.yaml,注释掉csi-rbdplugin.yaml和csi-rbdplugin-provisioner.yaml文件中kms相关内容
#kubectl apply -f csi-rbdplugin.yaml
#kubectl apply -f csi-rbdplugin-provisioner.yaml
4. 检查
# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
csi-rbdplugin-2xb7k 3/3 Running 0 2m34s 172.22.2.55 node3 <none> <none>
csi-rbdplugin-k6wjl 3/3 Running 0 2m34s 172.22.4.4 node1 <none> <none>
csi-rbdplugin-provisioner-7586c58d96-26rjk 7/7 Running 0 2m30s 10.233.65.112 node2 <none> <none>
csi-rbdplugin-provisioner-7586c58d96-7kfxx 7/7 Running 0 2m30s 10.233.64.124 node1 <none> <none>
csi-rbdplugin-provisioner-7586c58d96-qn4jl 7/7 Running 0 2m30s 10.233.66.161 node3 <none> <none>
csi-rbdplugin-vv7ds 3/3 Running 0 2m34s 172.22.3.50 node2 <none> <none>
参考:
https://docs.ceph.com/en/latest/rbd/rbd-kubernetes/
https://www.hikunpeng.com/document/detail/zh/kunpengcpfs/ecosystemEnable/Kubernetes/kunpengk8sceph_04_0008.html