banner
云野阁

云野阁

闲云野鹤,八方逍遥

k8s集群对接ceph集群部署指南

任务目标#

  1. 完成 k8s 集群对接 ceph 集群

任务平台#

  1. 物理设备 --
  2. 操作系统:openEuler 22.03 LTS SP2

部署指南#

采用动态挂载 ceph RBD 存储

任务一:安装 ceph 客户端(ceph-common)#

在 k8s 集群的每个节点安装 ceph-common

yum install ceph-common -y

任务二:同步 cpeh 集群配置文件#

将 ceph 集群的 /etc/ceph/{ceph.conf,ceph.client.admin.keyring} 文件同步到 k8s 所有节点上

#配置ssh免密
ssh-keygen -t rsa
ssh-copy-id 10.10.3.121
ssh-copy-id 10.10.3.122
ssh-copy-id 10.10.3.123
ssh-copy-id 10.10.3.124

#拷贝文件
scp -r /etc/ceph/{ceph.conf,ceph.client.admin.keyring} 10.10.3.121:/etc/ceph
scp -r /etc/ceph/{ceph.conf,ceph.client.admin.keyring} 10.10.3.122:/etc/ceph
scp -r /etc/ceph/{ceph.conf,ceph.client.admin.keyring} 10.10.3.123:/etc/ceph
scp -r /etc/ceph/{ceph.conf,ceph.client.admin.keyring} 10.10.3.124:/etc/ceph

任务三:部署 ceph-csi(使用 rbd)#

  1. 下载 ceph-csi 组件
#下载文件
wget https://github.com/ceph/ceph-csi/archive/refs/tags/v3.9.0.tar.gz
#解压
mv v3.9.0.tar.gz ceph-csi-v3.9.0.tar.gz
tar -xzf ceph-csi-v3.9.0.tar.gz
#进入目录
cd  ceph-csi-3.9.0/deploy/rbd/kubernetes
mkdir /data/cephfs/csi
#拷进csi中,共6六个文件
cp * /data/cephfs
  1. 拉取 csi 组件所需镜像
#查看所需镜像
grep image csi-rbdplugin-provisioner.yaml
grep image csi-rbdplugin.yaml

在所有 k8s 节点上拉取所需的镜像

./pull-images.sh registry.k8s.io/sig-storage/csi-provisioner:v3.5.0
./pull-images.sh registry.k8s.io/sig-storage/csi-resizer:v1.8.0
./pull-images.sh registry.k8s.io/sig-storage/csi-snapshotter:v6.2.2
docker pull quay.io/cephcsi/cephcsi:v3.9.0
./pull-images.sh registry.k8s.io/sig-storage/csi-attacher:v4.3.0
./pull-images.sh registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.8.0
  1. 创建命名空间cephfs
echo '
apiVersion: v1
kind: Namespace
metadata:
  labels:
    kubernetes.io/metadata.name: cephfs
  name: cephfs
  ' > ceph-namespace.yaml
  
 #执行
  kubectl apply -f ceph-namespace.yaml 
  1. 创建连接 ceph 集群的秘钥文件 csi-rbd-secret.yaml
echo '
apiVersion: v1
kind: Secret
metadata:
  name: csi-rbd-secret
  namespace: cephfs
stringData:
  adminID: admin  #管理员名称
  adminKey: AQCNNDZlPKI5KxAA/3gXnOmhHgyLU2qPzTaZ3A==   #ceph集群密钥
  userID: admin   #用户名称 
  userKey: AQCNNDZlPKI5KxAA/3gXnOmhHgyLU2qPzTaZ3A==  #ceph集群密钥
  ' > csi-rbd-secret.yaml
  
   #执行
    kubectl apply -f csi-rbd-secret.yaml
  1. 创建 ceph-config-map.yaml
echo '
apiVersion: v1
kind: ConfigMap
data:
  ceph.conf: |
     [global]
     fsid = 79fd2206-39ca-4ec4-9cd2-96e065c6361e     # 生成的FSID
     mon initial members =future-ceph-node0,future-ceph-node1,future-ceph-node2,future-ceph-node3            # 主机名
     mon host = 10.10.3.117,10.10.3.118,10.10.3.119,10.10.3.120                       # 对应的IP
     public network = 10.10.3.0/24
     auth cluster required = cephx
     auth service required = cephx
     auth client required = cephx
     osd journal size = 1024
     osd pool default size = 3
     osd pool default min size = 2
     osd pool default pg num = 333
     osd pool default pgp num = 333
     osd crush chooseleaf type = 1
     [mon]
     mon allow pool delete = true

     [mds.future-ceph-node0]
     host = future-ceph-node0
  keyring: |
