Aracılığıyla paylaş


CSE hatalarının neden olduğu düğüm hazır değil hatalarıyla ilgili sorunları giderme

Bu makale, özel betik uzantısı (CSE) hataları nedeniyle bir Microsoft Azure Kubernetes Service (AKS) kümesinin Succeeded durumunda olmadığı ve bir AKS düğümünün düğüm havuzu içinde hazır olmadığı senaryolarda sorun gidermenize yardımcı olur.

Önkoşullar

Belirtiler

CSE hataları nedeniyle, aks kümesi düğümü düğüm havuzu içinde hazır değildir ve AKS kümesi durumunda Succeeded değildir.

Neden

Düğüm uzantısı dağıtımı başarısız olur ve kubelet'i ve diğer bileşenleri sağladığınızda birden fazla hata kodu döndürür. Hataların en yaygın nedeni budur. Kubelet'i sağladığınızda düğüm uzantısı dağıtımının başarısız olduğunu doğrulamak için şu adımları izleyin:

  1. Kümedeki geçerli hatayı daha iyi anlamak için az aks show ve az resource update komutlarını çalıştırarak hata ayıklamayı ayarlayın:

    Ortam değişkenlerinizi ayarlayın ve kümenin durumunu görüntülemek ve hata ayıklama bilgilerini görüntülemek için komutları çalıştırın.

    export RG_NAME="my-aks-rg"
    export CLUSTER_NAME="myakscluster"
    clusterResourceId=$(az aks show \
        --resource-group $RG_NAME --name $CLUSTER_NAME --output tsv --query id)
    az resource update --debug --verbose --ids $clusterResourceId
    

    Sonuçlar:

    {
      "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-aks-rg-xxx/providers/Microsoft.ContainerService/managedClusters/myaksclusterxxx",
      "name": "myaksclusterxxx",
      "type": "Microsoft.ContainerService/managedClusters",
      "location": "eastus2",
      "tags": null,
      "properties": {
        ...
      }
    }
    
  2. Hata ayıklama çıkışını ve komuttan az resource update aldığınız hata iletilerini GitHub'daki CSE yardımcı yürütülebilir dosyasındaki hata listesinden denetleyin.

Hatalardan herhangi biri kubelet'in CSE dağıtımını içeriyorsa, burada açıklanan senaryonun Düğüm Hazır Değil hatasının nedeni olduğunu doğruladınız.

Genel olarak çıkış kodları, hataya neden olan sorunu tanımlar. Örneğin, "API sunucusuyla iletişim kurulamıyor" veya "İnternet'e bağlanılamıyor" gibi iletiler görürsünüz. Ya da çıkış kodları API ağ zaman aşımları veya değiştirilmesi gereken bir düğüm hatası konusunda sizi uyarabilir.

Çözüm 1: Özel DNS sunucunuzun doğru yapılandırıldığından emin olun

