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 后数据也删除 \color{red}{注意:}这里我试验的时候删除 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 访问模式,\color{red}{注意:}必须和 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: 最小的资源需求,节点资源不足这个限制,不会调度到该节点

limitsrequests 限制的资源 storagecpumemory
selector Object 便签选择器,选择要使用的 pv

匹配方式:

matchExpressions:表达式方式匹配 pod,参考上面示例有很多

matchLabels:标签 pod 匹配 map[string]string 这个类型
storageClassName string 存储类的名字,存储类的名字,关于存储类\color{red}{看}:\color{blue}{StorageClass YAML}
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 的名字

上一篇下一篇

猜你喜欢

热点阅读