k8s-存储pv和pvc-7

网友投稿 545 2022-05-29

k8s-存储pv和pvc-7

1.概述

PersistentVolume(一些简称PV):由管理员添加的的一个存储的描述,是一个全局资源,包含存储的类型,存储的大小和访问模式等。它的生命周期独立于Pod,例如当使用它的Pod销毁时对PV没有影响。

PersistentVolumeClaim(一些简称PVC):是Namespace里的资源,描述对PV的一个请求。请求信息包含存储大小,访问模式等。

2.创建nfs存储

pv存储数据类型有很多种,这类选择了nfs存储。所以我们先安装nfs服务。

NFS 服务需要依赖 RPC 服务,所以这里 NFS 服务端需要安装 rpcbind 和 nfs-utils,客户端只需要安装 nfs-utils

# 服务端安装,提供nfs存储的节点为服务端,例如master节点 yum install -y nfs-utils rpcbind #客户端安装,访问nfs服务存储节点为客户端,例如node节点 yum install -y nfs-utils

1

2

3

4

k8s-存储pv和pvc-7

我们在服务端创建一个共享目录 /data/share ,作为客户端挂载的远端入口,然后设置权限。

mkdir -p /data/share chmod 777 /data/share

1

2

然后,修改 NFS 配置文件 /etc/exports

vim /etc/exports # 配置内容 /data/share 172.16.8.0/24(rw,sync,insecure,no_subtree_check,no_root_squash)

1

2

3

配置文件内容说明

此处,我配置了将 /data/share 文件目录设置为允许 IP 为该 172.16.8.0/24 区间的客户端挂载,(注意这个IP地址范围要改成你当前nfs服务所在主机的ip地址)当然,如果客户端 IP 不在该区间也想要挂载的话,可以设置 IP 区间更大或者设置为 * 即允许所有客户端挂载,例如:/home *(ro,sync,insecure,no_root_squash) 设置 /home 目录允许所有客户端只读挂载。

重启nfs服务

systemctl restart rpcbind systemctl restart nfs

1

2

测试nfs

在另一个node节点测试是否可以正常挂在nfs服务

#注意这个IP地址不是随便写的,他是上面部署nfs服务节点的IP地址 showmount -e 172.16.8.111

1

2

3.创建pv

#在nfs共享目录下创建一个目录存放pv配置 cd /data/share/ mkdir volume # 创建pv配置文件 vim t1_pv.yaml

1

2

3

4

5

pv配置文件说明

apiVersion: v1 #资源版本 kind: PersistentVolume #资源类型是pv metadata: name: test #pv资源名称 labels: type: test #资源标签 spec: capacity: storage: 10Gi # pv 提供最大的存储 accessModes: - ReadWriteMany # pv访问模式,允许多人同时读写 persistentVolumeReclaimPolicy: Recycle #pvc回收策略,允许回收 nfs: #pv 存储类型是nfs path: "/data/share" # nfs数据存储路径 server: 10.0.0.11 #nfs服务地址 readOnly: false # nfs 挂在是否只读,否

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

kubectl create -f t1_pv.yaml

1

查看pv状态

kubectl get pv

1

4.创建pvc

vim t1_pvc.yaml

1

apiVersion: v1 kind: PersistentVolumeClaim #资源类型是pvc metadata: name: nfs #pvc名称 spec: accessModes: - ReadWriteMany #pvc访问模式:多人同时访问 resources: requests: #pvc需求资源 storage: 1Gi # pvc需要1G存储空间

1

2

3

4

5

6

7

8

9

10

# 启动pvc kubectl create -f t1_pvc.yaml

1

2

查看pvc状态

kubectl get pvc

1

pvc绑定到名称test的pv上

5.持久化存储应用到项目

前面我们创建了pv和pvc,他们的作用就是用来做持久化存储。例如一个部署到k8s的项目,分别有一个tomcat业务pod和mysql数据库pod,当mysql的pod重启后,存储在mysql中的数据也随着pod的销毁而消失,这个时候我们需要将mysql中的数据持久化存储,不受pod创建和销毁影响。

# 编辑mysql rc文件,添加pvc vim mysql-rc-pvc.yml

1

2

文件配置说明

apiVersion: v1 kind: ReplicationController metadata: name: mysql spec: replicas: 1 selector: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: 10.0.0.11:5000/mysql:5.7 ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD value: '123456' volumeMounts: #挂载一个目录 - name: data # 定义目录的名称 mountPath: /var/lib/mysql #目录的路径 volumes: #使用挂载的目录 - name: data #这个名称必须和上面volumeMounts名称一致 persistentVolumeClaim: #pvc配置 claimName: nfs # pvc的名称是我们创建好的pvc名称

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

kubectl create -f mysql-rc-pvc.yaml

1

启动pod后,查看nfs的共享目录下已经有mysql的数据。

MySQL

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Hyper-V性能加速之NUMA
下一篇:【愚公系列】2021年12月 二十三种设计模式(十一)-享元模式
相关文章