Aracılığıyla paylaş


Azure Kubernetes Service'de (AKS) düğüm havuzlarını yeniden boyutlandırma

Artan sayıda dağıtıma uyum sağlamak veya daha büyük bir iş yükü çalıştırmak için sanal makinelerinizin (VM) boyutunu değiştirmek isteyebilirsiniz. AKS örneklerini doğrudan yeniden boyutlandırma, AKS'de Sanal Makine Ölçek Kümeleri kullanılırken , AKS için destek ilkelerinde açıklandığı gibi desteklenmez:

AKS aracı düğümleri Azure portalında normal Azure IaaS kaynakları olarak görünür. Ancak bu sanal makineler özel bir Azure kaynak grubuna dağıtılır (genellikle MC_* ile ön eklenmiştir). IaaS API'lerini veya kaynaklarını kullanarak bu düğümlerde doğrudan özelleştirme yapamazsınız. AKS API'si aracılığıyla yapılmayacak özel değişiklikler yükseltme, ölçeklendirme, güncelleştirme veya yeniden başlatma yoluyla kalıcı olmaz.

Bu makalede, istenen SKU boyutuna sahip yeni bir düğüm havuzu oluşturarak, mevcut düğümleri bağlayıp boşaltarak ve ardından mevcut düğüm havuzunu kaldırarak düğüm havuzunu yeniden boyutlandırmak için önerilen yöntemi öğreneceksiniz.

Önemli

Bu yöntem Sanal Makine Ölçek Kümeleri tabanlı AKS kümelerine özgüdür. Sanal Makineler tabanlı düğüm havuzlarını kullanırken, tek bir Azure CLI komutu kullanarak mevcut bir düğüm havuzundaki VM boyutlarını kolayca güncelleştirebilir ve aynı düğüm havuzunda birden çok VM boyutuna sahip olabilirsiniz. Daha fazla bilgi için Sanal Makineler düğüm havuzları belgelerine bakın.

İstenen SKU ile yeni bir düğüm havuzu oluşturma

Not

Her AKS kümesi en az bir düğüme sahip en az bir sistem düğümü havuzu içermelidir. Bu örnekte, yeniden boyutlandırmak istediğimiz sistem düğümü havuzunu değiştirmek için bir sistem düğümü havuzu eklemek amacıyla --mode ve System kullanırız. Düğüm havuzunun modunu istediğiniz zaman güncelleyebilirsiniz. Ayrıca, --mode'yi User olarak ayarlayarak bir kullanıcı düğümü havuzu ekleyebilirsiniz.

Yeniden boyutlandırırken kullanılabilirlik alanları gibi tüm iş yükü gereksinimlerini dikkate aldığınızdan ve VMSS düğüm havuzunuzu uygun şekilde yapılandırdığınızdan emin olun. Aşağıdaki komutu gereksinimlerinize en uygun şekilde değiştirmeniz gerekebilir. Yapılandırma seçeneklerinin tam listesi için başvuru sayfasına bakın az aks nodepool add .

  1. komutunu kullanarak az aks nodepool add yeni bir düğüm havuzu oluşturun. Bu örnekte, vm SKU'su olan mynodepool mevcut düğüm havuzunun Standard_DS3_v2yerine üç düğüm ve nodepool1 VM SKU'su içeren yeni bir düğüm havuzu Standard_DS2_v2oluşturacağız.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name mynodepool \
        --node-count 3 \
        --node-vm-size Standard_DS3_v2 \
        --mode System \
        --no-wait
    

    Yeni düğüm havuzunun oluşturulması birkaç dakika sürer.

  2. komutunu kullanarak yeni düğüm havuzunun kubectl get nodes durumunu alın.

    kubectl get nodes
    

    Çıkışınız, hem yeni düğüm havuzunu hem de mevcut düğüm mynodepoolhavuzunu nodepool1 gösteren aşağıdaki örnek çıkışa benzemelidir:

    NAME                                 STATUS   ROLES   AGE   VERSION
    aks-mynodepool-98765432-vmss000000   Ready    agent   23m   v1.21.9
    aks-mynodepool-98765432-vmss000001   Ready    agent   23m   v1.21.9
    aks-mynodepool-98765432-vmss000002   Ready    agent   23m   v1.21.9
    aks-nodepool1-12345678-vmss000000    Ready    agent   10d   v1.21.9
    aks-nodepool1-12345678-vmss000001    Ready    agent   10d   v1.21.9
    aks-nodepool1-12345678-vmss000002    Ready    agent   10d   v1.21.9
    

Mevcut düğümleri kordon altına alın

