03-Kubernetes使用Ceph作为Pod存储

PV与PVC概述

03-Kubernetes使用Ceph作为Pod存储

PersistentVolume(PV):持久卷,对外部存储资源创建和使用的抽象,使得存储作为集群中的资源管理;PV又分为静态供给和动态供给,由于静态供给需要提前创建一堆PV,维护成本较高,所以企业一般使用动态供给。

PersistentVolumeClaim(PVC):持久卷申请,让用户不需要关心具体的Volume实现细节,只需要定义PVC需要多少磁盘容量即可。

ceph-csi供给程序

03-Kubernetes使用Ceph作为Pod存储

ceph-csi是ceph官方维护的PV供给程序,专门用于在Kubernetes中使用RBD、CephFS为Pod提供存储。

项目地址:https://github.com/ceph/ceph-csi

Pod使用RBD块存储

使用rbd

关于部署,RBD YAML文件在deploy/rbd/kubernetes目录,YAML改动如下:

  • 全部统一命名空间到ceph-csi
  • 将镜像转存到国内docker hub
  • 增加secret.yaml(userKey需要根据自己的ceph集群修改)和storageclass.yaml文件
  • 将csi-rbdplugin-provisioner.yaml 和csi-rbdplugin.yaml 中关于kms配置注释

改动后的安装包:

在使用中,还需要根据自己集群环境修改:

  • csi-config-map.yaml 修改连接ceph集群信息
  • secret.yaml 修改秘钥
  • storageclass.yaml 修改集群ID和存储池

操作过程:

这里我们参照k8s搭建(kubeadm方式)准备了一个kubeadm部署的小集群

192.168.1.10 k8s-master
192.168.1.11 k8s-node1
192.168.1.12 k8s-node2
# 创建名称空间
kubectl create ns ceph-csi

# k8s集群所有节点需要安装ceph-common
yum -y install ceph-common

kubectl taint node k8s-master node-role.kubernetes.io/master:NoSchedule-

wget https://www.ljh.cool/wp-content/uploads/2024/02/ceph-csi.zip
unzip ceph-csi.zip

vim secret.yaml

03-Kubernetes使用Ceph作为Pod存储

vim csi-config-map.yaml

03-Kubernetes使用Ceph作为Pod存储

vim storageclass.yaml

03-Kubernetes使用Ceph作为Pod存储
上图其他参数:
csi.storage.k8s.io/fstype: ext4 # 块设备默认格式化为ext4
reclaimPolicy: Delete # PV回收策略默认为删除
allowVolumeExpansion: true # PV是否支持扩容
kubectl apply -f rbd/*
03-Kubernetes使用Ceph作为Pod存储

测试

因为StorageClass已经在yaml中创建好了,下面尝试调用PV

03-Kubernetes使用Ceph作为Pod存储

vim rbd-pod-test.yaml

apiVersion: v1
kind: Pod
metadata:
  name: ceph-rbd-test
spec:
  containers:
  - name: nginx
    image: nginx:latest
    volumeMounts:
      - name: www
        mountPath: /usr/share/nginx/html
  volumes:
  - name: www
    persistentVolumeClaim:
      claimName: ceph-rbd-test
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ceph-rbd-test
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: csi-rbd-sc
  resources:
    requests:
      storage: 10Gi

动态生成了一个块设备,是由csi调用ceph集群创建的rbd设备

03-Kubernetes使用Ceph作为Pod存储

查看pod挂载情况

03-Kubernetes使用Ceph作为Pod存储

支持动态编辑扩容pvc

kubectl edit pvc ceph-rbd-test

03-Kubernetes使用Ceph作为Pod存储

延迟大概1-2分钟,会修改容量

03-Kubernetes使用Ceph作为Pod存储

再次查看ceph端,扩容到15G

03-Kubernetes使用Ceph作为Pod存储

Pod使用CephFS文件存储

关于部署,RBD YAML文件在deploy/cephfs/kubernetes目录,课件中YAML改动如下:

  • 全部统一命名空间到ceph-csi-cephfs
  • 将镜像转存到docker hub
  • 增加secret.yaml和storageclass.yaml文件
  • 将csi-cephfsplugin-provisioner.yaml 和csi-rbdplugin.yaml 中关于kms配置注释

在使用中,还需要根据自己集群环境修改:

  • csi-config-map.yaml 修改连接ceph集群信息
  • secret.yaml 修改秘钥
  • storageclass.yaml 修改集群ID和文件系统名称

项目在cephfs目录下

操作过程:

kubectl create ns ceph-csi-cephfs
vim csi-config-map.yaml
03-Kubernetes使用Ceph作为Pod存储
# 修改secret.yaml
vim secret.yaml
...
adminKey: AQDiOMBlXY55LxAAJIm5B3+bzmKGhIibWi8nyQ==
...

# 修改storageclass.yaml,除了ClusterID和pool修改,还需要修改fsName
vim storageclass.yaml
03-Kubernetes使用Ceph作为Pod存储

尝试多个pod利用cephfs挂载同一个目录cephfs-deployment-test.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cephfs-pod-test
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
          - name: www
            mountPath: /usr/share/nginx/html
      volumes:
      - name: www
        persistentVolumeClaim:
          claimName: ceph-cephfs-test
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ceph-cephfs-test
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: csi-cephfs-sc
  resources:
    requests:
      storage: 2Gi
kubectl create -f .
kubectl get pod -n ceph-csi-cephfs
03-Kubernetes使用Ceph作为Pod存储

pv已经动态创建

03-Kubernetes使用Ceph作为Pod存储

验证容器是否可以共享目录

03-Kubernetes使用Ceph作为Pod存储

如果fs挂载到其他服务器上,可以看到这个过程:

03-Kubernetes使用Ceph作为Pod存储

通过k8s创建了volume目录csi,在这个目录下面可以找到我们创建的index.html

总结:

03-Kubernetes使用Ceph作为Pod存储

发布者:LJH,转发请注明出处:https://www.ljh.cool/40633.html

(0)
上一篇 2024年2月3日 下午11:50
下一篇 2024年2月6日 下午4:35

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注