Küme kaynaklarının kullanılabilirliği zamanla değişir. Zamanlayıcı yerleştirme kararlarını küme kaynaklarının o anki anlık görüntüsüne dayandırdığından, başarıyla zamanlanan çoğaltmalar düğümler arızalandığında veya kaynaklar tükendiğinde daha sonra zamanlanamaz hale gelebilir. ACK One Fleet bunu varsayılan olarak otomatik yönetir: Dağıtım (Deployment), StatefulSet ve Job çoğaltmalarını ilişkili kümeler arasında PropagationPolicy kullanarak dağıtır, her 2 dakikada bir zamanlanamayan çoğaltmaları kontrol eder ve herhangi bir çoğaltma 30 saniyeden uzun süre zamanlanamaz durumda kalırsa zamanlamadan çıkarmayı tetikler.
Ön koşullar
Başlamadan önce aşağıdakileri yaptığınızdan emin olun:
Fleet management özelliğinin etkinleştirilmiş olması
Birden fazla ilişkili kümeye sahip bir Fleet örneğinin bulunması multiple associated clusters
RAM kullanıcınıza AliyunAdcpFullAccess permission izninin verilmiş olması
AMC command-line tool aracının yüklenmiş olması
Adım 1: Fleet içinde bir uygulama oluşturun
-
Aşağıdaki içeriğe sahip
web-demo.yamladlı bir dosya oluşturun:apiVersion: apps/v1 kind: Deployment metadata: name: web-demo spec: replicas: 3 selector: matchLabels: app: web-demo template: metadata: labels: app: web-demo spec: containers: - name: nginx image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0 ports: - containerPort: 80 -
Uygulamayı dağıtın:
kubectl apply -f web-demo.yaml
Adım 2: Bir dağıtım ilkesi oluşturun
-
Dinamik ağırlık tabanlı bir distribution policy oluşturun.
dynamicWeight: AvailableReplicasayarı, Fleet'in her ilişkili kümedeki tüm düğümlerdeki mevcut kaynaklara göre çoğaltma tahsis oranlarını otomatik olarak ayarlamasını sağlar.apiVersion: policy.one.alibabacloud.com/v1alpha1 kind: PropagationPolicy metadata: name: web-demo spec: resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: web-demo placement: clusterAffinity: clusterNames: - ${cluster1-id} # Your cluster ID. - ${cluster2-id} replicaScheduling: replicaSchedulingType: Divided replicaDivisionPreference: Weighted weightPreference: dynamicWeight: AvailableReplicas -
Uygulama dağıtım durumunu kontrol edin:
kubectl amc get deploy web-demo -MBeklenen çıktı aşağıdakine benzerdir (sonuçlar, her ilişkili kümedeki mevcut kaynaklara göre değişir):
NAME CLUSTER READY UP-TO-DATE AVAILABLE AGE ADOPTION web-demo cxxxxxxxx1 2/2 2 2 11s Y web-demo cxxxxxxxx2 3/3 3 3 11s Y
Adım 3: Zamanlamadan çıkarmayı doğrulayın
Yetersiz kaynakların çoğaltmaların zamanlanamaz hale gelmesine neden olduğu bir senaryoyu simüle etmek için bir kümedeki tüm düğümlere taint uygulayın ve ardından iş yükünü yeniden başlatın.
-
Cluster1'deki tüm düğümlere
NoScheduletaint'ini uygulayın:kubectl --kubeconfig=<cluster1.config> taint nodes foo=bar:NoSchedule --all=true -
İş yükünü yeniden başlatın. Cluster1'deki tüm düğümlere taint uygulandığından, yeniden başlatılan pod'lar zamanlanamaz ve
Pendingdurumuna geçer.kubectl --kubeconfig=<cluster1.config> rollout restart deploy web-demo -
Cluster1'deki pod'ların
Pendingdurumunda olduğunu doğrulayın:kubectl --kubeconfig=<cluster1.config> get podsPod'lar
Pendingolarak görünür. Bu beklenen bir durumdur; zamanlama iptal edicinin bunları algılayıp yeniden zamanlamasını bekleyin. Fleet, zamanlanamayan çoğaltmaları her 2 dakikada bir kontrol eder ve çoğaltmalar 30 saniyeden uzun süre zamanlanamaz durumda kaldığında yeniden zamanlamayı tetikler. -
Yaklaşık 3 dakika sonra zamanlama sonuçlarını kontrol edin:
kubectl amc get deploy web-demo -MBeklenen çıktı:
NAME CLUSTER READY UP-TO-DATE AVAILABLE AGE ADOPTION web-demo cxxxxxxxx2 5/5 5 5 11s YCluster1'deki tüm çoğaltmalar Cluster2'ye yeniden zamanlanmıştır.