您可以在阿里雲Container Service Kubernetes 叢集中使用阿里雲雲端硬碟儲存卷。
目前,阿里雲雲端硬碟提供兩種 Kubernetes 掛載方式:
说明 對建立的雲端硬碟容量有如下要求:
- 普通雲端硬碟:最小5Gi
- 高效雲端硬碟:最小20Gi
- SSD雲端硬碟:最小20Gi
靜態儲存卷
您可以直接通過volume使用阿里雲雲端硬碟儲存卷或者通過 PV/PVC 使用阿里雲雲端硬碟儲存卷。
前提條件
使用雲端硬碟資料卷之前,您需要先在 ECS 管理主控台上建立雲端硬碟。有關如何建立雲端硬碟,參見建立雲端碟。
使用說明
- 雲端硬碟為非共用儲存,只能同時被一個 pod 掛載。
- 使用雲端硬碟儲存卷前需要先申請一個雲端硬碟,並獲得磁碟 ID。參見 建立雲端碟。
- volumeId: 表示所掛載雲端硬碟的磁碟ID;volumeName、PV Name要與之相同。
- 叢集中只有與雲端硬碟在同一個可用性區域(Zone)的節點才可以掛載雲端硬碟。
直接通過 volume 使用
使用disk-deploy.yaml檔案建立 Pod。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-disk-deploy
spec:
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx-flexvolume-disk
image: nginx
volumeMounts:
- name: "d-bp1j17ifxfasvts3tf40"
mountPath: "/data"
volumes:
- name: "d-bp1j17ifxfasvts3tf40"
flexVolume:
driver: "alicloud/disk"
fsType: "ext4"
options:
volumeId: "d-bp1j17ifxfasvts3tf40"
通過 PV/PVC 使用
步驟 1 建立雲端硬碟類型的 PV
您可以使用 yaml 檔案或者控制台介面建立雲端硬碟類型的 PV。
通過 yaml 檔案建立 PV
使用 disk-pv.yaml
檔案建立 PV。
说明 pv name 要與阿里雲盤 ID 相同。
apiVersion: v1
kind: PersistentVolume
metadata:
name: d-bp1j17ifxfasvts3tf40
labels:
failure-domain.beta.kubernetes.io/zone: cn-hangzhou-b
failure-domain.beta.kubernetes.io/region: cn-hangzhou
spec:
capacity:
storage: 20Gi
storageClassName: disk
accessModes:
- ReadWriteOnce
flexVolume:
driver: "alicloud/disk"
fsType: "ext4"
options:
volumeId: "d-bp1j17ifxfasvts3tf40"
通過控制台介面建立雲端硬碟資料卷
- 登入Container Service管理主控台。
- 在 Kubernetes 菜單下,單擊左側導覽列中的 ,進入資料卷列表頁面。
- 選擇所需的叢集,單擊頁面右上方的建立。
- 在建立資料卷對話方塊中,配置資料卷的相關參數。
- 資料卷類型:本樣本中為雲端硬碟。
- 訪問模式:預設為 ReadWriteOnce。
- 雲端硬碟 ID:您可以選擇與叢集屬於相同地區和可用性區域下處於待掛載狀態的雲端硬碟。
- 檔案系統類型:您可以選擇以什麼資料類型將資料存放區到雲端硬碟上,支援的類型包括 ext4、ext3、xfs、vfat。預設為 ext4。
- 標籤:為該資料卷添加標籤。
- 完成配置後,單擊建立。
步驟 2 建立 PVC
使用 disk-pvc.yaml
檔案建立 PVC。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-disk
spec:
accessModes:
- ReadWriteOnce
storageClassName: disk
resources:
requests:
storage: 20Gi
步驟 3 建立 Pod
使用disk-pod.yaml檔案建立 pod。
apiVersion: v1
kind: Pod
metadata:
name: "flexvolume-alicloud-example"
spec:
containers:
- name: "nginx"
image: "nginx"
volumeMounts:
- name: pvc-disk
mountPath: "/data"
volumes:
- name: pvc-disk
persistentVolumeClaim:
claimName: pvc-disk
動態儲存裝置卷
動態儲存裝置卷需要您手動建立 StorageClass,並在PVC中通過 storageClassName 來指定期望的雲端硬碟類型。
建立 StorageClass
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
name: alicloud-disk-common-hangzhou-b
provisioner: alicloud/disk
parameters:
type: cloud_ssd
regionid: cn-hangzhou
zoneid: cn-hangzhou-b
參數說明:
- provisioner:配置為 alicloud/disk,標識使用阿里雲雲端硬碟 Provsioner 外掛程式建立。
- type:標識雲端硬碟類型,支援 cloud、cloud_efficiency、cloud_ssd、available 四種類型;其中 available 會對高效、SSD、普通雲端硬碟依次嘗試建立,直到建立成功。
- regionid:期望建立雲端硬碟的地區。
- reclaimPolicy: 雲端硬碟的回收策略,預設為Delete,支援Retain。
- zoneid:期望建立雲端硬碟的可用性區域。
建立服務
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: disk-common
spec:
accessModes:
- ReadWriteOnce
storageClassName: alicloud-disk-common-hangzhou-b
resources:
requests:
storage: 20Gi
---
kind: Pod
apiVersion: v1
metadata:
name: disk-pod-common
spec:
containers:
- name: disk-pod
image: nginx
volumeMounts:
- name: disk-pvc
mountPath: "/mnt"
restartPolicy: "Never"
volumes:
- name: disk-pvc
persistentVolumeClaim:
claimName: disk-common
預設選項
叢集預設提供了下面幾種 StorageClass,可以在單 AZ 類型的叢集中使用。
- alicloud-disk-common:普通雲端硬碟。
- alicloud-disk-efficiency:高效雲端硬碟。
- alicloud-disk-ssd:SSD雲端硬碟。
- alicloud-disk-available:提供高可用選項,先試圖建立高效雲端硬碟;如果相應AZ的高效雲端硬碟資源售盡,再試圖建立SSD盤;如果SSD售盡,則試圖建立普通雲端硬碟。
使用雲端硬碟建立多執行個體StatefulSet
使用 volumeClaimTemplates 的方式來建立,這樣會動態建立多個 PVC 和 PV 並綁定。
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1beta2
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx
serviceName: "nginx"
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: web
volumeMounts:
- name: disk-common
mountPath: /data
volumeClaimTemplates:
- metadata:
name: disk-common
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "alicloud-disk-common"
resources:
requests:
storage: 10Gi