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ü bir 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:

    clusterResourceId=$(az aks show \
        --resource-group <resource-group-name> --name <cluster-name> --output tsv --query id)
    az resource update --debug --verbose --ids $clusterResourceId
    
  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 listesiyle karşılaştırın.

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 belirli 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. Sunucuyu aşağıdaki gereksinimleri karşılayacak şekilde 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 kullanmayın. Bunu yapmanız önerilmez.

  • DNS ayarlarında DNS sunucusu yerine IP adreslerini kullanmaktan kaçının. Bir sanal makine (VM) ölçek kümesinde veya kullanılabilirlik kümesinde bu durumu denetlemek için Azure CLI komutlarını kullanabilirsiniz.

    • VM ölçek kümesi düğümleri için az vmss run-command invoke komutunu kullanın:

      az vmss run-command invoke \
          --resource-group <resource-group-name> \
          --name <vm-scale-set-name> \
          --command-id RunShellScript \
          --instance-id 0 \
          --output tsv \
          --query "value[0].message" \
          --scripts "telnet <dns-ip-address> 53"
      az vmss run-command invoke \
          --resource-group <resource-group-name> \
          --name <vm-scale-set-name> \
          --instance-id 0 \
          --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:

      az vm run-command invoke \
          --resource-group <resource-group-name> \
          --name <vm-availability-set-name> \
          --command-id RunShellScript \
          --output tsv \
          --query "value[0].message" \
          --scripts "telnet <dns-ip-address> 53"
      az vm run-command invoke \
          --resource-group <resource-group-name> \
          --name <vm-availability-set-name> \
          --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 ve uç.

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

API sunucusuna ulaşılabildiğinden ve gecikmelere maruz olmadığından emin olun. Bunu yapmak için şu adımları uygulayın:

  • Atanan ağ güvenlik grubunun (NSG) API sunucusuna 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 bir NSG olup olmadığını görmek için düğümün kendisini denetleyin.

  • Atanmış herhangi bir yol tablosu için AKS alt aasını denetleyin. Yol tablosunda ağ sanal gereci (NVA) veya güvenlik duvarı varsa çıkış trafiği için 443 numaralı bağlantı noktasının kullanılabilir 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ümlediyse ve API'ye ulaşılabilir durumdaysa ancak api zaman aşımı nedeniyle düğüm CSE 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 ve AKS API'sinden silin ve kümenin ölçeğini yeniden genişletin.
    VM ölçek kümesi Düğümü yeniden oluşturun veya düğümü silin ve kümenin ölçeğini yeniden genişletin.
  • İ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 Çalışma Süresi SLA'sı.

Daha fazla bilgi