HuaWeiCLoud PV、PVC和StorageClass

PV、PVC和StorageClass

Posted by laohuang on Monday, October 23, 2023

华为云 PV、PVC 和 StorageClass 实践

1 如果你有一块云硬盘,你希望把它 mount 到 一个Nginx Pod 上,可按如下步骤操作

A. 购买一块 10Gi 的云硬盘, 取得这块盘的 ID。

```    
 fff34224-1c90-4b0f-87b7-3180a6c644d6
```

B. 创建 PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-evs-disk-example
spec:
  accessModes:
  - ReadWriteOnce                     # 读写模式
  capacity:
    storage: 10Gi                      # 定义PV的大小
  csi:
    driver: disk.csi.everest.io
    volumeHandle: fff34224-1c90-4b0f-87b7-3180a6c644d6
    fsType: ext4
    volumeAttributes:
      everest.io/disk-mode: SCSI
      everest.io/disk-volume-type: GPSSD
      storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisioner
  storageClassName: csi-disk
❯ k create -f creat-pv.yaml
❯ k get pv
NAME                                                         CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                                        STORAGECLASS   REASON   AGE
pv-evs-disk-example                                          10Gi       RWO            Retain           Available                                                csi-disk                30s

C. 创建 PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-disk-example
  annotations:
    everest.io/disk-volume-type: GPSSD
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi              # 声明存储的大小
  volumeName: pv-evs-disk-example    # PV的名称
  storageClassName: csi-disk
❯ k apply -f creat-pvc.yaml
persistentvolumeclaim/pvc-disk-example created
❯ k get pvc -n default
NAME               STATUS   VOLUME                CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc-disk-example   Bound    pv-evs-disk-example   10Gi       RWO            csi-disk       9s

D. 绑定这块盘到 POD (注意: 确保这块盘和 Pod 所在的 Node 在同一 Region)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:alpine
        name: container-0
        volumeMounts:
        - mountPath: /cache                                # 挂载路径
          name: pvc-disk-example
      restartPolicy: Always
      volumes:
      - name: pvc-disk-example
        persistentVolumeClaim:
          claimName: pvc-disk-example
❯ k apply -f nginx-pvc-existing-disk.yaml
deployment.apps/nginx-deployment created
    Mounts:
      /cache from pvc-disk-example (rw)

附录:下面是在华为的 Console 中完整显示的创建 PV / PVC 的 yaml 文件。

apiVersion: v1
kind: PersistentVolume
metadata:
  annotations:
    pv.kubernetes.io/provisioned-by: everest-csi-provisioner
  name: pv-evs-disk-example
  labels:
    failure-domain.beta.kubernetes.io/region: cn-east-3
    failure-domain.beta.kubernetes.io/zone: cn-east-3a
spec:
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 10Gi
  csi:
    driver: disk.csi.everest.io
    fsType: ext4
    volumeHandle: fff34224-1c90-4b0f-87b7-3180a6c644d6 
    volumeAttributes:
      storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisioner
      everest.io/disk-mode: SCSI
      everest.io/disk-volume-type: GPSSD
      everest.io/enterprise-project-id: '0'
  persistentVolumeReclaimPolicy: Retain
  storageClassName: csi-disk
  apiVersion: v1
  kind: PersistentVolumeClaim
  metadata:
    name: pvc-disk-example
    namespace: default
    annotations:
      volume.beta.kubernetes.io/storage-provisioner: everest-csi-provisioner
      everest.io/disk-volume-type: GPSSD
      everest.io/enterprise-project-id: '0'
    labels:
      failure-domain.beta.kubernetes.io/region: cn-east-3
      failure-domain.beta.kubernetes.io/zone: cn-east-3a
  spec:
    accessModes:
      - ReadWriteOnce
    resources:	
      requests:
        storage: 10Gi
    storageClassName: csi-disk
    volumeName: pv-evs-disk-example
2 StorageClass

A. Nas 盘挂载

创建盘

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name:  pvc-sfs-auto-example
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: csi-nas        # StorageClass

挂载盘到 Pod 上

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:alpine
        name: container-0
        volumeMounts:
        - mountPath: /tmp                                # 挂载路径
          name: pvc-sfs-auto-example
      restartPolicy: Always
      volumes:
      - name: pvc-sfs-auto-example
        persistentVolumeClaim:
          claimName:  pvc-sfs-auto-example                      # PVC的名称

B. 挂载云硬盘

创建盘

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name:  pvc-sfs-auto-example
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: csi-disk        # StorageClass

挂载盘

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:alpine
        name: container-0
        volumeMounts:
        - mountPath: /tmp                                # 挂载路径
          name: pvc-sfs-auto-example
      restartPolicy: Always
      volumes:
      - name: pvc-sfs-auto-example
        persistentVolumeClaim:
          claimName:  pvc-sfs-auto-example                      # PVC的名称
3 empty 和 hostpath

A. empty 方式

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:alpine
        name: container-0
        volumeMounts:
        - mountPath: /cache                                # 挂载路径
          name: cache-volume
      restartPolicy: Always
      volumes:
      - name: cache-volume
        emptyDir: {}

B. Hostpath 方式

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:alpine
        name: container-0
        volumeMounts:
        - mountPath: /cache                                # 挂载路径
          name: cache-volume
      restartPolicy: Always
      #nodeSelector:
      #  kubernetes.io/hostname: pre-cce-node-sewsmart-1
      volumes:
      - name: cache-volume
        hostPath:
          path: /tmp/cache-host/

附录:

华为云参考文档: https://support.huaweicloud.com/basics-cce/kubernetes_0030.html

「真诚赞赏,手留余香」

LaoHuang Blog

真诚赞赏,手留余香

使用微信扫描二维码完成支付