Kubernetes, bir iş yükü için hangi cloud diskinin sağlanacağını otomatik olarak bilemez. Disk türü ve alan tercihlerinizi eşleyen bir StorageClass tanımlamanız ve bunu kalıcı birim talebinde (PVC) referans almanız gerekir. PVC oluşturulduğunda Disk-Controller diski otomatik olarak sağlar ve kalıcı birim (PV) olarak bağlar.
Ön koşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
kubectl yapılandırılmış çalışan bir ACK kümesi
Kümede StorageClass ve PVC kaynakları oluşturma izni
Varsayılan StorageClass'lar
Tek alanlı kümeler aşağıdaki StorageClass'ları hazır olarak içerir. Çok alanlı kümelerde hedef alanı belirtmek için StorageClass'ı manuel olarak oluşturmanız gerekir.
| StorageClass | Disk türü | En uygun kullanım |
|---|---|---|
alicloud-disk-efficiency |
Ultra disk | Orta düzey G/Ç gereksinimleri olan maliyet odaklı iş yükleri |
alicloud-disk-ssd |
Standart SSD | Güvenilir performans gerektiren genel amaçlı iş yükleri |
alicloud-disk-essd |
Gelişmiş SSD (ESSD) | Düşük gecikme süresi ve yüksek aktarım hızı gerektiren üretim iş yükleri |
alicloud-disk-available |
Yüksek kullanılabilirlik modu | Disk türünden ziyade disk kullanılabilirliğinin öncelikli olduğu iş yükleri |
alicloud-disk-topology |
WaitForFirstConsumer modu | Pod zamanlamanın disk alanını belirlediği çok alanlı kümeler |
alicloud-disk-available için sistem önce standart SSD oluşturmaya çalışır; SSD kaynakları tükendiğinde ultra diske geri döner. v1.14.8.44-c23b62c5-aliyun öncesi Disk-Controller sürümlerinde geri dönüş sırası şöyledir: gelişmiş SSD (ESSD) → standart SSD → ultra disk.
StorageClass oluşturma
Küme yapılandırmanıza göre bir StorageClass türü seçin:
Tek alanlı küme veya sabit alanlı disk: Alan kimliği içeren StorageClass oluşturma
Çok alanlı küme: WaitForFirstConsumer modunda StorageClass oluşturma
Alan kimliği içeren StorageClass oluşturma
Bu yaklaşımı tek alanlı kümeler için veya disk oluşturmayı belirli bir alana sabitlemek istediğinizde kullanın.
-
Aşağıdaki içeriğe sahip
storage-class.yamladlı bir dosya oluşturun:kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: alicloud-disk-ssd-hangzhou-b provisioner: alicloud/disk parameters: type: cloud_ssd regionId: cn-hangzhou zoneId: cn-hangzhou-b reclaimPolicy: Retain # Default is Delete. Set to Retain to prevent accidental data loss.Aşağıdaki tabloda parametreler açıklanmaktadır:
Parametre Açıklama Gerekli Varsayılan provisionerDisk sağlamak için kullanılan birim eklentisi. alicloud/diskolarak ayarlayın.Evet — typeDisk türü. Geçerli değerler: cloud_efficiency(ultra disk),cloud_ssd(standart SSD),cloud_essd(ESSD),available(en iyi kullanılabilir türü otomatik seçen yüksek kullanılabilirlik modu).Evet — regionIdDiske oluşturulacağı bölge. Evet — zoneIdDiske oluşturulacağı alan. Çok alanlı kümeler için virgülle ayrılmış birden fazla alan belirtin: cn-hangzhou-a,cn-hangzhou-b,cn-hangzhou-c.Evet — reclaimPolicyPVC silindiğinde diskin geri kazanım ilkesi. Retaindiski korur;Deletediski kaldırır. Veri kaybını önlemek içinRetainolarak ayarlayın.Hayır DeleteencryptedDiske şifreleme uygulanıp uygulanmayacağı. Hayır false -
StorageClass'ı uygulayın:
kubectl apply -f storage-class.yaml -
StorageClass'ın oluşturulduğunu doğrulayın:
kubectl get storageclass alicloud-disk-ssd-hangzhou-bÇıktıda, sağlayıcı olarak
alicloud/diskiçeren StorageClass görünmelidir.
WaitForFirstConsumer modunda StorageClass oluşturma
Çok alanlı kümelerde, bir pod zamanlanmadan önce PV sağlanabilir ve disk podun sonunda çalıştığı alandan farklı bir alanda yer alabilir. Bu durumda pod, başka bir alandaki diski bağlayamadığı için başlatılamaz. WaitForFirstConsumer modu, disk sağlamayı tüketici pod zamanlanana kadar erteleyerek bu sorunu çözer; böylece disk her zaman pod ile aynı alanda oluşturulur.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-disk-topology-ssd
provisioner: alicloud/disk
parameters:
type: cloud_ssd
reclaimPolicy: Retain # Default is Delete.
volumeBindingMode: WaitForFirstConsumer
StorageClass'ı uygulayın:
kubectl apply -f storage-class-topology.yaml
Alan seçimi nasıl çalışır — Aşağıdaki tablo, StorageClass yapılandırmanıza göre disk yerleştirme davranışını özetler:
| Yapılandırma | Disk yerleşimi |
|---|---|
zoneId yok, WaitForFirstConsumer yok |
Disk-Controller bileşeninin dağıtıldığı alan |
zoneId ayarlı, WaitForFirstConsumer yok |
Belirtilen alanlar, yuvarlak roket yöntemiyle seçilir |
WaitForFirstConsumer etkin |
Tüketici podun zamanlandığı düğümün alanı |
PVC ve Pod oluşturma
Aşağıdaki manifest, alicloud-disk-ssd-hangzhou-b StorageClass'ını kullanan bir PVC ve diski bağlayan bir Pod oluşturur:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: disk-ssd
spec:
accessModes:
- ReadWriteOnce
storageClassName: alicloud-disk-ssd-hangzhou-b
resources:
requests:
storage: 20Gi
---
kind: Pod
apiVersion: v1
metadata:
name: disk-pod-ssd
spec:
containers:
- name: disk-pod
image: nginx
volumeMounts:
- name: disk-pvc
mountPath: "/mnt"
restartPolicy: "Never"
volumes:
- name: disk-pvc
persistentVolumeClaim:
claimName: disk-ssd
Manifest'i uygulayın:
kubectl apply -f pvc-pod.yaml
PVC'nin bağlı olduğunu ve Pod'un çalıştığını doğrulayın:
kubectl get pvc disk-ssd
kubectl get pod disk-pod-ssd
Başarıyla bağlanmış bir PVC STATUS: Bound gösterir. Çalışan bir Pod STATUS: Running gösterir.
Çok örnekli StatefulSet oluşturma
Her StatefulSet çoğaltması için ayrı bir PVC ve PV dinamik olarak oluşturmak üzere volumeClaimTemplates kullanın. Aşağıdaki örnekte, çoğaltma başına 20 GiB disk içeren iki çoğaltmalı bir nginx StatefulSet oluşturulur:
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1
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-ssd
mountPath: /data
volumeClaimTemplates:
- metadata:
name: disk-ssd
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "alicloud-disk-ssd-hangzhou-b"
resources:
requests:
storage: 20Gi
Manifest'i uygulayın:
kubectl apply -f statefulset.yaml
StatefulSet, Pod'lar ve PVC'lerin tümünün oluşturulduğunu doğrulayın:
kubectl get statefulset web
kubectl get pods -l app=nginx
kubectl get pvc -l app=nginx
Her Pod (web-0, web-1), bağımsız olarak sağlanmış bir diskle desteklenen kendi PVC'sine (disk-ssd-web-0, disk-ssd-web-1) sahip olur.