k8s挂载使用ceph集群

    我们都知道ceph集群是一个开源的分布式存储系统,支持对象存储,块存储,文件系统。本篇文章就是要讲解下k8s下如何挂载使用ceph的块存储系统。

示意图

一:ceph集群创建存储池及存储镜像

#在ceph机器中创建名字为lilh-rbd-pool 的存储池

ceph osd pool create lilh-rbd-pool 9 9


#创建完成后查看ceph机器存储池信息

ceph osd pool ls


#启用快存储

ceph osd pool application enable lilh-rbd-pool rbd


#对块存储进行初始化

rbd pool init -p lilh-rbd-pool

#创建一个固定大小的块存储镜像

rbd create lilh-img-img1 --size 1G --pool lilh-rbd-pool --image-format 2 --image-feature layering

#查看创建的磁盘镜像信息

rbd ls --pool lilh-rbd-pool
rbd --image lilh-img-img1 --pool lilh-rbd-pool info


二:在k8s机器服务器上安装ceph-common

##在k8s机器上配置yum源

#各节点的base源和epel源都改为阿里云镜像源此处不做介绍
参考地址:https://developer.aliyun.com/mirror/


#在各节点配置ceph.repo文件
vim /etc/yum.repos.d/ceph.repo
 
[ceph]
name=ceph
baseurl=https://mirrors.aliyun.com/ceph/rpm-octopus/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=cephnoarch
baseurl=https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/
gpgcheck=0


##在各节点安装ceph-common
yum install ceph-common

三:存储镜像授权及k8s上配置ceph权限

#存储镜像创建管理用户

ceph auth get-or-create client.lilh mon 'allow r' osd 'allow * pool=lilh-rbd-pool'



#创建完成会出现用户信息及key信息查看用户信息可以执行

ceph auth get client.llh



#导出用户信息到指定keyring文件

ceph auth get client.lilh -o ceph.client.lilh.keyring


#导出认证文件到k8s集群各节点 /etc/ceph/ 路径下

四:k8s基于keyring配置挂载ceph块存储

#在k8s机器查看ceph集群信息,可以查看书面证书有效

ceph --user lilh -s

#创建挂载ceph的pod

kind: Pod
apiVersion: v1
metadata:
  name: busybox-ceph-lilh
  namespace: default
spec:
  containers:
  - image: busybox:1.28
    command:
      - sleep
      - "3600"
    imagePullPolicy: Always
    name: busybox-ceph
    volumeMounts:
    - name: rbd-data  #此处要和下面volumes.name的名字一样
      mountPath: /data #ceph块存储挂载在pod里路径
  volumes:
    - name: rbd-data  
      rbd:
        monitors: #ceph集群mon节点
        - '10.19.14.23:6789'
        - '10.19.14.25:6789'
        - '10.19.14.27:6789'
        pool: lilh-rbd-pool   #ceph集群存储池
        image: lilh-img-img1  #ceph集群存储镜像
        fsType: ext4 #磁盘类型
        readOnly: false
        user: lilh #此处为ceph集群创建的使用用户
        keyring: /etc/ceph/ceph.client.lilh.keyring #此处为ceph的证书信息

五:创建POD及挂载CEPH块存储

#创建pod
kubectl apply -f case1-busybox-keyring.yam

#查看pod信息
kubectl get pod -o wide

#查看pod详细信息
kubectl describe pod busybox-ceph-lilh

 输出的Volumes信息 

 pod创建events详细信息

 登录pod验证

六:k8s基于Secret配置挂载ceph块存储

#对用户key进行base64加密

[root@k8smaster ceph]# cat ceph.client.lilh.keyring
[client.lilh]
	key = AQAXHopiUd/REhAA4dlk880dtG0R4wmtEqX9Nw==
	caps mon = "allow r"
	caps osd = "allow * pool=lilh-rbd-pool"
[root@k8smaster ceph]# echo AQAXHopiUd/REhAA4dlk880dtG0R4wmtEqX9Nw== | base64
QVFBWEhvcGlVZC9SRWhBQTRkbGs4ODBkdEcwUjR3bXRFcVg5Tnc9PQo=


#创建secret.yaml文件

apiVersion: v1
kind: Secret
metadata:
  name: ceph-secret-lilh
type: "kubernetes.io/rbd"
data:
  key: QVFBWEhvcGlVZC9SRWhBQTRkbGs4ODBkdEcwUjR3bXRFcVg5Tnc9PQo=


#创建secret

kubectl apply -f secret.yaml


#查看secret

kubectl get secret


#创建含有secret资源的pod 
vim busybox-secret.yaml

apiVersion: v1
kind: Pod
metadata:
  name: busybox-ceph-secret-lilh
  namespace: default
spec:
  containers:
  - image: busybox:1.28
    command:
      - sleep
      - "3600"
    imagePullPolicy: Always
    name: busybox-ceph-secret
    volumeMounts:
    - name: rbd-data
      mountPath: /data
  volumes:
    - name: rbd-data
      rbd:
        monitors:
        - '10.19.14.23:6789'
        - '10.19.14.25:6789'
        - '10.19.14.27:6789'
        pool: lilh-rbd-pool
        image: lilh-img-img1
        fsType: ext4
        readOnly: false
        user: lilh
        secretRef:
          name: ceph-secret-lilh  #为上面Secret.metadata.name


