网站设计专业公司价格,小制作手工小学生,做问答营销的网站有哪些,品牌设计前景如何概念
PVC 的全称是#xff1a;PersistentVolumeClaim#xff08;持久化卷声明#xff09;#xff0c;PVC 是用户存储的一种声明#xff0c;PVC 和 Pod 比较类似#xff0c;Pod 消耗的是节点#xff0c;PVC 消耗的是 PV 资源#xff0c;Pod 可以请求 CPU 和内存#x…概念
PVC 的全称是PersistentVolumeClaim持久化卷声明PVC 是用户存储的一种声明PVC 和 Pod 比较类似Pod 消耗的是节点PVC 消耗的是 PV 资源Pod 可以请求 CPU 和内存而 PVC 可以请求特定的存储空间和访问模式。对于真正使用存储的用户不需要关心底层的存储实现细节只需要直接使用 PVC 即可。
准备工作
在使用 PVC 之前我们还得把其他节点上的 nfs 客户端给安装上比如我们这里
[rootk8master1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8master1.meng.com Ready control-plane 22d v1.28.1
k8node1.meng.com Ready none 22d v1.28.1
k8node2.meng.com Ready none 22d v1.28.1
k8node3.meng.com Ready none 22d v1.28.1需要在所有节点安装 nfs 客户端程序必须在所有节点都安装 nfs 客户端否则可能会导致 PV 挂载不上的问题。 安装命令如下
yum -y install nfs-utils rpcbind
systemctl start rpcbind.service
systemctl start nfs.service 在master节点创建一些文件夹更改属主
mkdir -p /nfs1/data/01 /nfs1/data/02 /nfs1/data/03
chown -R nfsnobody.nfsnobody /nfs1/ 将新建的文件夹共享
[rootk8master1 ~]# vim /etc/exports添加如下内容
/nfs1/data/01 192.168.8.0/24(rw,sync,root_squash,all_squash)
/nfs1/data/02 192.168.8.0/24(rw,sync,root_squash,all_squash)
/nfs1/data/03 192.168.8.0/24(rw,sync,root_squash,all_squash)从node节点尝试访问master节点共享的NFS文件夹所有的节点都需要测试一下
[rootk8node1 containerd]# showmount -e 192.168.8.81
Export list for 192.168.8.81:
/nfs1/data/03 192.168.8.0/24
/nfs1/data/02 192.168.8.0/24
/nfs1/data/01 192.168.8.0/24
[rootk8node1 containerd]# mount -t nfs 192.168.8.81:/nfs1/data/01 /mnt
[rootk8node1 /]# umount /mnt部署PV
创建了3个PV大小为10M1G3G
[rootk8master1 ~]# cat pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: pv01-10m
spec:capacity:storage: 10MaccessModes:- ReadWriteManystorageClassName: nfsnfs:path: /nfs1/data/01server: 192.168.8.81
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv02-1gi
spec:capacity:storage: 1GiaccessModes:- ReadWriteManystorageClassName: nfsnfs:path: /nfs1/data/02server: 192.168.8.81
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv03-3gi
spec:capacity:storage: 3GiaccessModes:- ReadWriteManystorageClassName: nfsnfs:path: /nfs1/data/03server: 192.168.8.81创建PV
[rootk8master1 ~]# kubectl apply -f pv.yaml查看PV状态
[rootk8master1 ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv01-10m 10M RWX Retain Available nfs 4s
pv02-1gi 1Gi RWX Retain Available nfs 4s
pv03-3gi 3Gi RWX Retain Available nfs 4s 创建PVC
[rootk8master1 ~]# cat pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: nginx-pvc
spec:accessModes:- ReadWriteManyresources:requests:storage: 200MistorageClassName: nfs运维YAML文件创建PVC
[rootk8master1 ~]# kubectl apply -f pvc.yaml查看PV已有一个PV处于绑定状态
[rootk8master1 ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv01-10m 10M RWX Retain Available nfs 42h
pv02-1gi 1Gi RWX Retain Bound default/nginx-pvc nfs 42h
pv03-3gi 3Gi RWX Retain Available nfs 42h发现这个pv02-1gi绑定了我们刚才的pvc为什么是这个因为我们申请的是200M01太小03太大k8s帮我们自动做了选择
创建Pod绑定PVC
[rootk8master1 ~]# cat pvc-deploy2.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx-deploy-pvcname: nginx-deploy-pvc
spec:replicas: 2selector:matchLabels:app: nginx-deploy-pvctemplate:metadata:labels:app: nginx-deploy-pvcspec:containers:- image: nginxname: nginxvolumeMounts:- name: htmlmountPath: /usr/share/nginx/htmlvolumes:- name: htmlpersistentVolumeClaim:claimName: nginx-pvc
---
apiVersion: v1
kind: Service
metadata:name: nginx-pvclabels:app: nginx-pvc
spec:type: NodePortports:- port: 80targetPort: web #容器端口或名字selector:app: nginx-pvc
[rootk8master1 ~]#执行文件创建pod创建deployment和service并暴露给node
[rootk8master1 ~]# kubectl apply -f pvc-deploy2.yaml我们进入到02里面新建个文件
[rootk8master1 ~]# cd /nfs1/data/02
[rootk8master1 ~]# echo 111 index.html交互访问docker可以看到新创建的index文件
[rootk8master1 02]# kubectl exec -it nginx-deploy-pvc-7c466b8668-cfpsg -- bash
rootnginx-deploy-pvc-7c466b8668-cfpsg:/# cd /usr/share/nginx/html/
rootnginx-deploy-pvc-7c466b8668-cfpsg:/usr/share/nginx/html# ls
index.html
rootnginx-deploy-pvc-7c466b8668-cfpsg:/usr/share/nginx/html#创建的pod可以curl一下看看是否可以访问如果不能访问可以参考K8S遇到的问题的文章。
[rootk8master1 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
demoapp-7c58cd6bb-7qlrd 1/1 Running 1 (16m ago) 22d 10.244.1.15 k8node1.meng.com none none
demoapp-7c58cd6bb-f84kp 1/1 Running 1 (4m50s ago) 22d 10.244.3.12 k8node3.meng.com none none
demoapp-7c58cd6bb-ldrzf 1/1 Running 1 (8m50s ago) 22d 10.244.2.13 k8node2.meng.com none none
mypod 1/1 Running 1 (8m50s ago) 21d 10.244.2.12 k8node2.meng.com none none
nginx-deploy-pvc-64b6b6bb47-csrnr 1/1 Running 1 (4m50s ago) 20m 10.244.3.11 k8node3.meng.com none none
nginx-deploy-pvc-64b6b6bb47-wcsbc 1/1 Running 1 (16m ago) 20m 10.244.1.16 k8node1.meng.com none none
[rootk8master1 ~]# curl 10.244.1.16
111
[rootk8master1 ~]#