涉及文档
每个 PV 可以属于某个类(Class),通过将其 storageClassName 属性设置为某个 StorageClass 的名称来指定。 特定类的 PV 卷只能绑定到请求该类存储卷的 PVC 申领。
未设置 storageClassName 的 PV 卷没有类设定,只能绑定到那些没有指定特定 存储类的 PVC 申领。
早前,Kubernetes 使用注解 volume.beta.kubernetes.io/storage-class 而不是 storageClassName 属性。这一注解目前仍然起作用,不过在将来的 Kubernetes 发布版本中该注解会被彻底废弃
vim storageClassName-pv-pvc.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv01
labels:
name: pv01
spec:
nfs: #定义存储类型为nfs
path: /root/kubernetes/pv_pvc/volumes/v1 #nfs共享路径
server: 192.168.11.128 #nfs共享服务service
accessModes: #访问模式
#- ReadWriteOnce #该卷可以通过单个节点以读写方式安装
#- ReadOnlyMany #该卷可以被许多节点只读安装
- ReadWriteMany #该卷可以被许多节点读写安装
#storageClassName: "pv01" #设置存储类特定的名称,如此PVC 只能匹配到对应相同的名称
capacity:
storage: 2Gi #存储大小
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv02
labels:
name: pv02
spec:
nfs: #定义存储类型为nfs
path: /root/kubernetes/pv_pvc/volumes/v2 #nfs共享路径
server: 192.168.11.128 #nfs共享服务service
accessModes: #访问模式
- ReadWriteMany #该卷可以通过单个节点以读写方式安装
#storageClassName: "pv02" #设置存储类特定的名称,如此PVC 只能匹配到对应相同的名称
capacity:
storage: 4Gi #存储大小
---
apiVersion: v1
kind: PersistentVolumeClaim #定义类型为PVC
metadata:
name: pvcpod #定义pvc名字为pvcpod
spec:
accessModes: #访问模式
- ReadWriteMany #该卷可以通过单个节点以读写方式安装,同时pvc匹配与pv一致的模式
#storageClassName: "pv02" #该PVC绑定匹配名称一致PV上
resources: #资源
requests: #定义资源请求
storage: 1Gi #请求的容量为1G
kubectl apply -f storageClassName-pv-pvc.yaml && kubectl get pv,pvc
pvc调度到pv02 的pv上
,更新yaml文件vim storageClassName-pv-pvc.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv01
labels:
name: pv01
spec:
nfs: #定义存储类型为nfs
path: /root/kubernetes/pv_pvc/volumes/v1 #nfs共享路径
server: 192.168.11.128 #nfs共享服务service
accessModes: #访问模式
#- ReadWriteOnce #该卷可以通过单个节点以读写方式安装
#- ReadOnlyMany #该卷可以被许多节点只读安装
- ReadWriteMany #该卷可以被许多节点读写安装
storageClassName: "pv01" #设置存储类特定的名称,如此PVC 只能匹配到对应相同的名称
capacity:
storage: 2Gi #存储大小
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv02
labels:
name: pv02
spec:
nfs: #定义存储类型为nfs
path: /root/kubernetes/pv_pvc/volumes/v2 #nfs共享路径
server: 192.168.11.128 #nfs共享服务service
accessModes: #访问模式
- ReadWriteMany #该卷可以通过单个节点以读写方式安装
storageClassName: "pv02" #设置存储类特定的名称,如此PVC 只能匹配到对应相同的名称
capacity:
storage: 4Gi #存储大小
---
apiVersion: v1
kind: PersistentVolumeClaim #定义类型为PVC
metadata:
name: pvcpod #定义pvc名字为pvcpod
spec:
accessModes: #访问模式
- ReadWriteMany #该卷可以通过单个节点以读写方式安装,同时pvc匹配与pv一致的模式
storageClassName: "pv02" #该PVC绑定匹配名称一致PV上
resources: #资源
requests: #定义资源请求
storage: 1Gi #请求的容量为1G
kubectl delete -f storageClassName-pv-pvc.yaml && kubectl apply -f storageClassName-pv-pvc.yaml && kubectl get pv,pvc
pvc调度到pv01 的pv上
,更新yaml文件vim storageClassName-pv-pvc.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv01
labels:
name: pv01
spec:
nfs: #定义存储类型为nfs
path: /root/kubernetes/pv_pvc/volumes/v1 #nfs共享路径
server: 192.168.11.128 #nfs共享服务service
accessModes: #访问模式
#- ReadWriteOnce #该卷可以通过单个节点以读写方式安装
#- ReadOnlyMany #该卷可以被许多节点只读安装
- ReadWriteMany #该卷可以被许多节点读写安装
storageClassName: "pv01" #设置存储类特定的名称,如此PVC 只能匹配到对应相同的名称
capacity:
storage: 2Gi #存储大小
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv02
labels:
name: pv02
spec:
nfs: #定义存储类型为nfs
path: /root/kubernetes/pv_pvc/volumes/v2 #nfs共享路径
server: 192.168.11.128 #nfs共享服务service
accessModes: #访问模式
- ReadWriteMany #该卷可以通过单个节点以读写方式安装
storageClassName: "pv02" #设置存储类特定的名称,如此PVC 只能匹配到对应相同的名称
capacity:
storage: 4Gi #存储大小
---
apiVersion: v1
kind: PersistentVolumeClaim #定义类型为PVC
metadata:
name: pvcpod #定义pvc名字为pvcpod
spec:
accessModes: #访问模式
- ReadWriteMany #该卷可以通过单个节点以读写方式安装,同时pvc匹配与pv一致的模式
storageClassName: "pv01" #该PVC绑定匹配名称一致PV上
resources: #资源
requests: #定义资源请求
storage: 1Gi #请求的容量为1G
kubectl delete -f storageClassName-pv-pvc.yaml && kubectl apply -f storageClassName-pv-pvc.yaml && kubectl get pv,pvc
vim local_亲和性.yaml
kind: PersistentVolume
metadata:
name: local-pv
spec:
capacity:
storage: 1Gi
volumeMode: Filesystem #文件系统
accessModes:
- ReadWriteOnce #一个节点以读写方式挂载
persistentVolumeReclaimPolicy: Delete #更改回收策略,静态默认回收策略Retain
storageClassName: local-storage #设置存储类特定的名称,如此PVC 只能匹配到对应相同的名称
local: #本地模式
path: /root/kubernetes #绝对路径
nodeAffinity: #节点亲和
required:
nodeSelectorTerms: #节点匹配标签
- matchExpressions:
- key: kubernetes.io/hostname
operator: In #包含
values:
- k8s-node1
---
apiVersion: v1
kind: PersistentVolumeClaim #定义类型为PVC
metadata:
name: pvcpod #定义pvc名字为pvcpod
spec:
accessModes: #访问模式
- ReadWriteOnce #该卷可以通过单个节点以读写方式安装
storageClassName: "local-storage" #该PVC绑定名称一致PV上
resources: #资源
requests: #定义资源请求
storage: 1Gi #请求的容量为3Gi
---
apiVersion: apps/v1
kind: Deployment #控制器
metadata:
name: pvc-nginx #这个标签为启动pod时候的名字
spec:
replicas: 1 #启动副本数
selector: #设置标签
matchLabels:
app: pvc-nginx #这个标签相当于分组,查看(kubectl get pods --show-labels)
minReadySeconds: 5 #等待设置的时间后才进行升级,(如果没有设置该值,在某些极端情况下可能会造成服务不正常运行)
revisionHistoryLimit: 2 #要保留以允许回滚的旧复制集数
strategy: #策略
type: RollingUpdate #默认为滚动更新(可以不写)
rollingUpdate: #滚动更新
maxSurge: 1 #升级过程中最多可以比原先设置多出的POD数量
maxUnavailable: 1 #升级过程中最多有多少个POD处于无法提供服务的状态(该不为0)
template: #模板(相当于定义好的一个python中的模块)
metadata:
labels: #标签
app: pvc-nginx #需要与上面定义selector标签一致,相当于划分在同一个组
spec:
containers: #模板(容器模板)
- name: pvc-nginx #node节点启动的容器名字(kind控制器名字+标签名),可以去node节点查看容器名
image: nginx #镜像名
imagePullPolicy: IfNotPresent #拉取镜像(选择方式——直接使用本地拥有的镜像)
ports:
- containerPort: 80 #容器开放的监听端口
volumeMounts: #挂载容器的目录
- name: nginxpvc #特别注意:容器挂载名字和本地挂载名字需要一致(下面名字)
mountPath: /usr/share/nginx/html/ #容器挂载的目录路径
restartPolicy: Always #重新启动pod中所有容器的策略
volumes: #挂载目录方式——本地/网络
- name: nginxpvc #特别注意:容器挂载名字和本地挂载名字需要一致(上面名字)
persistentVolumeClaim: #使用pvc进行挂载
claimName: pvcpod #绑定PVC卷的名称
kubectl apply -f local_亲和性.yaml
mkdir /root/kubernetes
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv01
labels:
pv: local-pv01
spec:
capacity:
storage: 1Gi
volumeMode: Filesystem #文件系统
accessModes:
- ReadWriteOnce #一个节点以读写方式挂载
persistentVolumeReclaimPolicy: Retain #更改回收策略,静态默认回收策略Retain
storageClassName: "local-storage" #设置存储类特定的名称,如此PVC 只能匹配到对应相同的名称
local: #本地模式
path: /root/kubernetes #绝对路径
nodeAffinity: #节点亲和
required:
nodeSelectorTerms: #节点匹配标签
- matchExpressions:
- key: kubernetes.io/os
operator: In #包含
values:
- linux
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv02
labels:
pv: local-pv02
spec:
capacity:
storage: 1Gi
volumeMode: Filesystem #文件系统
accessModes:
- ReadWriteOnce #一个节点以读写方式挂载
persistentVolumeReclaimPolicy: Retain #更改回收策略,静态默认回收策略Retain
storageClassName: "local-storage" #设置存储类特定的名称,如此PVC 只能匹配到对应相同的名称
local: #本地模式
path: /root/kubernetes #绝对路径
nodeAffinity: #节点亲和
required:
nodeSelectorTerms: #节点匹配标签
- matchExpressions:
- key: kubernetes.io/os
operator: In #包含
values:
- linux
---
apiVersion: v1
kind: PersistentVolumeClaim #定义类型为PVC
metadata:
name: pvcpod #定义pvc名字为pvcpod
labels:
name: pvcpod
spec:
accessModes: #访问模式
- ReadWriteOnce #该卷可以通过单个节点以读写方式安装
volumeMode: Filesystem
storageClassName: "local-storage" #该PVC绑定名称一致PV上
resources: #资源
requests: #定义资源请求
storage: 1Gi #请求的容量为3Gi
selector:
matchExpressions:
- key: pv #PV标签的key值
operator: In #包含
values:
- local-pv02 #PV标签的values
---
apiVersion: apps/v1
kind: Deployment #控制器
metadata:
name: pvc-nginx #这个标签为启动pod时候的名字
spec:
replicas: 1 #启动副本数
selector: #设置标签
matchLabels:
app: pvc-nginx #这个标签相当于分组,查看(kubectl get pods --show-labels)
minReadySeconds: 5 #等待设置的时间后才进行升级,(如果没有设置该值,在某些极端情况下可能会造成服务不正常运行)
revisionHistoryLimit: 2 #要保留以允许回滚的旧复制集数
strategy: #策略
type: RollingUpdate #默认为滚动更新(可以不写)
rollingUpdate: #滚动更新
maxSurge: 1 #升级过程中最多可以比原先设置多出的POD数量
maxUnavailable: 1 #升级过程中最多有多少个POD处于无法提供服务的状态(该不为0)
template: #模板(相当于定义好的一个python中的模块)
metadata:
labels: #标签
app: pvc-nginx #需要与上面定义selector标签一致,相当于划分在同一个组
spec:
containers: #模板(容器模板)
- name: pvc-nginx #node节点启动的容器名字(kind控制器名字+标签名),可以去node节点查看容器名
image: nginx #镜像名
imagePullPolicy: IfNotPresent #拉取镜像(选择方式——直接使用本地拥有的镜像)
ports:
- containerPort: 80 #容器开放的监听端口
volumeMounts: #挂载容器的目录
- name: nginxpvc #特别注意:容器挂载名字和本地挂载名字需要一致(下面名字)
mountPath: /usr/share/nginx/html/ #容器挂载的目录路径
restartPolicy: Always #重新启动pod中所有容器的策略
volumes: #挂载目录方式——本地/网络
- name: nginxpvc #特别注意:容器挂载名字和本地挂载名字需要一致(上面名字)
persistentVolumeClaim: #使用pvc进行挂载
claimName: pvcpod #绑定PVC卷的名称
kubectl delete -f pvc_selector.yaml && kubectl apply -f pvc_selector.yaml && kubectl get pv,pvc
PVC 绑定符合 PVC 定义的 selector 标签名称 为PV02的卷,可以看出效果生效。
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv01
labels:
pv: local-pv01
spec:
capacity:
storage: 1Gi
volumeMode: Filesystem #文件系统
accessModes:
- ReadWriteOnce #一个节点以读写方式挂载
persistentVolumeReclaimPolicy: Retain #更改回收策略,静态默认回收策略Retain
storageClassName: "local-storage" #设置存储类特定的名称,如此PVC 只能匹配到对应相同的名称
local: #本地模式
path: /root/kubernetes #绝对路径
nodeAffinity: #节点亲和
required:
nodeSelectorTerms: #节点匹配标签
- matchExpressions:
- key: kubernetes.io/os
operator: In #包含
values:
- linux
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv02
labels:
pv: local-pv02
spec:
capacity:
storage: 1Gi
volumeMode: Filesystem #文件系统
accessModes:
- ReadWriteOnce #一个节点以读写方式挂载
persistentVolumeReclaimPolicy: Retain #更改回收策略,静态默认回收策略Retain
storageClassName: "local-storage" #设置存储类特定的名称,如此PVC 只能匹配到对应相同的名称
local: #本地模式
path: /root/kubernetes #绝对路径
nodeAffinity: #节点亲和
required:
nodeSelectorTerms: #节点匹配标签
- matchExpressions:
- key: kubernetes.io/os
operator: In #包含
values:
- linux
---
apiVersion: v1
kind: PersistentVolumeClaim #定义类型为PVC
metadata:
name: pvcpod #定义pvc名字为pvcpod
labels:
name: pvcpod
spec:
accessModes: #访问模式
- ReadWriteOnce #该卷可以通过单个节点以读写方式安装
volumeMode: Filesystem
storageClassName: "local-storage" #该PVC绑定名称一致PV上
resources: #资源
requests: #定义资源请求
storage: 1Gi #请求的容量为3Gi
selector:
matchExpressions:
- key: pv #PV标签的key值
operator: In #包含
values:
- local-pv01 #PV标签的values
---
apiVersion: apps/v1
kind: Deployment #控制器
metadata:
name: pvc-nginx #这个标签为启动pod时候的名字
spec:
replicas: 1 #启动副本数
selector: #设置标签
matchLabels:
app: pvc-nginx #这个标签相当于分组,查看(kubectl get pods --show-labels)
minReadySeconds: 5 #等待设置的时间后才进行升级,(如果没有设置该值,在某些极端情况下可能会造成服务不正常运行)
revisionHistoryLimit: 2 #要保留以允许回滚的旧复制集数
strategy: #策略
type: RollingUpdate #默认为滚动更新(可以不写)
rollingUpdate: #滚动更新
maxSurge: 1 #升级过程中最多可以比原先设置多出的POD数量
maxUnavailable: 1 #升级过程中最多有多少个POD处于无法提供服务的状态(该不为0)
template: #模板(相当于定义好的一个python中的模块)
metadata:
labels: #标签
app: pvc-nginx #需要与上面定义selector标签一致,相当于划分在同一个组
spec:
containers: #模板(容器模板)
- name: pvc-nginx #node节点启动的容器名字(kind控制器名字+标签名),可以去node节点查看容器名
image: nginx #镜像名
imagePullPolicy: IfNotPresent #拉取镜像(选择方式——直接使用本地拥有的镜像)
ports:
- containerPort: 80 #容器开放的监听端口
volumeMounts: #挂载容器的目录
- name: nginxpvc #特别注意:容器挂载名字和本地挂载名字需要一致(下面名字)
mountPath: /usr/share/nginx/html/ #容器挂载的目录路径
restartPolicy: Always #重新启动pod中所有容器的策略
volumes: #挂载目录方式——本地/网络
- name: nginxpvc #特别注意:容器挂载名字和本地挂载名字需要一致(上面名字)
persistentVolumeClaim: #使用pvc进行挂载
claimName: pvcpod #绑定PVC卷的名称
kubectl delete -f pvc_selector.yaml && kubectl apply -f pvc_selector.yaml && kubectl get pv,pvc