metadata:
  name: ceph-config
  namespace: cephfs
' > ceph-config-map.yaml

 #执行
 kubectl apply -f ceph-config-map.yaml  
  1. 修改 csi-config-map.yaml,配置连接 ceph 集群的信息
echo '
apiVersion: v1
kind: ConfigMap
metadata:
  name: ceph-csi-config
  namespace: cephfs
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
data:
  config.json: |-
    [{"clusterID":"79fd2206-39ca-4ec4-9cd2-96e065c6361e","monitors":["10.10.3.117:6789","10.10.3.118:6789","10.10.3.119:6789","10.10.3.120:6789"]}]
' > csi-config-map.yaml
  1. 修改 csi 组件配置文件

    1. 拷贝进/data/cephfs/csi目录中的所有 yaml 文件中的命名空间由default改为cephfs
      cd /data/cephfs/csi
      sed -i "s/namespace: default/namespace: cephfs/g" $(grep -rl "namespace: default" ./)
      sed -i '/^kind: ServiceAccount/a\  namespace: cephfs' $(grep -rl "^kind: ServiceAccount" ./)
    

    csi-rbdplugin-provisioner.yamlcsi-rbdplugin.yaml 中的 kms 部分配置注释掉

    # - name: KMS_CONFIGMAP_NAME

    ​ # value: encryptionConfig

    #- name: ceph-csi-encryption-kms-config

    ​ # configMap:

    ​ # name: ceph-csi-encryption-kms-config

 #执行,安装csi组件
 kubectl apply -f csi-config-map.yaml
 kubectl apply -f csi-nodeplugin-rbac.yaml
 kubectl apply -f csidriver.yaml
 kubectl apply -f csi-provisioner-rbac.yaml
 kubectl apply -f csi-rbdplugin-provisioner.yaml
 kubectl apply -f csi-rbdplugin.yaml

任务四:创建 storageclass#

echo '
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    k8s.kuboard.cn/storageType: cephfs_provisioner
  name: csi-rbd-sc
provisioner: rbd.csi.ceph.com
parameters:
 # fsName: cephfs #ceph集群cephfs文件系统名称
  clusterID: 79fd2206-39ca-4ec4-9cd2-96e065c6361e #ceph集群的fsid 
  pool: rbd-k8s #ceph中创建的存储池
  imageFeatures: layering
  csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret
  csi.storage.k8s.io/provisioner-secret-namespace: cephfs
  csi.storage.k8s.io/controller-expand-secret-name: csi-rbd-secret
  csi.storage.k8s.io/controller-expand-secret-namespace: cephfs
  csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret
  csi.storage.k8s.io/node-stage-secret-namespace: cephfs
  csi.storage.k8s.io/fstype: xfs
reclaimPolicy: Delete
volumeBindingMode: Immediate
#allowVolumeExpansion: true
#mountOptions:
 # - discard
 ' > storageclass.yaml
 
 #执行
  kubectl apply -f storageclass.yaml

任务五:创建 PVC#

echo '
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rbd-pvc #PVC的名称
  namespace: cephfs
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi  #设置容量
  storageClassName: csi-rbd-sc
  ' > pvc.yaml
  
#执行
 kubectl apply -f pvc.yaml
#查看PVC是否创建成功
kubectl get pvc -n cephfs
#查看PV是否创建成功
kubectl get pv -n cephfs

#查看ceph集群中的cephfs_data存储池中是否创建了image
 rbd ls -p cephfs_data

任务六:创建 pod,进行测试验证#

echo '
apiVersion: v1
kind: Pod
metadata:
  name: csi-rbd-demo-pod
  namespace: cephfs
spec:
  containers:
    - name: web-server
      image: nginx:latest
      volumeMounts:
        - name: mypvc
          mountPath: /var/lib/www/html
  volumes:
    - name: mypvc
      persistentVolumeClaim:
        claimName: rbd-pvc  #对应的PVC名称
        readOnly: false
' > pod.yaml

#执行
 kubectl apply -f pod.yaml
 #进入容器查看挂载信息
 kubectl exec -it csi-rbd-demo-pod bash
 lsblk -l|grep rbd
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。