中山顺德网站建设,网站建设开发外包公司,货架 网站建设 牛商网,上海vis设计参考文章#xff1a; https://blog.csdn.net/qq_41337034/article/details/117220475
一、 pv/pvc简述
Pv是指PersistentVolume#xff0c;中文含义是持久化存储卷是对底层的共享存储的一种抽象#xff0c;Pv由管理员进行配置和创建#xff0c;只要包含存储能力#xff…参考文章 https://blog.csdn.net/qq_41337034/article/details/117220475
一、 pv/pvc简述
Pv是指PersistentVolume中文含义是持久化存储卷是对底层的共享存储的一种抽象Pv由管理员进行配置和创建只要包含存储能力访问模式存储类型回收策略后端存储类型等主要信息。它和具体的底层存储技术实现有关比如NFSHostpath等Pvc是一种用户对存储的需求声明声明中包括了存储大小存储类型以及k8s中选择器的属性等另一个角度来看Pvc和Pod类型Pod是消耗节点node资源Pvc消耗的是Pv资源Pod可以请求CPU和内存而PVC可以请求特定的存储空间和访问模式。
二、 pv/pvc使用场景 存储工程师把存储系统上的总空间划分成一个个小的存储块 k8s集群的管理员将存储块和pv进行一一对应用户通过pvc对存储进行申请。比如可以指定具体大小容量的存储访问模式和存储类型用户这样不用关系底层存储实现的细节只需要直接申请使用pvc。
三、 创建并使用pv
PV支持多种不同类型的存储如NFS、hostpath、RBD、ISCSI文中将使用NFS为例介绍如何创建pv。 第一步搭建一个NFS共享服务器共享目录为/data/share 搭建nfs服务器参考https://blog.csdn.net/qq_50247813/article/details/127399198 把共享目录换成/data/share前提是目录已存在允许你所在的网段可以访问。 创建pv并添加NFS共享服务器地址和目录 # kubectl create -f pv.yaml
# cat pv.yaml apiVersion: v1
kind: PersistentVolume # 指定为PV类型
metadata: name: pv-share # 指定PV的名称labels: release: pv-share # 指定PV的标签
spec: capacity: storage: 1Gi # 指定PV的容量accessModes:- ReadWriteOnce # 指定PV的访问模式简写为RWO只支持挂载1一个Pod的读和写persistentVolumeReclaimPolicy: Delete # 指定PV回收的策略nfs: # 指定PV的存储类型本文是以nfs为例path: /data/share # 共享的地址server: 192.168.44.162 # 服务器地址note accessModes支持多种访问模式 1 ReadWriteOnceRWO读写权限但是只支持挂载在1个Node 2 ReadOnlyManyROX只读权限支持挂载在多个Node 3 ReadWriteManyRWX读写权限支持挂载在多个Node
persistentVolumeReclaimPolicy的策略指的是如果PVC被注释放掉后PV的处理这里说的释放指的是用户删除PVC后与PVC对应的PV会被释放掉PVC和PV是一一对应关系。
1 Retain默认PV的数据不会清理会保留volume如果需要清理需要手动进行 2 Recycle会将数据进行清理即rm -rf /thevolume/*只有NFS和HostPath支持清理完后PV会呈现available状态支持再次的绑定PVC 3 Delete删除存储资源会删除PV及PV后端的存储资源比如删除AWS EBS卷只有AWS EBS, GCE PD, Azure Disk 和 Cinder 支持 查看pv # kubectl get pvNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv-share 1Gi RWO Delete Available 6s观察可发现pv创建好了后状态为Available此时如果此pv刚好条件符合刚刚创建的pvc则会自动绑定。
四、 创建pvc
#kubectl create -f pvc.yaml
#cat pvc.yamlapiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pv-share
spec:resources:requests:storage: 1GivolumeMode: FilesystemaccessModes:- ReadWriteOnce 1 PVC声明了accessModes访问类型为ReadWriteOnce创建后系统会自动去找能够支持ReadWriteOnce访问类型的PV若无符合条件的PV则不会进行绑定 2 PVC声明了storage的大小为1Gi创建后系统会自动取找能够支持此容量的PV若无符合条件的PV则不会进行绑定。
从这里来看对于用户来说即只需要声明访问类型、容量、另外还可以通过StorageClass声明具体的PV类型即可完成对持久化存储的申请而不需要去维护和关注后端存储。
# kubectl get pvcNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pv-share Bound pv-share 1Gi RWO 15s我发现pvc创建好了的状态的就是Bound这是因为在创建并声明自己要什么样子的存储时。我们刚刚创建的pv刚好符合条件则自动绑定。状态更新此时pv的状态也应该发生了变更。
# kubectl get pvNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv-share 1Gi RWO Delete Bound default/pv-share 92m五、 pod使用pvc
# kubectl create -f nginx-pod.yaml
# cat nginx-pod.yamlapiVersion: v1
kind: Pod
metadata:name: nginx
spec:containers:- name: nginximage: nginxports:- containerPort: 80name: http-servervolumeMounts:- mountPath: /usr/share/nginx/htmlname: pv-storagevolumes:- name: pv-storagepersistentVolumeClaim:claimName: pv-share # 挂在的是 pvc查看pod详情省略部分输出
kubectl describe pod nginxVolumes:pv-storage:Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)ClaimName: pv-shareReadOnly: falsedefault-token-2jswl:Type: Secret (a volume populated by a Secret)SecretName: default-token-2jswlOptional: false
QoS Class: BestEffort
Node-Selectors: none
Tolerations: node.kubernetes.io/not-ready:NoExecute opExists for 300snode.kubernetes.io/unreachable:NoExecute opExists for 300s可以看出nginx pod已经绑定了pvc名称pv-share 的存储。
六、修改共享目录文件访问测试 nfs服务器的共享地址是 /data/share echo success index.html; chmod 777 index.html现在就可以进入到pod容器内部查看文件了
kubectl exec -it nginx -- cat /usr/share/nginx/html/index.html[rootk8s-master ~]# kubectl exec -it nginx -- cat /usr/share/nginx/html/index.html
success七、 创建一个service让集群外部可访问nginx
# kubectl expose pod nginx --port80 --target-port80 --typeNodePort
# kubectl get svc nginxNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.107.90.132 none 80:32637/TCP 4m29s