Uygulamanız geçici disk alanına—örneğin çalışma alanı, önbellekleme veya yüksek aktarım hızı gerektiren günlük çıktısına—ihtiyaç duyuyorsa her Pod'a bir geçici birim bağlayabilirsiniz. Kalıcı birimlerden (PV'ler) farklı olarak geçici birimler Pod'un yaşam döngüsüne bağlıdır: Pod başlatıldığında otomatik olarak oluşturulur ve Pod kaldırıldığında silinir. Bu sayede manuel temizleme ihtiyacı ortadan kalkar ve durumsuz iş yükleri için dağıtım süreci basitleşir.
Bu konuda, ephemeral.volumeClaimTemplate kullanarak cloud disk'in nasıl geçici birim olarak bağlanacağı ve bir Pod silindiğinde PV ile kalıcı birim talebinin (PVC) otomatik olarak nasıl temizlendiği gösterilmektedir.
Geçici birimlerin kullanım senaryoları
Uygulamanız geçici depolamaya ihtiyaç duyuyor ancak verilerin yeniden başlatmalar arasında kalıcı olmasını gerektirmiyorsa geçici birimler uygun bir çözümdür:
Çalışma alanı ve ara veriler: Veri işleme işlem hatlarından gelen geçici sonuçları manuel temizleme yapmadan saklayın.
Yüksek aktarım hızı gerektiren günlük çıktıları: G/Ç çakışmasını önlemek amacıyla her Pod için ayrılmış, paylaşılmayan disk depolaması kullanın.
Önbellekleme: Kalıcı depolama yönetimi ek yükü olmadan kısa ömürlü önbellek verilerini uygulamaya yakın tutun.
volumeClaimTemplate ile desteklenen geçici birimler, emptyDir birimlerinden iki temel açıdan farklıdır: ağ üzerinden bağlı depolamayı (cloud disk'ler) desteklerler ve Pod'un aşamayacağı sabit bir kapasite belirtmenize olanak tanır.
Çalışma mantığı
Bir Deployment, Pod veya StatefulSet içinde ephemeral.volumeClaimTemplate tanımladığınızda Kubernetes, Pod ile aynı ad alanında bir PVC oluşturur. PVC'nin sahibi Pod'dur. Pod silindiğinde—bu durum ölçek küçültme, rolling update veya manuel silme yoluyla olabilir—Kubernetes garbage collector ilgili PVC'yi siler; bu işlem de altta yatan PV ve cloud disk'in silinmesini tetikler.
PVC adlandırması: Kubernetes, her PVC için <pod-name>-<volume-name> desenini kullanarak otomatik olarak bir ad atar. Örneğin, ephemeral-example-7f795798f9-kbplx adlı bir Pod ve scratch-volume adlı bir birim söz konusu olduğunda ephemeral-example-7f795798f9-kbplx-scratch-volume adında bir PVC oluşturulur. Adlandırma deterministik olduğu için arama yapmadan Pod adı ve birim adını birleştirerek PVC'yi bulabilirsiniz.
İki Pod, adları ve birim adları örtüşüyorsa aynı PVC adını üretebilir (örneğin,pod-aPod'u vescratchbirimi ilepodPod'u vea-scratchbiriminin her ikisi depod-a-scratchPVC'sini oluşturur). Pod ve birim adlarını özelleştirirken ad çakışmalarından kaçının.
Ön koşullar
Başlamadan önce aşağıdaki koşulu sağladığınızdan emin olun:
1,22 veya sonraki bir sürümde çalışan Container Service for Kubernetes (ACK) kümesi
Deployment oluşturma ve geçici birim bağlama
volumeClaimTemplate, PVC'lerin yapılandırmasını tanımlar. İki replikaya sahip bir Deployment dağıttığınızda Kubernetes, aynı şablondan Pod başına bir tane olmak üzere iki PVC oluşturur. Bu PVC'ler aynı yapılandırmayı paylaşır ancak farklı adlara sahiptir.
ephemeral.volumeClaimTemplate Deployments, StatefulSets ve Pods ile çalışır. Bu konuda örnek olarak bir Deployment kullanılmıştır.
-
Aşağıdaki içeriği
ephemeral-example.yamlolarak kaydedin. Aşağıdaki tabloda yer alan açıklamalara görevolumeClaimTemplateiçindeki parametreleri ayarlayın.Parametre Açıklama accessModesPV için erişim modu. Bir diskin aynı anda yalnızca bir Pod tarafından kullanıldığından emin olmak için ReadWriteOncePod(1,29 veya sonraki sürümlerde çalışan kümeler için) olarak ayarlayın. Daha eski küme sürümleri içinReadWriteOncekullanın.storageClassNameKullanılacak StorageClass. Bu örnekte, diskleri şu sırayla sağlayan ACK varsayılan StorageClass'ı olan alicloud-disk-topology-alltypekullanılmaktadır: ESSD (kurumsal SSD), standart SSD ve ardından ultra disk. Diskler kullandıkça öde modeliyle faturalandırılır. Fiyatlandırma ayrıntıları için bkz. Elastic Block Storage faturalandırması ve Elastic Block Storage fiyatlandırması.storageGeçici birimin kapasitesi. alicloud-disk-topology-alltypeStorageClass varsayılan olarak PL1 ESSD sağlar. Minimum kapasite 20 GiB'dir.apiVersion: apps/v1 kind: Deployment metadata: name: ephemeral-example spec: replicas: 2 selector: matchLabels: pod: example-pod strategy: type: Recreate template: metadata: labels: pod: example-pod spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 resources: requests: cpu: 500m memory: 2Gi ephemeral-storage: 2Gi volumeMounts: - mountPath: "/scratch" name: scratch-volume volumes: - name: scratch-volume ephemeral: # Declare the current storage as ephemeral storage volumeClaimTemplate: spec: accessModes: [ "ReadWriteOncePod" ] storageClassName: alicloud-disk-topology-alltype resources: requests: storage: 30Gi -
Deployment'ı oluşturun.
kubectl create -f ephemeral-example.yaml -
Her iki Pod'un da çalıştığını doğrulayın.
kubectl get pod -l pod=example-podBeklenen çıktı:
NAME READY STATUS RESTARTS AGE ephemeral-example-7f795798f9-kbplx 1/1 Running 0 38s ephemeral-example-7f795798f9-p98lt 1/1 Running 0 38s -
PVC'lerin ve bunlara bağlı cloud disk'lerin otomatik olarak oluşturulduğunu doğrulayın.
kubectl get pvcBeklenen çıktı (disk kimliği
VOLUMEalanında görünür):NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE ephemeral-example-7f795798f9-kbplx-scratch-volume Bound d-uf61678cuo33eunn**** 30Gi RWOP alicloud-disk-topology-alltype <unset> 74s ephemeral-example-7f795798f9-p98lt-scratch-volume Bound d-uf6dwkdcowyf2fj6**** 30Gi RWOP alicloud-disk-topology-alltype <unset> 74s
Pod'lar kaldırıldığında PV'lerin ve PVC'lerin silindiğini doğrulama
Bir Pod silindiğinde Kubernetes garbage collector ilgili PVC'yi temizler; bu da bağlı PV ve cloud disk'in silinmesini tetikler. Aşağıdaki adımlar bu durumu ölçek küçültme işlemiyle göstermektedir.
-
Deployment'ı tek bir replikaya düşürecek şekilde ölçeklendirin.
kubectl scale deploy ephemeral-example --replicas=1 -
Yalnızca bir Pod'un kaldığını onaylayın.
kubectl get pod -l pod=example-podBeklenen çıktı:
NAME READY STATUS RESTARTS AGE ephemeral-example-7f795798f9-kbplx 1/1 Running 0 5m29s -
Silinen Pod'a ait PV'nin kaldırıldığını onaylayın.
kubectl get pvBeklenen çıktı (yalnızca hayatta kalan Pod'a bağlı tek bir PV kalır):
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE d-uf61678cuo33eunn**** 30Gi RWOP Delete Bound default/ephemeral-example-7f795798f9-kbplx-scratch-volume alicloud-disk-topology-alltype <unset> 5m52s -
Silinen Pod'a ait PVC'nin kaldırıldığını onaylayın.
kubectl get pvcBeklenen çıktı (yalnızca tek bir PVC kalır):
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE ephemeral-example-7f795798f9-kbplx-scratch-volume Bound d-uf61678cuo33eunn**** 30Gi RWOP alicloud-disk-topology-alltype <unset> 7m11s
Sonraki adımlar
Pod başına geçici depolama tüketimini izlemek için bkz. Geçici depolama izleme.
Pod silinmesinden sonra varlığını koruyan kalıcı depolama için cloud disk'leri kullanmak amacıyla bkz. Disk birimleri.