Ad çözümlemeyi doğru şekilde gerçekleştirebilmesi için özel Etki Alanı Adı Sistemi (DNS) sunucunuzu ayarlayın. Aşağıdaki gereksinimleri karşılamak için sunucuyu yapılandırın:

  • Özel DNS sunucuları kullanıyorsanız sunucuların iyi durumda olduğundan ve ağ üzerinden erişilebilir olduğundan emin olun.

  • Özel DNS sunucularının Azure DNS IP adresine (veya bu adrese ileticiye) gerekli koşullu ileticilere sahip olduğundan emin olun.

  • Özel AKS DNS bölgenizin, Azure'da barındırılıyorsa özel DNS sanal ağlarınıza bağlı olduğundan emin olun.

  • Azure DNS IP adresini özel DNS sunucunuzun IP adresleriyle birlikte kullanmayın. Bu işlem önerilmez.

  • DNS ayarlarında DNS sunucusu yerine IP adreslerini kullanmaktan kaçının. Bir Sanal Makine Ölçek Kümesi veya kullanılabilirlik kümesinde bu durumu denetlemek için Azure CLI komutlarını kullanabilirsiniz.

    • Sanal Makine Ölçek Kümesi düğümleri için az vmss run-command invoke komutunu kullanın:

      Önemli: VM ölçek kümesini belirtmeniz --instance-id gerekir. Burada, AKS düğümü kaynak grubundaki geçerli bir örnek kimliği (örneğin, 0) ve büyük olasılıkla bir VMSS için sorgulamayı gösteriyoruz. Değerleri ortamınızla eşleşecek şekilde uygun şekilde güncelleştirin.

      export NODE_RESOURCE_GROUP=$(az aks show --resource-group $RG_NAME --name $CLUSTER_NAME --query nodeResourceGroup -o tsv)
      export VMSS_NAME=$(az vmss list --resource-group $NODE_RESOURCE_GROUP --query "[0].name" -o tsv)
      export DNS_IP_ADDRESS="10.0.0.10"
      export INSTANCE_ID=$(az vmss list-instances --resource-group $NODE_RESOURCE_GROUP --name $VMSS_NAME --query "[0].instanceId" -o tsv)
      export API_FQDN=$(az aks show --resource-group $RG_NAME --name $CLUSTER_NAME --query fqdn -o tsv)
      
      az vmss run-command invoke \
          --resource-group $NODE_RESOURCE_GROUP \
          --name $VMSS_NAME \
          --instance-id $INSTANCE_ID \
          --command-id RunShellScript \
          --output tsv \
          --query "value[0].message" \
          --scripts "telnet $DNS_IP_ADDRESS 53"
      az vmss run-command invoke \
          --resource-group $NODE_RESOURCE_GROUP \
          --name $VMSS_NAME \
          --instance-id $INSTANCE_ID \
          --command-id RunShellScript \
          --output tsv \
          --query "value[0].message" \
          --scripts "nslookup $API_FQDN $DNS_IP_ADDRESS"
      
    • VM kullanılabilirlik kümesi düğümleri için az vm run-command invoke komutunu kullanın:

      Önemli: Kaynak grubunuzdaki --name kullanılabilirlik kümesinde geçerli bir VM'nin değerini belirtmeniz gerekir. Ağ denetimlerini çalıştırmaya yönelik bir şablon aşağıdadır.

      az vm run-command invoke \
          --resource-group $RG_NAME \
          --name $AVAILABILITY_SET_VM \
          --command-id RunShellScript \
          --output tsv \
          --query "value[0].message" \
          --scripts "telnet $DNS_IP_ADDRESS 53"
      az vm run-command invoke \
          --resource-group $RG_NAME \
          --name $AVAILABILITY_SET_VM \
          --command-id RunShellScript \
          --output tsv \
          --query "value[0].message" \
          --scripts "nslookup $API_FQDN $DNS_IP_ADDRESS"
      

Daha fazla bilgi için bkz . Azure sanal ağlarındaki kaynaklar için ad çözümlemesi ve özel DNS ile Merkez-uç.

Çözüm 2: API ağ zaman aşımlarını düzeltme

API sunucusuna ulaşılabildiğinden ve gecikme yaşanmayacağından emin olun. Bunun için aşağıdaki adımları izleyin:

  • Atanan ağ güvenlik grubunun (NSG) API sunucusuna giden 443 çıkış trafiği bağlantı noktasını engelleyip engellemediğini görmek için AKS alt ağını denetleyin.

  • Düğümde trafiği engelleyen başka NSG olup olmadığını görmek için düğümün kendisini denetleyin.

  • Atanan yönlendirme tablosu için AKS alt ağını denetleyin. Yönlendirme tablosunda ağ sanal gereci (NVA) veya güvenlik duvarı varsa 443 bağlantı noktasının çıkış trafiği için uygun olduğundan emin olun. Daha fazla bilgi için bkz. AKS'de küme düğümleri için çıkış trafiğini denetleme.

  • DNS adları başarıyla çözümlerse ve API ulaşılabilir durumdaysa ancak CSE düğümü API zaman aşımı nedeniyle başarısız olduysa aşağıdaki tabloda gösterildiği gibi uygun eylemi gerçekleştirin.

    Tür ayarlama Eylem
    VM kullanılabilirlik kümesi kubectl delete node komutunu kullanarak düğümü Azure portalından ve AKS API'sinden silin ve kümenin ölçeğini yeniden genişletin.
    Sanal Makine Ölçek Kümesi Düğümü Azure portalından yeniden oluşturun veya düğümü silin ve kümenin ölçeğini yeniden genişletin. Belirli bir düğümü silmek için az aks nodepool delete-machines komutunu kullanın. İlk olarak kabloyu ve boşaltmayı ve ardından düğümü siler.
  • İstekler AKS API sunucusu tarafından kısıtlanıyorsa daha yüksek bir hizmet katmanına yükseltin. Daha fazla bilgi için bkz . AKS için fiyatlandırma katmanları.

Daha Fazla Bilgi