注意:上一节说完创建完MYSQL不能运行后来需要创建pv.yaml才运行起来MYSQL。
这一节就是要解决这个问题使用官网的 storage 自动绑定我们就在也不用手动创建了。
#回收策略
1.StorageClass资源的配置
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: standard provisioner: kubernetes.io/aws-ebs parameters: type: gp2 reclaimPolicy: Retain allowVolumeExpansion: true mountOptions: - debug volumeBindingMode: Immediate #回收策略 ### 目前的回收策略有: ### Retain -- 手动回收 ### Recycle -- 需要擦除后才能再次使用 ### Delete -- 当用户删除对应的 PersistentVolumeClaim 时,动态配置的 volume 将被自动删除。 #一个Volume卷发生的状态: ### Available:空闲的资源,未绑定给PVC ### Bound:成功绑定PVC ### Released:PVC已经被删除,但PV还没有被集群回收 ### Failed:PV回收失败
storage.yaml 解释:
apiVersion: storage.k8s.io/v1
kind: StorageClass
: 定义资源类型,即StorageClass。provisioner: kubernetes.io/aws-ebs
:指定了用于提供存储的Provisionerparameters
:type: gp2
: 指定EBS的存储类型为gp2。AWS的gp2类型表示高性能的SSD存储。reclaimPolicy: Retain
当PersistentVolume被删除时,其对应的存储资源将被保留。删除PV不会释放存储资源。allowVolumeExpansion: true
允许已存在的PersistentVolumes进行扩展。如果超过了当前的容量,Kubernetes可以自动扩展它。mountOptions
:
- debug
: 挂载选项,在挂载时启用调试模式。
volumeBindingMode: Immediate
定义PV请求如何绑定到可用的存储。Immediate 一旦存储被请求,它就会自动绑定。
2.使用Helm 把 nfs-client-provisioner 拉取到本地我们进行查看
# 命令格式 helm search repo <应用名> # 仓库中搜索应用 [root@master01 nfs]# helm search repo nfs-client-provisioner NAME CHART VERSION APP VERSION DESCRIPTION stable/nfs-client-provisioner 1.2.11 3.1.0 DEPRECATED - nfs-client is an automatic provisi..
3.拉取到本地
# 拉取 [root@master01 hpro]# helm pull stable/nfs-client-provisioner [root@master01 hpro]# ls mychart nfs-client-provisioner-1.2.11.tgz pv.yaml # 解压 [root@master01 hpro]# tar -zvxf nfs-client-provisioner-1.2.11.tgz nfs-client-provisioner/Chart.yaml nfs-client-provisioner/values.yaml nfs-client-provisioner/templates/_helpers.tpl nfs-client-provisioner/templates/clusterrole.yaml nfs-client-provisioner/templates/clusterrolebinding.yaml nfs-client-provisioner/templates/deployment.yaml nfs-client-provisioner/templates/persistentvolume.yaml nfs-client-provisioner/templates/persistentvolumeclaim.yaml nfs-client-provisioner/templates/podsecuritypolicy.yaml nfs-client-provisioner/templates/role.yaml nfs-client-provisioner/templates/rolebinding.yaml nfs-client-provisioner/templates/serviceaccount.yaml nfs-client-provisioner/templates/storageclass.yaml nfs-client-provisioner/.helmignore nfs-client-provisioner/README.md nfs-client-provisioner/ci/test-values.yaml # 可以看到解压包 [root@master01 hpro]# ls mychart nfs-client-provisioner nfs-client-provisioner-1.2.11.tgz pv.yaml
4.编辑 nfs-client-provisioner 中的 values.yaml
#### 只编辑这些 nfs: server: 192.168.1.19 ##### nfs-server地址 path: /mnt/nfs ##### nfs配置的共享目录 mountOptions: # Set a StorageClass name # Ignored if storageClass.create is false # 名字修改成自己的 name: nfs-client
5.使用k8s命令创建一个命名空间
# 创建命名空间 [root@master01 nfs-client-provisioner]# kubectl create ns nfs-pro namespace/nfs-pro created # 查看命名空间 [root@master01 nfs-client-provisioner]# kubectl get ns NAME STATUS AGE default Active 30d kube-node-lease Active 30d kube-public Active 30d kube-system Active 30d nfs-pro Active 59s
6.使用Helm 命令启动nfs-client-provisioner
# 命令 -n nfs-pro 表示安装的命名空间 [root@master01 hpro]# helm install nfs-provisioner ./nfs-client-provisioner -n nfs-pro WARNING: This chart is deprecated NAME: nfs-provisioner LAST DEPLOYED: Tue Jan 16 06:23:15 2024 NAMESPACE: nfs-pro STATUS: deployed REVISION: 1 TEST SUITE: None [root@master01 hpro]# # 查看nfs-pro命名空间下已经Running [root@master01 hpro]# kubectl get pod -n nfs-pro NAME READY STATUS RESTARTS AGE nfs-provisioner-nfs-client-provisioner-d9b94b899-wh6r5 1/1 Running 0 21s # 使用Helm查看也已经 deployed 状态了 [root@master01 hpro]# helm list -n nfs-pro NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION nfs-provisioner nfs-pro 1 2024-01-16 06:23:15.499168458 -0800 PST deployed nfs-client-provisioner-1.2.11 3.1.0
7.使用 k8s 查看StorageClass
# sc 是 StorageClass 缩写 kubectl get sc
[root@master01 hpro]# kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE nfs-client cluster.local/nfs-provisioner-nfs-client-provisioner Delete Immediate true 3m44s
存储属性包括:
ReclaimPolicy
:删除。当PersistentVolume被删除时,其存储资源会被释放。VolumeBindingMode
:立即(Immediate)。一旦存储被请求,就会被绑定。AllowVolumeExpansion
:true。已存在的PersistentVolumes可以进行扩展。