k8s-存储pv和pvc-7
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
2.1.安装nfs存储
# 服务端安装,提供nfs存储的节点为服务端,例如master节点
yum install -y nfs-utils rpcbind
#客户端安装,访问nfs服务存储节点为客户端,例如node节点
yum install -y nfs-utils
- 1
- 2
- 3
- 4
2.2.配置nfs
- 我们在服务端创建一个共享目录 /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
3.1.创建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
3.2.启动pv
kubectl create -f t1_pv.yaml
- 1
- 查看pv状态
kubectl get pv
- 1
4.创建pvc
4.1.创建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
4.2.启动pvc
# 启动pvc
kubectl create -f t1_pvc.yaml
- 1
- 2
- 查看pvc状态
kubectl get pvc
- 1
pvc绑定到名称test的pv上
5.持久化存储应用到项目
5.1.持久化存储概述
前面我们创建了pv和pvc,他们的作用就是用来做持久化存储。例如一个部署到k8s的项目,分别有一个tomcat业务pod和mysql数据库pod,当mysql的pod重启后,存储在mysql中的数据也随着pod的销毁而消失,这个时候我们需要将mysql中的数据持久化存储,不受pod创建和销毁影响。
5.2.mysql持久化存储配置
# 编辑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
5.3.启动mysql-rc-pvc
kubectl create -f mysql-rc-pvc.yaml
- 1
启动pod后,查看nfs的共享目录下已经有mysql的数据。
文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。
原文链接:brucelong.blog.csdn.net/article/details/109509214
- 点赞
- 收藏
- 关注作者
评论(0)