PV与PVC概述
PersistentVolume(PV):持久卷,对外部存储资源创建和使用的抽象,使得存储作为集群中的资源管理;PV又分为静态供给和动态供给,由于静态供给需要提前创建一堆PV,维护成本较高,所以企业一般使用动态供给。
PersistentVolumeClaim(PVC):持久卷申请,让用户不需要关心具体的Volume实现细节,只需要定义PVC需要多少磁盘容量即可。
ceph-csi供给程序
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
vim csi-config-map.yaml
vim storageclass.yaml
上图其他参数:
csi.storage.k8s.io/fstype: ext4 # 块设备默认格式化为ext4
reclaimPolicy: Delete # PV回收策略默认为删除
allowVolumeExpansion: true # PV是否支持扩容
kubectl apply -f rbd/*
测试:
因为StorageClass已经在yaml中创建好了,下面尝试调用PV
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设备
查看pod挂载情况
支持动态编辑扩容pvc
kubectl edit pvc ceph-rbd-test
延迟大概1-2分钟,会修改容量
再次查看ceph端,扩容到15G
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
# 修改secret.yaml
vim secret.yaml
...
adminKey: AQDiOMBlXY55LxAAJIm5B3+bzmKGhIibWi8nyQ==
...
# 修改storageclass.yaml,除了ClusterID和pool修改,还需要修改fsName
vim storageclass.yaml
尝试多个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
pv已经动态创建
验证容器是否可以共享目录
如果fs挂载到其他服务器上,可以看到这个过程:
通过k8s创建了volume目录csi,在这个目录下面可以找到我们创建的index.html
总结:
发布者:LJH,转发请注明出处:https://www.ljh.cool/40633.html