#创建pod
kubectl apply -f busybox-secret.yaml

 登录pod验证

八:自动创建并挂载

    如果集群是用kubeadm安装,因为默认以docker 运行的kube-controller-manager容器内没有ceph命令。

   要想实现k8s挂载ceph,需要用ceph-csi

   参考文档:Kubernetes 使用 ceph-csi 消费 RBD 作为持久化存储 - SegmentFault 思否

    k8smaster 在ceph创建pv ----> 在k8s上创建pvc关联pv ---->  pod挂载pvc到pod本地

#安装ceph-csi-3.4.0版本

1)k8s创建ceph的configmap资源
#修改csi-config-map.yaml

apiVersion: v1
kind: ConfigMap
data:
  config.json: |-
    [{
        "clusterID": "931b9ae6-7767-49d9-a775-0d2760ee2530", #ceph机器ID
        "monitors": [
          "10.19.14.27:6789",  #ceph机器的mon节点
          "10.19.14.23:6789"
        ]
      }]
metadata:
  name: ceph-csi-config


#部署 ConfigMap
kubectl apply -f csi-config-map.yaml


2)创建secret
vim secret-lilh.yaml


apiVersion: v1
kind: Secret
metadata:
  name: ceph-secret-lilh
  namespace: default
stringData:
  userID: lilh
  userKey: AQAXHopiUd/REhAA4dlk880dtG0R4wmtEqX9Nw==

#部署 Secret
kubectl apply -f secret-lilh.yaml


3)创建必须的 ServiceAccount 和 RBAC ClusterRole/ClusterRoleBinding 资源对象

kubectl create -f csi-provisioner-rbac.yaml
kubectl create -f csi-nodeplugin-rbac.yaml


4)创建 PodSecurityPolicy

kubectl create -f csi-provisioner-psp.yaml
kubectl create -f csi-nodeplugin-psp.yaml


5)部署CSI 资源
 
将csi-rbdplugin-provisioner.yaml和csi-rbdplugin.yaml中的 kms 部分配置注释掉

kubectl apply -f csi-rbdplugin-provisioner.yaml
kubectl apply -f csi-rbdplugin.yaml


6)创建 Storageclass

vim mysql-rbd-pvc-lilh.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: ceph-storage-class-lilh
provisioner: rbd.csi.ceph.com
parameters:
   clusterID: 931b9ae6-7767-49d9-a775-0d2760ee2530 #ceph集群ID
   pool: lilh-rbd-pool  #存储池名称
   imageFeatures: layering  #存储特性
   csi.storage.k8s.io/provisioner-secret-name: ceph-secret-lilh  #ceph集群secret信息
   csi.storage.k8s.io/provisioner-secret-namespace: default
   csi.storage.k8s.io/controller-expand-secret-name: ceph-secret-lilh
   csi.storage.k8s.io/controller-expand-secret-namespace: default
   csi.storage.k8s.io/node-stage-secret-name: ceph-secret-lilh
   csi.storage.k8s.io/node-stage-secret-namespace: default
   csi.storage.k8s.io/fstype: ext4
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
   - discard

部署storageclass
kubectl apply -f mysql-rbd-pvc-lilh.yaml


7)创建PVC
vim mysql-rbd-pvc-lilh.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-rbd-pvc-lilh
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Mi
  storageClassName: ceph-storage-class-lilh #此处名称要和storgeclass名称一样

部署PVC 
kubectl apply -f  mysql-rbd-pvc-lilh.yaml


验证

 

要在Kubernetes上部署Ceph集群,可以按照以下步骤进行操作: 1. 首先,通过修改configmap文件来补全配置,以便连接到Ceph集群资源文件。configmap文件中需要包含正确的镜像地址和其他必要的配置信息。 2. 接下来,需要准备好Ceph集群的配置文件。可以根据需要选择合适的配置文件,如生产存储集群配置(cluster.yaml),测试集群配置(cluster-test.yaml)或仅包含一个ceph-mon和一个ceph-mgr的最小配置(cluster-minimal.yaml)。可以根据实际需求进行配置文件的修改和替换。 3. 使用sed命令修改集群配置文件中的镜像地址、节点选择和设备选择等参数。例如,可以使用以下命令将镜像地址替换为指定的地址: ``` sed -i 's|ceph/ceph:v14.2.9|registry.cn-hangzhou.aliyuncs.com/vinc-auto/ceph:v14.2.8|g' cluster.yaml ``` 同样地,可以使用sed命令关闭所有节点和所有设备选择,并手动指定需要的节点和设备: ``` sed -i 's|useAllNodes: true|useAllNodes: false|g' cluster.yaml sed -i 's|useAllDevices: true|useAllDevices: false|g' cluster.yaml ``` 4. 最后,使用Kubernetes的部署机制来部署Ceph集群节点。可以使用相应的命令或配置文件来执行节点部署操作。根据实际需求,选择合适的部署方式和节点数量,并确保节点配置正确。 通过以上步骤,可以在Kubernetes上成功部署Ceph集群,并开始使用Ceph的块存储系统。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [K8s-ceph-csi-rbd连接资源](https://download.csdn.net/download/qq_37382917/85652308)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [k8s挂载使用ceph集群](https://blog.csdn.net/m0_64417032/article/details/124914570)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [k8s——kubernetes使用rook部署ceph集群](https://blog.csdn.net/vic_qxz/article/details/119513151)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值