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.

VMSS düğüm havuzunu yerinde yeniden boyutlandırma (önizleme)

Önemli

AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "mevcut olduğu şekilde" sağlanmakta olup, hizmet seviyesi anlaşmalarına ve sınırlı garantilere dahil edilmemektedir. AKS önizlemeleri, müşteri desteği ekibi tarafından maksimum çaba gösterilerek kısmen ele alınmaktadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:

Artık az aks nodepool update --node-vm-size <new-size> kullanarak mevcut VMSS tabanlı düğüm havuzunun VM boyutunu (SKU) tek bir komutla yeniden boyutlandırabilirsiniz. Bu güncelleştirmeyi tetiklediğinizde AKS kaynak sağlayıcısı şu şekilde sıralı yükseltme gerçekleştirir:

  1. Hedef VM boyutunda yeni düğümler ekleniyor.
  2. Eski düğümlerin kordon altına alınması ve tahliye edilmesi.
  3. Eski düğümler siliniyor.

Bu işlem, makalenin geri kalanında açıklanan manuel create/cordon/drain/delete iş akışını gerekli kılmaz.

Yeniden boyutlandırma özelliğinin kullanıma sunulması nasıl çalışır?

Yeniden boyutlandırma dağıtımı, düğüm görüntüsü yükseltmesi ve Kubernetes sürüm yükseltmesi ile aynı sıralı yükseltme altyapısını kullandığından, düğüm havuzunda önceden yapılandırılmış olan yükseltmeyle ilgili aşağıdaki ayarlara uyar. Özellikle, yeniden boyutlandırma şunlara uyar:

  • Maksimum dalgalanma (--max-surge): Dağıtım sırasında hedef VM boyutuna sahip ek düğüm sayısını denetler. Daha yüksek bir değer havuzu daha hızlı yeniden boyutlandırır ancak daha fazla işlem ve IP kotası tüketir; daha düşük bir değer daha yavaştır ancak daha az kesintiye neden olur. AKS varsayılanıdır 1ve 33% üretim düğümü havuzları için önerilir.
  • Düğüm boşaltma zaman aşımı (--drain-timeout): AKS'nin eski düğümlerin her birinde podun düğümden çıkarılması için, düğümü zorla silmeden önce ne kadar süre beklediği. Varsayılan değer 30 dakikadır. Bunu, iş yüklerinin güvenli bir şekilde tahliye edilebilmesini sağlamak için uygun PodDisruptionBudgets ile birleştirin.
  • Düğüm bekletme süresi (--node-soak-duration): Yeni bir düğüm Hazır duruma geldikten sonra AKS’nin bir sonraki gruba geçmeden önce ne kadar bekleyeceği. Dağıtıma devam etmeden önce iş yüklerinin yeni VM boyutu üzerinde dengelenmesine izin vermek için kullanışlıdır.

Yükseltme işlem hattını yeniden yeniden boyutlandırdığından, aynı önkoşullar geçerlidir: Aboneliğinizin aşırı gerilim düğümleri için yeterli hedef VM boyutu değiştirme kapasitesine ve kullanılabilir alt ağ IP'lerine sahip olduğundan ve PodDisruptionBudgets'inizin aynı anda en az bir çoğaltmanın çıkarılmasına izin ettiğinden emin olun; aksi takdirde boşaltma sırasında yeniden boyutlandırma engellenebilir. Uçtan uca öneriler için bkz. AKS düğüm havuzu yükseltmeleri için en iyi yöntemler.

Prerequisites

Düğüm havuzunu yeniden boyutlandırın

Mevcut VMSS tabanlı bir düğüm havuzunun VM boyutunu değiştirmek için --node-vm-size parametresiyle az aks nodepool update komutunu kullanın:

az aks nodepool update \
    --resource-group MyResourceGroup \
    --cluster-name MyManagedCluster \
    --name nodepool1 \
    --node-vm-size Standard_D4s_v3

Doğrulama ve desteklenmeyen birleşimler

AKS kaynak sağlayıcısı yeniden boyutlandırma isteğini doğrular ve uyumsuz VM boyutu değişikliklerini engeller. Yerinde VMSS yeniden boyutlandırma işleminin bir parçası olarak aşağıdaki değişiklikler desteklenmez :

  • Disk denetleyicisi türünü değiştirme (örneğin, SCSI'yi NVMe olarak).
  • CPU mimarisini değiştirme (örneğin, x64 ile ARM64).
  • Gizli bilgi işlem desteğini değiştirme (örneğin, SNP'yi etkinleştirme veya devre dışı bırakma).
  • Hipervizör neslini değiştirmek (örneğin, V1’den V2’ye).
  • Yeniden boyutlandırmayı Kubernetes sürüm yükseltmesi veya aynı işlemdeki düğüm sayısı değişikliğiyle birleştirme.

Hedef VM boyutunuz yukarıdaki değişikliklerden herhangi birini gerektiriyorsa, bunun yerine aşağıdaki bölümlerde açıklanan el ile cordon-and-drain iş akışını kullanın.

Not

Yerinde yeniden boyutlandırma, eski düğümler boşaltılmadan önce hedef VM boyutuna sahip yeni düğümleri temin etmek için ek kapasite gerektirir. Düğüm havuzu --max-surge 0 ile yapılandırılmışsa (yani --max-unavailable etkinse), yeniden boyutlandırma isteği 400 Bad Request hatasıyla reddedilir. Devam etmek için, yeniden boyutlandırma sırasında --max-surge değerini en az 1 olarak ayarlayın.

az aks nodepool update \
    --resource-group MyResourceGroup \
    --cluster-name MyManagedCluster \
    --name nodepool1 \
    --node-vm-size Standard_D4s_v3 \
    --max-surge 33%

ve isteğe bağlı olarak yeniden boyutlandırma tamamlandıktan sonra özgün --max-surge ve --max-unavailable değerlerinizi geri yükleyin.

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

Not

Her AKS kümesinde, en az bir düğüme sahip en az bir sistem düğüm havuzu bulunmalıdır. 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 zamanlama dışı olarak işaretler ve bu 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 pod’ları tahliye etmek için, tüm PodDisruptionBudget’ların (PDB’lerin) aynı anda en az bir pod kopyasının taşınabilmesine izin verdiğinden emin olun. 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 coredns ve metrics-server podlarını tahliye etmek için --delete-emptydir-data kullanılması 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.