华为云 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
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付
