一、PersistentVolume YAML
PersistentVolume(PV)是集群中已由管理员配置的一段网络存储
kubectl explain pv
字段 | 值类型 | 说明 |
---|---|---|
accessModes |
[]string |
访问模式ReadWriteOnce : 卷可以被同一个节点上资源以读写方式挂载。(list 中简称 RWX )ReadOnlyMany : 卷可以被多个节点以只读方式挂载。(list 中简称 ROX )ReadWriteMany : 卷可以被多个节点以读写方式挂载。(list 中简称 RWX )ReadWriteOncePod : 卷可以被单个 Pod 以读写方式挂载。这只支持 CSI 卷以及需要 Kubernetes 1.22 以上版本。(list 中简称 RWOP ) |
capacity |
map[string]string |
设置存储容量storage : 容量大小(单位:Ki Mi Gi Ti Pi Ei ),如:storage: 10Gi
|
nfs |
Object |
nfs 网络存储* path : nfs 目录地址readOnly : 是否只读,默认 False * server : nfs 服务器地址 |
persistentVolumeReclaimPolicy |
string |
回收策略Delete : 删除 pv 后数据也删除 这里我试验的时候删除 pvc 和 pv 后 nfs 里面的数据没有被删除Retain : 默认 删除 pv 里面的 pvc 后 pv 状态为 released ,pv 里面的数据不会被删除。重新创建 pvc 数据恢复。删除 pv 里面的数据也不会被删除 |
cephfs |
Object |
|
csi |
Object |
|
glusterfs |
Object |
|
hostPath |
Object |
|
iscsi |
Object |
|
local |
Object |
|
rbd |
Object |
示例: 创建 pv
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-1
labels:
pv: pv1
spec:
accessModes: # 定义 pv 续写默认
- "ReadWriteOnce"
capacity: # 定义可使用的容量
storage: 100Mi
nfs: # 使用 nfs 定义 pv
path: /root/nfs_data/data1 # nfs 文件地址
server: fns_ip # nfs 服务器 ip 地址
二、PersistentVolumeClaim yaml
PersistentVolumeClaim(PVC)是用户存储的请求
kubectl explain pvc
字段 | 值类型 | 说明 |
---|---|---|
accessModes |
[]string |
访问模式,必须和 PV 的访问模式相同ReadWriteOnce : 卷可以被同一个节点上资源以读写方式挂载。(list 中简称 RWX )ReadOnlyMany : 卷可以被多个节点以只读方式挂载。(list 中简称 ROX )ReadWriteMany : 卷可以被多个节点以读写方式挂载。(list 中简称 RWX )ReadWriteOncePod : 卷可以被单个 Pod 以读写方式挂载。这只支持 CSI 卷以及需要 Kubernetes 1.22 以上版本。(list 中简称 RWOP ) |
dataSource |
Object |
|
dataSourceRef |
Object |
|
resources |
Object |
资源限制limits : 限制最大可用资源requests : 最小的资源需求,节点资源不足这个限制,不会调度到该节点 limits 和 requests 限制的资源 storage 、cpu 、memory
|
selector |
Object |
便签选择器,选择要使用的 pv 匹配方式: matchExpressions :表达式方式匹配 pod,参考上面示例有很多matchLabels :标签 pod 匹配 map[string]string 这个类型 |
storageClassName |
string |
存储类的名字,存储类的名字,关于存储类: |
volumeMode |
string |
|
volumeName |
string |
示例: 创建 pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-1
spec:
accessModes: # 定义访问模式,必须和 pv 的访问模式相同
- "ReadWriteOnce"
selector: # 定义标签选择器
matchLabels:
pv: pv1 # 这是 pv 的标签
resources: # 资源限制
requests: # 限制最小可用资源
storage: 100Mi # 限制存储为 100Mi
三、StorageClass YAML
动态创建 pv。简写
sc
kubectl explain sc
字段 | 值类型 | 说明 |
---|---|---|
allowVolumeExpansion |
boolean |
是否允许卷扩展,只扩不缩。扩展支持情况 |
allowedTopologies |
[]Object |
|
mountOptions |
[]string |
|
parameters |
map[string]string |
给供应商提供的参数 |
provisioner |
string |
供应商,如: ceph、AzureFile 等 |
reclaimPolicy |
string |
回收策略,默认:delete
|
volumeBindingMode |
string |
示例:
示例是以 nfs 为例;k8s 部署 nfs provisioner
创建 StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs
provisioner: example.com/nfs # 这里是你 nfs deployment 服务创建时候 PROVISIONER_NAME 的值
使用 StorageClass 关联 nfs 服务创建 pvc。此时自动创建 pv 和 pvc
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: test-pvc1
spec:
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: 1Gi # 存储资源请求大小
storageClassName: nfs # 这里是 StorageClass.metadata.name 的值
---
kind: Pod
apiVersion: v1
metadata:
name: test-mount
spec:
containers:
- name: test-mount
image: nginx
imagePullPolicy: IfNotPresent
volumeMounts:
- name: nfs-pvc # 下面卷的名字
mountPath: /usr/share/nginx/html
restartPolicy: "Never" # 重启策略
volumes:
- name: nfs-pvc # 创建的卷的名字
persistentVolumeClaim:
claimName: test-pvc1 # 这里是 pvc 的名字
网友评论