企业网站制作建站公司,珠海网站设计培训班,软件开发工程师面试问题,青岛哪家网站建设好Kubernetes-存储概述
k8s的持久券简介
Kubernetes的持久卷#xff08;PersistentVolume, PV#xff09;和持久卷声明#xff08;PersistentVolumeClaim, PVC#xff09;为用户在Kubernetes中使用卷提供了抽象。PV是集群中的一块存储#xff0c;PVC是对这部分存储的请求。…Kubernetes-存储概述
k8s的持久券简介
Kubernetes的持久卷PersistentVolume, PV和持久卷声明PersistentVolumeClaim, PVC为用户在Kubernetes中使用卷提供了抽象。PV是集群中的一块存储PVC是对这部分存储的请求。
PV是集群中的一个资源就像节点或者pod一样。PVC是对PV资源的请求类似于Pod是对节点资源的请求。Pod可以请求特定的资源量PVC可以请求特定的存储大小和访问模式例如可以被多个节点并发访问或者仅被单个节点访问。
PV和PVC的关系类似于数据库中的表和视图PV是存储PVC是存储的视图。
解决方案
1、创建一个PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:name: pv0001
spec:capacity:storage: 5GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RecyclestorageClassName: slownfs:path: /data/k8s/pv0001server: 172.17.0.2 2、创建一个PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: myClaim
spec:accessModes:- ReadWriteOnceresources:requests:storage: 8Gi
在这个例子中PersistentVolumeClaim请求8Gi的存储空间Kubernetes将会找到一个符合条件的PersistentVolume并将其分配给这个PersistentVolumeClaim。
注意PersistentVolume的生命周期独立于PVC和使用它的PodPV的生命周期需要手动管理包括创建、绑定、使用、删除和回收。 相关文档 进一步了解创建持久卷进一步学习创建 PVC 申领阅读持久存储的设计文档 API 参考
阅读以下页面中描述的 API PersistentVolumePersistentVolumeClaim 资料来自官网介绍 持久卷 | Kubernetes 一、搭建NFS文件系统环境
1、环境准备
1.1、所有节点安装nfs-utils工具
#k8s集群上的所有机器都需要安装
yum install -y nfs-utils 2、主节点配置NFS
echo /opt/nfs/data/ *(insecure,rw,sync,no_root_squash) /etc/exports
cat /etc/exports
mkdir -p /opt/nfs/data/
systemctl enable rpcbind --now
systemctl enable nfs-server.service --now
#配置生效
exportfs -r 3、从节点上进程磁盘挂载数据写入测试 #检查远程机器哪些目录可以挂载
showmount -e 192.168.72.130#在本机创建挂载的节点
mkdir -p /opt/nfs/data#挂载主节点的/opt/nfs/data目录
mount -t nfs -o timeo30 192.168.72.130:/opt/nfs/data /opt/nfs/data#配置开机自动挂载
[rootnode2 ~]# vim /etc/rc.d/rc.local
#开机自动挂载
mount -t nfs -o timeo30 192.168.72.130:/opt/nfs/data /opt/nfs/data#在各个节点测试挂载共享盘是否能正常写入数据
[rootnode1 data]# echo test node1.txt
[rootnode2 data]# echo test node2.txt 二、原生方式数据挂载(不创建PV)
1、创建yaml配置绑定对应的共享盘目录 #先创建存放数据的共享目录
mkdir -p /opt/nfs/data/pv-nginx #/opt/nfs/data为nfs挂载的目录#创建Deployment项目
[rootmaster pv]# vim originalpv.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:run: pv-nginxname: pv-nginx
spec:replicas: 2selector:matchLabels:app: pv-nginxtemplate:metadata:labels:app: pv-nginxspec:containers:- image: nginxname: nginxvolumeMounts:- name: nginx-htmlmountPath: /usr/share/nginx/htmlvolumes:- name: nginx-htmlnfs:server: 192.168.72.130path: /opt/nfs/data/pv-nginx#运行
kubectl apply -f originalpv.yaml 2、在挂载盘上写入数据进行测试 2.1、查看数据是否已经同步到pod里 可以看到修改之后的数据已经同步到了pod中 以上为原生方式挂载存储这种方式挂载在容器删除时宿主机上共享盘里的数据不会被清除会残留大量的脏数据在大规模的集群中会有大量的容器运行或者被销毁如果采用这种方式进行挂载会造成大量磁盘空间被占不利于运维的维护工作。 三、卷挂载 能对容量进行限制可以分配指定的空间卷挂载之后容器销毁挂载的数据会自动被销毁。 PV持久卷 PVC持久卷申明 1、创建PV池 静态供应 #nfs挂载目录下创建3个pv空间目录
mkdir -p /opt/nfs/data/{pv01,pv02,pv03} 2、创建PV
如下创建了3个PV卷组 注意 创建的PV名称要小写 apiVersion: v1
kind: PersistentVolume
metadata:name: p01-50m
spec:capacity:storage: 50MaccessModes:- ReadWriteOncestorageClassName: nfsnfs:path: /opt/nfs/data/pv01server: 192.168.72.130---
apiVersion: v1
kind: PersistentVolume
metadata:name: p01-5gi
spec:capacity:storage: 5GiaccessModes:- ReadWriteOncestorageClassName: nfsnfs:path: /opt/nfs/data/pv02server: 192.168.72.130
---
apiVersion: v1
kind: PersistentVolume
metadata:name: p01-10gi
spec:capacity:storage: 10GiaccessModes:- ReadWriteOncestorageClassName: nfsnfs:path: /opt/nfs/data/pv03server: 192.168.72.130 3、PVC创建与绑定
3.1、分别创建3个PVC为10M2G8 apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nginx-pvc10mi
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10MistorageClassName: nfs---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nginx-pvc2gi
spec:accessModes:- ReadWriteOnceresources:requests:storage: 2GistorageClassName: nfs---apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nginx-pvc8gi
spec:accessModes:- ReadWriteOnceresources:requests:storage: 8GistorageClassName: nfs3.2、删除已经创建PVC #删除某个PVC
kubectl delete pvc nginx-pvc10mi 3.2.1、PV一直是Release状态处理步骤
PVC 只能和 Available 状态的 PV 进行绑定当PV处于Release状态时不能绑定
步骤一数据备份 #备份
cp -rp /opt/nfs/data/pv01/* /opt/k8s/backup/pv01 将数据备份或迁移出来然后修改 PV删除 claimRef 对 PVC 的引用这个时候 Kubernetes 的 PV 控制器 watch 到 PV 变化后就会将 PV 修改为 Available 状态Available 状态时PV可以被PVC绑定。 步骤二删除 claimRef 对 PVC 的引用 #修改
[rootmaster pv]# kubectl edit pv p01-50m#删除一下内容claimRef:apiVersion: v1kind: PersistentVolumeClaimname: nginx-pvc10minamespace: defaultresourceVersion: 451247uid: 48bc084b-49eb-4864-901a-e1b9da4b75c8 步骤三查看PV的状态是否正常 3.3、创建PVC时申请容量不能大于PV容量 四、创建Pod绑定PVC
1、一个完整的Pod数据同步到PV的创建过程
先创建PV再创建PVC帮忙该PV再创建Pod绑定该PVC #步骤一先创建一个名为p01-50mstorageClassName为nfs的PV
apiVersion: v1
kind: PersistentVolume
metadata:name: p01-50m
spec:capacity:storage: 50MaccessModes:- ReadWriteOncestorageClassName: nfsnfs:path: /opt/nfs/data/pv01server: 192.168.72.130---
#步骤二创建PVC名称为nginx-pvc10mi绑定storageClassName为nfs的PV
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nginx-pvc10mi
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10MistorageClassName: nfs---
#步骤三创建Pod引用上述创建的PVC:nginx-pvc10mi
apiVersion: apps/v1
kind: Deployment
metadata:labels:run: nginx-pvcname: nginx-pvc
spec:replicas: 2selector:matchLabels:app: nginx-pvctemplate:metadata:labels:app: nginx-pvcspec:containers:- image: nginxname: nginxvolumeMounts:- name: nginx-htmlmountPath: /usr/share/nginx/htmlvolumes:- name: nginx-htmlpersistentVolumeClaim:claimName: nginx-pvc10mi #绑定上述创建的nginx-pvc10mi2、分别在Pod和对应的PV中写入数据
2.1、在PV绑定的共享盘上写入数据在Pod里观察数据写入的情况 2.2、在Pod里写入数据在PV绑定的共享盘上观察写入数据同步的情况