第十二章 自动绑定PV和PVC

简介: 第十二章 自动绑定PV和PVC

注意:上一节说完创建完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 解释:

  1. apiVersion: storage.k8s.io/v1
  2. kind: StorageClass: 定义资源类型,即StorageClass
  3. provisioner: kubernetes.io/aws-ebs:指定了用于提供存储的Provisioner
  4. parameters:
    type: gp2: 指定EBS的存储类型为gp2。AWS的gp2类型表示高性能的SSD存储。
  5. reclaimPolicy: Retain 当PersistentVolume被删除时,其对应的存储资源将被保留。删除PV不会释放存储资源。
  6. allowVolumeExpansion: true 允许已存在的PersistentVolumes进行扩展。如果超过了当前的容量,Kubernetes可以自动扩展它。
  7. mountOptions:
  • - debug: 挂载选项,在挂载时启用调试模式。
  1. 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可以进行扩展。
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
关系型数据库 MySQL 数据库
使用 StatefulSet 部署主从同步的 MySQL 集群
使用 StatefulSet 部署主从同步的 MySQL 集群
295 1
|
物联网 Go 网络性能优化
使用Go语言(Golang)可以实现MQTT协议的点对点(P2P)消息发送。MQTT协议本身支持多种消息收发模式
使用Go语言(Golang)可以实现MQTT协议的点对点(P2P)消息发送。MQTT协议本身支持多种消息收发模式【1月更文挑战第21天】【1月更文挑战第104篇】
853 1
|
Kubernetes API 调度
在K8S中,创建pod过程?
在K8S中,创建pod过程?
|
9月前
|
Java API Maven
SpringBootWeb篇-入门了解Swagger的具体使用
通过上述步骤,您可以在 Spring Boot 项目中快速集成和使用 Swagger。Swagger 提供了简洁的配置和强大的功能,使得 API 文档的生成和测试变得非常方便。通过 Swagger 的注解,开发者可以清晰地描述 API 的功能,提高文档的可读性和可维护性。通过访问 Swagger UI,您可以直观地查看和测试 API,极大地提升开发效率。
640 7
|
存储 Kubernetes Perl
pv和pvc的区别、关系,如何设置使用的步骤
PV(Persistent Volume)和 PVC(Persistent Volume Claim)是 Kubernetes 中用于管理持久化存储的两个关键概念。 PV 是集群中的一个持久化存储资源,它是由集群管理员预先创建和配置的。PV 可以是物理存储设备、存储阵列、网络存储等。PV 有自己的生命周期,并且可以被多个 Pod 共享。 PVC 是 Pod 对 PV 的请求,它用于声明 Pod 对存储的需求。PVC 描述了 Pod 所需的存储容量、访问模式等属性。当创建 PVC 时,Kubernetes 会尝试将其与可用的 PV 进行匹配和绑定。一旦 PVC 成功绑定到 PV,Pod 就可
1423 0
|
NoSQL 网络安全 Redis
redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.
当使用Python连接Redis遇到&quot;ConnectionError: Error 111&quot;时,可能的原因包括Redis未启动、非默认端口监听、防火墙阻拦、配置错误或Redis模块安装不正确。解决方法包括启动Redis、检查端口与防火墙设置、修正配置文件、确保模块正确安装及测试服务器功能。提供了一个Python连接Redis的示例代码,根据实际情况调整IP和端口,以诊断连接问题。
881 0
|
Kubernetes 关系型数据库 MySQL
k8s安装并迁移jumpserver
k8s安装并迁移jumpserver
|
存储 Kubernetes 调度
在k8S中,PV和PVC如何使用?
在k8S中,PV和PVC如何使用?
|
Kubernetes 关系型数据库 MySQL
MySQL在Kubernetes上的高可用实现
【5月更文挑战第1天】
1060 5
|
SQL 关系型数据库 MySQL
MySQL服务的状态如何查看?
【5月更文挑战第23天】MySQL服务的状态如何查看?
4037 1