CKA认证

【K8s 精选】CKA - 存储

2021-11-01  本文已影响0人  熊本极客

1 了解 StorageClass、persistentVolume 和 PersistentVolumeClaim

考点:了解 StorageClass、persistentVolume

1.1 StorageClass

参考:Kubernetes 文档 - 存储类

# 样例1:存储后端是 AWS EBS
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
# provisioner 制备器,用来决定使用哪个 CSI 插件,来创建 PV
# aws-ebs 表示 AWS EBS
provisioner: kubernetes.io/aws-ebs
# parameters 是由 provisioner 制备器,至少有 1 个字段 type 
parameters:
  type: gp2
# reclaimPolicy 回收策略:Delete 或者 Retain,默认是 Delete
reclaimPolicy: Retain
# allowVolumeExpansion 是否支持扩展
allowVolumeExpansion: true
# mountOptions 挂载选项
mountOptions:
  - debug
# volumeBindingMode 卷绑定和动态制备的时候。
# Immediate 模式表示一旦创建了 PersistentVolumeClaim 也就完成了卷绑定和动态制备
# WaitForFirstConsumer 表示延迟 PersistentVolume 的绑定和制备,直到使用该 PersistentVolumeClaim 的 Pod 被创建
volumeBindingMode: Immediate

-------
# 样例1:存储后端是本地
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

1.2 PersistentVolume 和 PersistentVolumeClaim

参考:Kubernetes 文档 - 持久卷

PersistentVolume 和 PersistentVolumeClaim 的生命周期如下:
创建方式:PV 有静态创建、动态创建。

静态创建:管理员创建的 PV 带有真实存储的细节信息,可供用户直接使用。

image.png
#### Persistent Volume example
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-local
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 200Mi
  local:
    path: /data/pv/disk
  persistentVolumeReclaimPolicy: Retain
  # PV 采用静态创建 
  volumeMode: Filesystem
--------

#### Persistent Volume Claim example
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-local
spec:
  accessModes:
  - ReadWriteOnce
  # PV 采用静态创建 
  resources:
    requests:
      storage: 100Mi

动态创建:所有静态 PV 无法与 PVC 匹配,集群基于 StorageClass 为 PVC 创建 PV,即属性 storageClassName 相同的 PV 和 PVC 会自动绑定。

image.png

绑定:用户创建了带有特定存储容量和特定访问模式的 PVC 对象,接着匹配 PV,并将两者绑定在一起。
使用:Pod 根据 PVC 找到所绑定的 PV,并为 Pod 挂载该劵。
保护使用中的存储对象:确保仍被 Pod 使用的 PVC 及其所绑定的 PV 在系统中不会被删除。
回收:PV 的回收策略有保留(Retain)、删除(Delete)。配置字段为 persistentVolumeReclaimPolicy
预留 PV:PV 通过设置 claimRef,确保该 PV 只能绑定指定的 PVC。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: foo-pv
spec:
  # 此处须显式设置空字符串,否则会被设置为默认的 StorageClass,同时相当于为自身禁止使用动态创建的卷
  storageClassName: ""
  claimRef:
    # 确保该 PV 只能绑定指定的 PVC,即  foo-pvc
    name: foo-pvc
    namespace: foo
  ...

扩充 PVC:将 PVC 的 allowVolumeExpansion 设置为 true,可以扩充该 PVC,即可以编辑 PVC 来设置一个更大的尺寸值。

PersistentVolume

考点
了解持久卷 PersistentVolume
了解卷模式、访问模式和卷的回收策略

持久卷(PersistentVolume,PV)是集群中的一块存储。 PersistentVolume 的名称必须是合法的 DNS 子域名。持久卷是集群资源,就像节点也是集群资源一样

PersistentVolume 的主要配置如下:

容量:PV 有确定的存储容量,使用 capacity 属性来设置的。 参考 Kubernetes 资源模型(Resource Model)
卷模式:针对 PV 持久卷,支持两种卷模式 volumeModes:Filesystem 和 Block,默认 Filesystem

