Kubernests YAML 详细之卷(PV、PVC、Stor
2023-02-18 本文已影响0人
河码匠
一、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 后数据也删除 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 |
访问模式,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 的名字