Kordonlama, belirtilen düğümleri zamanlanamaz olarak işaretler ve düğümlere daha fazla pod eklenmesini önler.

  1. komutunu kullanarak kubectl get nodes kablolamak istediğiniz düğümlerin adlarını alın.

    kubectl get nodes
    

    Çıkışınız, var olan düğüm havuzunda nodepool1 bulunan ve kablolamak istediğiniz düğümleri gösteren aşağıdaki örnek çıkışa benzemelidir:

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-12345678-vmss000000   Ready    agent   7d21h   v1.21.9
    aks-nodepool1-12345678-vmss000001   Ready    agent   7d21h   v1.21.9
    aks-nodepool1-12345678-vmss000002   Ready    agent   7d21h   v1.21.9
    
  2. Komutunu kullanarak kubectl cordon var olan düğümleri bağlayarak boşlukla ayrılmış bir listede istenen düğümleri belirtin. Örneğin:

    kubectl cordon aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002
    

    Çıkışınız, düğümlerin kordonlu olduğunu gösteren aşağıdaki örnek çıkışa benzemelidir:

    node/aks-nodepool1-12345678-vmss000000 cordoned
    node/aks-nodepool1-12345678-vmss000001 cordoned
    node/aks-nodepool1-12345678-vmss000002 cordoned
    

Mevcut düğümleri boşaltma

Önemli

Düğümleri başarıyla boşaltmak ve çalışan podları çıkarmak için, podDisruptionBudgets(PDB) her seferinde en az bir pod çoğaltması taşınmasına izin verin. Aksi takdirde, boşaltma/çıkarma işlemi başarısız olur. Bu kontrolü gerçekleştirmek için kubectl get pdb -A komutunu çalıştırabilir ve ALLOWED DISRUPTIONS'in en az 1 veya daha yüksek olduğunu doğrulayabilirsiniz.

Düğümleri boşalttığınızda, üzerinde çalışan podlar tahliye edilir ve diğer planlanabilir düğümlerde yeniden oluşturulur.

  1. Mevcut düğümleri, kubectl drain komutunu --ignore-daemonsets ve --delete-emptydir-data bayraklarıyla kullanarak boşaltın; istenen düğümleri boşlukla ayrılmış bir listede belirtin. Örneğin:

    Önemli

    AKS tarafından oluşturulan --delete-emptydir-data ve coredns podları çıkarmak için kullanmak metrics-server gerekir. Bu bayrağı kullanmıyorsanız bir hata alırsınız. Daha fazla bilgi için emptydir belgelerine bakın.

    kubectl drain aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002 --ignore-daemonsets --delete-emptydir-data
    
  2. Boşaltma işlemi tamamlandıktan sonra tüm podlar (daemon kümeleri tarafından denetlenen podlar hariç) yeni düğüm havuzunda çalıştırılmalıdır. Komutunu kullanarak kubectl get pods bunu doğrulayabilirsiniz.

    kubectl get pods -o wide -A
    

Pod çıkarma sorunlarını giderme

Düğümleri boşaltırken aşağıdaki hatayla karşılaşabilirsiniz:

Error when evicting pods/[podname] -n [namespace] (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.

Varsayılan olarak, kümenizde AKS tarafından yönetilen pod aksama bütçeleri (bütçeleri bulunur gibi coredns-pdb veya konnectivity-agent) vardır ve MinAvailable1'dir. Örneğin, çalışan iki coredns pod varsa, aynı anda yalnızca bir pod kesintiye uğrayabilir. Bunlardan biri yeniden oluşturulurken ve kullanılamaz durumdayken, pod kesintisi bütçesi nedeniyle diğer coredns pod'un çıkarılması mümkün değildir. Bu sorun, ilk coredns pod zamanlanıp çalıştırıldıktan sonra kendiliğinden çözülür, böylece ikinci podun düzgün bir şekilde çıkarılıp yeniden oluşturulması sağlanır.

İpucu

Daha akıcı bir süreç ve darboğazı önlemek için düğümleri birer birer boşaltmayı düşünün. Daha fazla bilgi için bkz.

Mevcut düğüm havuzunu kaldırma

Önemli

Düğüm havuzunu sildiğinizde AKS, kordon ve boşaltma gerçekleştirmez. Silmeyi planladığınız düğüm havuzunda şu anda çalışan podların yeniden zamanlanmalarından kaynaklanan kesintileri en aza indirmek için, silme işleminden önce düğüm havuzundaki tüm düğümlerde kordon ve boşaltma işlemleri gerçekleştirin.

  1. komutunu kullanarak az aks nodepool delete özgün düğüm havuzunu silin.

    az aks nodepool delete \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name nodepool1
    
  2. AKS kümenizin yalnızca yeni düğüm havuzuna sahip olduğunu ve uygulamaların ile podların düzgün çalıştığını kubectl get nodes komutunu kullanarak doğrulayın.

    kubectl get nodes
    

    Çıkışınız, yalnızca yeni düğüm havuzunu mynodepoolgösteren aşağıdaki örnek çıkışa benzemelidir:

    NAME                                 STATUS   ROLES   AGE   VERSION
    aks-mynodepool-98765432-vmss000000   Ready    agent   63m   v1.21.9
    aks-mynodepool-98765432-vmss000001   Ready    agent   63m   v1.21.9
    aks-mynodepool-98765432-vmss000002   Ready    agent   63m   v1.21.9
    

Sonraki adımlar

Bir düğüm havuzunu kordon oluşturup boşaltarak yeniden boyutlandırdıktan sonra birden çok düğüm havuzu kullanma hakkında daha fazla bilgi edinin.