volumeMode 属性设置为 Filesystem 的卷会被 Pod 挂载(Mount) 到某个目录。

访问模式:每个 PV 卷的访问模式都会设置为对应卷所支持的模式值,例如,NFS 可以支持多个读写客户。

ReadWriteOnce:卷可以被同一个节点的多个 Pod 以读写方式访问。
ReadOnlyMany:卷可以被多个节点以只读方式挂载。
ReadWriteMany:卷可以被多个节点以读写方式挂载。
ReadWriteOncePod:卷只能被单个 Pod 以读写方式挂载。

所属 storageClass:PV 属于某个类(Class),通过将其 storageClassName 属性设置为某个 StorageClass 的名称来指定。
回收策略:通过 persistentVolumeReclaimPolicy 属性设置回收策略,Retain 表示手动回收,Recycle 表示基本擦除 (rm -rf /thevolume/*),Delete 表示直接删除。

目前,仅 NFS 和 HostPath 支持回收(Recycle)。 AWS EBS、GCE PD、Azure Disk 和 Cinder 卷都支持删除(Delete)。

节点亲和性:使用这些卷的 Pod 只会被调度到节点亲和性规则所选择的节点上执行。 要设置节点亲和性,配置 PV 卷 .spec 中的 nodeAffinity

下面以本地存储 HostPath 为例,编辑 PersistentVolume 的配置文件:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: sc-local-host
provisioner: kubernetes.io/no-provisioner
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
--------
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-local-host
  labels:
    type: local
spec:
  storageClassName: sc-local-host
  volumeMode: Filesystem
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: "/mnt/data"
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: pv_local_host_node
          operator: In
          values:
          - "yes"

PersistentVolumeClaim

考点了解持久卷声明 PersistentVolumeClaim

持久卷声明(PersistentVolumeClaim,PVC)表达的是用户对存储的请求。

PersistentVolumeClaim 的主要配置如下:

容量:PVC 有确定的存储容量,使用 capacity 属性来设置的。 参考 Kubernetes 资源模型(Resource Model)
卷模式:针对 PVC,支持两种卷模式 volumeModes:Filesystem 和 Block,默认 Filesystem

volumeMode 属性设置为 Filesystem 的卷会被 Pod 挂载(Mount) 到某个目录。

访问模式:每个 PVC 的访问模式都会设置为对应 PV 所支持的模式值。

所属 storageClass:PVC 属于某个类(Class),通过将其 storageClassName 属性设置为某个 StorageClass 的名称来指定。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-local-host
  namespace: ns-test
spec:
  storageClassName: sc-local-host
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  # 只有 PV 的 label 带有 type: local,该 PV 才能绑定到此 PVC
  selector:
    matchLabels:
      type: local

2 配置 Pod 以使用卷进行存储

考点了解应用程序如何配置持久化存储

#### Storage Class example
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: sc-local-host
provisioner: kubernetes.io/no-provisioner
reclaimPolicy: Retain
# WaitForFirstConsumer 表示延迟 PersistentVolume 的绑定和制备,直到使用该 PersistentVolumeClaim 的 Pod 被创建
volumeBindingMode: WaitForFirstConsumer
--------

#### Persistent Volume example
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-local
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 200Mi
  local:
    path: /data/pv/disk
  persistentVolumeReclaimPolicy: Retain
  # PV 采用动态创建,即通过 storageClassName 自动绑定 PV 和 PVC 
  storageClassName: sc-local-host
  volumeMode: Filesystem
--------

#### Persistent Volume Claim example
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-local
spec:
  accessModes:
  - ReadWriteOnce
    # PV 采用动态创建,即通过 storageClassName 自动绑定 PV 和 PVC 
  storageClassName:  sc-local-host
  resources:
    requests:
      storage: 100Mi
--------

####  Pod using the pvc
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
      - name: local-persistent-storage
        mountPath: /var/nginx/data
  volumes:
    - name: local-persistent-storage
      persistentVolumeClaim:
        claimName: pvc-local
上一篇 下一篇

猜你喜欢

热点阅读