之前我们有提到数据卷:emptydir ,是本地存储,pod重启,数据就不存在了,需要对数据持久化存储
对于数据持久化存储【pod重启,数据还存在】,有两种方式
nfs:网络存储【通过一台服务器来存储】
yum install -y nfs-utils
首先创建存放数据的目录
mkdir -p /data/nfs
设置挂载路径
# 打开文件
vim /etc/exports
# 添加如下内容
/data/nfs *(rw,no_root_squash)
执行完成后,即部署完我们的持久化服务器
然后需要在k8s集群node节点上安装nfs,这里需要在 node1 和 node2节点上安装
yum install -y nfs-utils
执行完成后,会自动帮我们挂载上
下面我们回到nfs服务端,启动我们的nfs服务
# 启动服务
systemctl start nfs
# 或者使用以下命令进行启动
service nfs-server start
最后我们在k8s集群上部署应用,使用nfs持久化存储
master节点操作
# 创建一个pv文件
mkdir pv
# 进入
cd pv
然后创建一个yaml文件 nfs-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-dep1
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: wwwroot
mountPath: /usr/share/nginx/html
ports:
- containerPort: 80
volumes:
- name: wwwroot
nfs:
server: 192.168.44.134 #nfs服务端ip
path: /data/nfs
通过这个方式,就挂载到了刚刚我们的nfs数据节点下的 /data/nfs 目录
最后就变成了: /usr/share/nginx/html -> 192.168.44.134/data/nfs 内容是对应的
我们通过这个 yaml文件,创建一个pod
kubectl apply -f nfs-nginx.yaml
创建完成后,我们也可以查看日志
kubectl describe pod nginx-dep1
可以看到,我们的pod已经成功创建出来了,同时下图也是出于Running状态
下面我们就可以进行测试了,比如现在nfs服务节点上添加数据,然后在看数据是否存在 pod中
# 进入pod中查看
kubectl exec -it nginx-dep1 bash
在nginx服务端挂载点写入文件
root@localhost ~]# cd /data/nfs/
[root@localhost nfs]# mkdir ldj
[root@localhost nfs]# cd ldj/
[root@localhost ldj]# vim jj
[root@localhost ldj]# cat jj
kkk
[root@localhost ldj]#
发现k8s 容器已经同步
root@nginx-dep1-765b7bb79b-fsbvm:/usr/share/nginx/html# ls -l
total 0
drwxr-xr-x 2 root root 16 Nov 7 07:09 ldj
root@nginx-dep1-765b7bb79b-fsbvm:/usr/share/nginx/html# cd ldj/
root@nginx-dep1-765b7bb79b-fsbvm:/usr/share/nginx/html/ldj# ll
bash: ll: command not found
root@nginx-dep1-765b7bb79b-fsbvm:/usr/share/nginx/html/ldj# cat jj
kkk
PV:持久化存储,对存储的资源进行抽象,对外提供可以调用的地方【生产者】
PVC:用于调用,不需要关心内部实现细节【消费者】
PV 和 PVC 使得 K8S 集群具备了存储的逻辑抽象能力。使得在配置Pod的逻辑里可以忽略对实际后台存储 技术的配置,而把这项配置的工作交给PV的配置者,即集群的管理者。存储的PV和PVC的这种关系,跟 计算的Node和Pod的关系是非常类似的;PV和Node是资源的提供者,根据集群的基础设施变化而变 化,由K8s集群管理员配置;而PVC和Pod是资源的使用者,根据业务服务的需求变化而变化,由K8s集 群的使用者即服务的管理员来配置。
举例
创建一个 pvc.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-dep1
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: wwwroot
mountPath: /usr/share/nginx/html
ports:
- containerPort: 80
volumes:
- name: wwwroot
persistentVolumeClaim:
claimName: my-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
第一部分是定义一个 deployment,做一个部署
然后定义pvc
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
nfs:
path: /k8s/nfs
server: 192.168.44.134
然后就可以创建pod了
kubectl apply -f pv.yaml
然后我们就可以通过下面命令,查看我们的 pv 和 pvc之间的绑定关系
kubectl get pv, pvc
到这里为止,我们就完成了我们 pv 和 pvc的绑定操作,通过之前的方式,进入pod中查看内容
kubect exec -it nginx-dep1 bash
然后查看 /usr/share/nginx.html
也同样能看到刚刚的内容,其实这种操作和之前我们的nfs是一样的,只是多了一层pvc绑定pv的操作
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_38304320/article/details/121191799
内容来源于网络,如有侵权,请联系作者删除!