Kubernetes---存储--Persistent Volume【PV】
⒈概念
1.PersistentVolume(PV)
apiVersion: v1 kind: PersistentVolume metadata: name:pve003 spec: capacity: storage: 5Gi volumeMode: Filesystem accessModes: - ReadNriteOnce persistentVolumeReclaimPolicy: Recycle storageClassName: slow mountOptions: - hard - nfsvers=4.1 nfs: path: /tmp server: 172.17.0.2
⒋pv的访问模式
PersistentVolume可以以资源提供者支持的任何方式挂载到主机上。如下表所示,供应商具有不同的功能,每个PV的访问模式都将被设置为该卷支持的特定模式。例如,NFS可以支持多个读/写客户端,但特定的NFSPV可能以只读方式导出到服务器上。每个PV都有一套自己的用来描述特定功能的访问模式
·ReadWriteOnce——该卷可以被单个节点以读/写模式挂载
·ReadOnlyMany——该卷可以被多个节点以只读模式挂载
·ReadWriteMany——该卷可以被多个节点以读/写模式挂载
在命令行中,访问模式缩写为:
·RWO-ReadWriteOnce
·ROX-ReadOnlyMany
·RWX-ReadWriteMany
<!-- 一个卷一次只能使用一种访问模式挂载,即使它支持很多访问模式。例如,GCEPersistentDisk可以由单个节点作为ReadWriteOnce模式挂载,或由多个节点以ReadOnlyMany模式挂载,但不能同时挂载 -->
⒌回收策略
·Retain(保留)——手动回收
·Recycle(回收)——基本擦除(rm-rf /thevolume/*)
·Delete(删除)——关联的存储资产(例如AWS EBS、GCE PD、Azure Disk 和OpenStack Cinder卷)将被删除
当前,只有NFS和HostPath 支持回收策略,Recycle已被废弃。AWS EBS、GCE PD、Azure Disk 和Cinder 卷支持删除策略
⒍pv状态
卷可以处于以下的某种状态:
·Available(可用)———块空闲资源还没有被任何声明绑定
·Bound(已绑定)——卷已经被声明绑定
·Released(已释放)——声明被删除,但是资源还未被集群重新声明
·Failed(失败)——该卷的自动回收失败
命令行会显示绑定到PV的PVC的名称
⒎实验-持久化演示说明-NFS
1.安装NFS服务器
yum install -y nfs-common nfs-utils rpcbind mkdir /nfsdata chmod 777 /nfsdata chown nfsnobody /nfsdata cat /etc/exports /nfsdata *(rw,no_root_squash,no_all_squash,sync)
systemctl start rpcbind systemctl start nfs
2.在其他节点上安装客户端
yum -y install nfs-utils rpcbind
mkdir /test
showmount -e 192.168.66.100
mount -t nfs 192.168.66.100:/nfsdata /test/
cd /test/
ls
umount /test/
3.部署PV
apiVersion: v1 kind: PersistentVolume metadata: name: nfspv1 spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: nfs nfs: path: /nfsdata server: 192.168.66.100
4.创建服务并使用PVC
apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: ports: - port: 80 name: web clusterIP: None selector: app: nginx --- apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: selector: matchLabels: app: nginx serviceName: "nginx" replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: k8s.gcr.io/nginx-slim:0.8 ports: - containerPort: 80 name: web volumeMounts: - name: www mountPath: /usr/share/nginx/html volumeClaimTemplates: - metadata: name: www spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "nfs" resources: requests: storage: 1Gi
⒏关于 Statefulset
Statefulset使用场景:
稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC 来实现。
稳定的网络标识符,即Pod 重新调度后其iPodName 和 HostName不变。
有序部署,有序扩展,基于init containers 来实现。
有序收缩。