Udostępnij za pośrednictwem


Rozwiązywanie problemów z błędami podczas wdrażania rozszerzeń klastra usługi AKS

W tym artykule omówiono sposób rozwiązywania problemów z błędami występującymi podczas wdrażania rozszerzeń klastra dla usługi Microsoft Azure Kubernetes Service (AKS).

Błędy tworzenia rozszerzeń

Błąd: Nie można uzyskać odpowiedzi od agenta w czasie

Ten błąd występuje, jeśli usługi platformy Azure nie otrzymają odpowiedzi od agenta rozszerzenia klastra. Taka sytuacja może wystąpić, ponieważ klaster usługi AKS nie może nawiązać połączenia z platformą Azure.

Przyczyna 1. Agent rozszerzenia klastra i zasobniki menedżera nie są inicjowane

Agent rozszerzenia klastra i menedżer są kluczowymi składnikami systemu, które są odpowiedzialne za zarządzanie cyklem życia aplikacji Kubernetes. Inicjowanie agenta rozszerzenia klastra i zasobników menedżera może zakończyć się niepowodzeniem z powodu następujących problemów:

  • Ograniczenia zasobów
  • Ograniczenia zasad
  • Defekty węzłów, takie jak NoSchedule
Rozwiązanie 1. Upewnij się, że agent rozszerzenia klastra i zasobniki menedżera działają prawidłowo

Aby rozwiązać ten problem, upewnij się, że agent rozszerzenia klastra i zasobniki menedżera są prawidłowo zaplanowane i można je uruchomić. Jeśli zasobniki są zablokowane w stanie nieprzeczytanym, sprawdź opis zasobnika, uruchamiając następujące kubectl describe pod polecenie, aby uzyskać więcej szczegółów na temat podstawowych problemów (na przykład defektów, które uniemożliwiają planowanie, niewystarczającą ilość pamięci lub ograniczenia zasad):

kubectl describe pod -n kube-system extension-operator-{id}

Oto przykład danych wyjściowych polecenia:

kube-system         extension-agent-55d4f4795f-sqx7q             2/2     Running   0          2d19h
kube-system         extension-operator-56c8d5f96c-nvt7x          2/2     Running   0          2d19h

W przypadku klastrów połączonych z usługą ARC uruchom następujące polecenie, aby sprawdzić opis zasobnika:

kubectl describe pod -n azure-arc extension-manager-{id}

Oto przykład danych wyjściowych polecenia:

NAMESPACE         NAME                                          READY   STATUS             RESTARTS        AGE
azure-arc         cluster-metadata-operator-744f8bfbd4-7pssr    0/2     ImagePullBackOff   0               6d19h
azure-arc         clusterconnect-agent-7557d99d5c-rtgqh         0/3     ImagePullBackOff   0               6d19h
azure-arc         clusteridentityoperator-9b8b88f97-nr8hf       0/2     ImagePullBackOff   0               6d19h
azure-arc         config-agent-6d5fd59b8b-khw2d                 0/2     ImagePullBackOff   0               6d19h
azure-arc         controller-manager-5bc97f7db6-rt2zs           0/2     ImagePullBackOff   0               6d19h
azure-arc         extension-events-collector-7596688867-sqzv2   0/2     ImagePullBackOff   0               6d19h
azure-arc         extension-manager-86bbb949-6s59q              0/3     ImagePullBackOff   0               6d19h
azure-arc         flux-logs-agent-5f55888db9-wnr4c              0/1     ImagePullBackOff   0               6d19h
azure-arc         kube-aad-proxy-646c475dcc-92b86               0/2     ImagePullBackOff   0               6d19h
azure-arc         logcollector-5cbc659bfb-9v96d                 0/1     ImagePullBackOff   0               6d19h
azure-arc         metrics-agent-5794866b46-j9949                0/2     ImagePullBackOff   0               6d19h
azure-arc         resource-sync-agent-6cf4cf7486-flgwc          0/2     ImagePullBackOff   0               6d19h

Gdy agent rozszerzenia klastra i zasobniki menedżera działają i są w dobrej kondycji, ustanawiają komunikację z usługami platformy Azure w celu zainstalowania aplikacji Kubernetes i zarządzania nimi.

Przyczyna 2: Problem dotyczy bloku ruchu wychodzącego lub zapory

Jeśli agent rozszerzenia klastra i zasobniki menedżera są w dobrej kondycji i nadal występuje błąd "Nie można uzyskać odpowiedzi od agenta w czasie", prawdopodobnie istnieje problem z blokiem ruchu wychodzącego lub zaporą. Ten problem może zablokować komunikację agenta rozszerzenia klastra i zasobników menedżera z platformą Azure.

Rozwiązanie 2. Upewnij się, że zostały spełnione wymagania wstępne dotyczące sieci

Aby rozwiązać ten problem, upewnij się, że zostały spełnione wymagania wstępne dotyczące sieci opisane w temacie Reguły sieci wychodzącej i nazwy FQDN dla klastrów usługi Azure Kubernetes Service (AKS).

Przyczyna 3: Ruch nie jest autoryzowany

Agent rozszerzenia bezskutecznie próbuje wywołać <region>.dp.kubernetesconfiguration.azure.com punkty końcowe usługi płaszczyzny danych. Ten błąd generuje wpis "Kod błędu: 403, Komunikat Ten ruch nie jest autoryzowany" w dziennikach zasobnika agenta rozszerzenia.

kubectl logs -n kube-system extension-agent-<pod-guid>
{  "Message": "2024/02/07 06:04:43 \"Errorcode: 403, Message This traffic is not authorized., Target /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/provider/managedclusters/clusters/<cluster-name>/configurations/getPendingConfigs\"",  "LogType": "ConfigAgentTrace",  "LogLevel": "Information",  "Environment": "prod",  "Role": "ClusterConfigAgent",  "Location": "<region>,  "ArmId": "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.ContainerService/managedclusters/<cluster-name>",  "CorrelationId": "",  "AgentName": "ConfigAgent",  "AgentVersion": "1.14.5",  "AgentTimestamp": "2024/02/07 06:04:43.672"  }
{  "Message": "2024/02/07 06:04:43 Failed to GET configurations with err : {\u003cnil\u003e}",  "LogType": "ConfigAgentTrace",  "LogLevel": "Information",  "Environment": "prod",  "Role": "ClusterConfigAgent",  "Location": "<region>",  "ArmId": "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.ContainerService/managedclusters/<cluster-name>",  "CorrelationId": "",  "AgentName": "ConfigAgent",  "AgentVersion": "1.14.5",  "AgentTimestamp": "2024/02/07 06:04:43.672"  }

Ten błąd występuje, jeśli wstępnie istniejącego elementu PrivateLinkScope istnieje na płaszczyźnie danych rozszerzenia dla platformy Kubernetes z włączoną usługą Azure Arc, a sieć wirtualna (lub prywatny serwer DNS) jest współużytkowana między platformą Kubernetes z włączoną usługą Azure Arc a klastrem zarządzanym przez usługę AKS. Ta konfiguracja sieci powoduje, że ruch wychodzący usługi AKS z płaszczyzny danych rozszerzenia będzie również kierowany przez ten sam prywatny adres IP zamiast za pośrednictwem publicznego adresu IP.

Uruchom następujące polecenie nslookup w klastrze usługi AKS, aby pobrać konkretny prywatny adres IP rozpoznawany przez punkt końcowy płaszczyzny danych:

PS D:\> kubectl exec -it -n kube-system extension-agent-<pod-guid> -- nslookup  <region>.dp.kubernetesconfiguration.azure.com
Non-authoritative answer:
<region>.dp.kubernetesconfiguration.azure.com        canonical name = <region>.privatelink.dp.kubernetesconfiguration.azure.com
Name:   <region>.privatelink.dp.kubernetesconfiguration.azure.com
Address: 10.224.1.184

Podczas wyszukiwania prywatnego adresu IP w witrynie Azure Portal wyniki wyszukiwania wskazują dokładny zasób: sieć wirtualna, prywatną strefę DNS, prywatny serwer DNS itd. Ten zasób ma prywatny punkt końcowy skonfigurowany dla płaszczyzny danych rozszerzenia dla platformy Kubernetes z obsługą usługi Azure Arc.

Aby rozwiązać ten problem, zalecamy utworzenie oddzielnych sieci wirtualnych dla obliczeń platformy Kubernetes z obsługą usługi Azure Arc i usługi AKS.

Rozwiązanie 3.2: Tworzenie przesłonięcia usługi CoreDNS

Jeśli zalecane rozwiązanie nie jest możliwe w Twojej sytuacji, utwórz zastąpienie CoreDNS dla punktu końcowego płaszczyzny danych rozszerzenia, aby przejść przez sieć publiczną. Aby uzyskać więcej informacji na temat dostosowywania usługi CoreDNS, zobacz sekcję "Wtyczka hostów" "Dostosowywanie sieci CoreDNS za pomocą usługi Azure Kubernetes Service".

Aby utworzyć zastąpienie usługi CoreDNS, wykonaj następujące kroki:

  1. Znajdź publiczny adres IP punktu końcowego płaszczyzny danych rozszerzenia, uruchamiając nslookup polecenie . Upewnij się, że region (na przykład eastus2euap) został zmieniony na podstawie lokalizacji klastra usługi AKS:

    nslookup <region>.dp.kubernetesconfiguration.azure.com
    Non-authoritative answer:
    Name:    clusterconfig<region>.<region>.cloudapp.azure.com
    Address:  20.39.12.229
    Aliases:  <region>.dp.kubernetesconfiguration.azure.com
             <region>.privatelink.dp.kubernetesconfiguration.azure.com
             <region>.dp.kubernetesconfiguration.trafficmanager.net
    
  2. Utwórz kopię zapasową istniejącej konfiguracji coreDNS:

    kubectl get configmap -n kube-system coredns-custom -o yaml > coredns.backup.yaml
    
  3. Zastąp mapowanie regionalnego punktu końcowego płaszczyzny danych (na przykład eastus2euap) na publiczny adres IP. W tym celu utwórz plik YAML o nazwie corednsms.yaml, a następnie skopiuj następującą przykładową konfigurację do nowego pliku. (Upewnij się, że adres i nazwa hosta są aktualizowane przy użyciu wartości środowiska).

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns-custom      # This is the name of the configuration map that you can overwrite with your changes.
      namespace: kube-system
    data:
      extensionsdp.override: |  # You can select any name here, but it must have the .override file name extension.
        hosts {
          20.39.12.229 <region>.dp.kubernetesconfiguration.azure.com
          fallthrough
        }
    
  4. Aby utworzyć ConfigMap, uruchom kubectl apply polecenie , określając nazwę pliku manifestu YAML:

    kubectl apply -f corednsms.yaml
    
  5. Aby ponownie załadować narzędzie ConfigMap i włączyć harmonogram Kubernetes w celu ponownego uruchomienia usługi CoreDNS bez przestoju, uruchom polecenie ponownego uruchamiania wdrożenia kubectl:

    kubectl -n kube-system rollout restart deployment coredns
    
  6. nslookup Uruchom ponownie polecenie, aby upewnić się, że punkt końcowy płaszczyzny danych jest rozpoznawany jako podany publiczny adres IP:

    kubectl exec -it -n kube-system extension-agent-55d4f4795f-nld9q -- nslookup  [region].dp.kubernetesconfiguration.azure.com
    Name:   <region>.dp.kubernetesconfiguration.azure.com
    Address: 20.39.12.229
    

Dzienniki zasobników agenta rozszerzenia nie powinny już rejestrować wpisów błędów "Kod błędu: 403, komunikat Ten ruch nie jest autoryzowany". Zamiast tego dzienniki powinny zawierać kody odpowiedzi "200".

kubectl logs -n kube-system extension-agent-{id} 
{  "Message": "GET configurations returned response code {200}",  "LogType": "ConfigAgentTrace",  "LogLevel": "Information",  "Environment": "prod",  "Role": "ClusterConfigAgent",  "Location": "<region>",  "ArmId": "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.ContainerService/managedclusters/<cluster-name>",  "CorrelationId": "",  "AgentName": "ConfigAgent",  "AgentVersion": "1.14.5"  }

Błąd: Zasobniki rozszerzeń nie mogą być zaplanowane, jeśli wszystkie pule węzłów w klastrze są skażone "CriticalAddonsOnly"

W przypadku wystąpienia tego błędu w dzienniku agenta rozszerzenia jest rejestrowany następujący wpis:

Błąd zasobnika rozszerzenia: dostępne są węzły 0/2: 2 węzły miały nieopowiedziane właściwości {CriticalAddonsOnly: true}. Wywłaszczanie: dostępne są węzły 0/2: 2 Wywłaszczanie nie jest przydatne do planowania.

Przyczyna

Ten błąd występuje podczas próby włączenia rozszerzeń (takich jak rozproszone środowisko uruchomieniowe aplikacji (DAPR) w klastrze usługi AKS, który ma CriticalAddonsOnly skażone pule węzłów. W takiej sytuacji zasobniki rozszerzeń nie są zaplanowane w żadnym węźle, ponieważ nie ma tolerancji dla tych defektów.

Aby wyświetlić sytuację błędu, sprawdź zasobniki rozszerzeń, aby sprawdzić, czy są one zablokowane w stanie oczekiwania:

kubectl get po -n {namespace-name} -l app.kubernetes.io/name={name}

NAME                                   READY   STATUS    RESTARTS   AGE
{podname}                              0/2     Pending   0          2d6h

Opisz zasobniki, aby zobaczyć, że nie można ich zaplanować z powodu nieobsługiwalnego defektu:

kubectl describe po -n {namespace-name} {podname}

Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  18s   default-scheduler  0/2 nodes are available: 2 node(s) had untolerated taint {CriticalAddonsOnly: true}. preemption: 0/2 nodes are available: 2 Preemption is not helpful for scheduling.

Uwaga 16.

  • Zalecamy, aby nie instalować rozszerzeń w CriticalAddOnsOnly niezatłoczonych pulach węzłów, chyba że jest to wymagane w przypadku obciążeń aplikacji.

  • Zalecamy, aby nie używać defektu CriticalAddOnsOnly w klastrach puli z jednym węzłem. Jeśli używasz tego defektu w klastrze, który ma tylko jedną pulę węzłów, nie można zaplanować zasobników aplikacji w klastrze. Upewnij się, że co najmniej jedna pula węzłów w klastrze nie ma tego defektu. Aby uzyskać więcej informacji na temat sposobu CriticalAddonsOnly użycia adnotacji, zobacz Zarządzanie pulami węzłów systemowych w usłudze Azure Kubernetes Service (AKS).

Rozwiązanie 1. Dodawanie puli węzłów do klastra

Aby rozwiązać ten problem, dodaj jeszcze jedną pulę węzłów, która nie ma defektu CriticalAddonsOnly . Ta akcja powoduje zaplanowanie zasobników rozszerzeń w nowej puli węzłów.

Rozwiązanie 2. Usuwanie defektu "CriticalAddonsOnly"

Jeśli jest to możliwe i praktyczne, możesz usunąć CriticalAddonsOnly defekt, aby zainstalować rozszerzenie w klastrze.

Błędy programu Helm

Mogą wystąpić dowolne z następujących błędów związanych z programem Helm:

Błąd: Przekroczono limit czasu oczekiwania na gotowość zasobów

Instalacja aplikacji Kubernetes kończy się niepowodzeniem i wyświetla następujące komunikaty o błędach:

zadanie nie powiodło się: BackoffLimitExceeded

Przekroczono limit czasu oczekiwania na powrót zasobu do stanu gotowego/ukończonego.

Przyczyna

Ten problem ma następujące typowe przyczyny:

  • Ograniczenia zasobów: Niewystarczająca ilość pamięci lub zasobów procesora CPU w klastrze może uniemożliwić pomyślne zainicjowanie zasobników, zadań lub innych zasobów Kubernetes. W końcu taka sytuacja powoduje przekroczenie limitu czasu instalacji. Ograniczenia zasad lub defekty węzłów (takie jak NoSchedule) mogą również blokować inicjowanie zasobów.

  • Niezgodność architektury: próba zaplanowana aplikacji opartej na systemie Linux na węźle opartym na systemie Windows (lub odwrotnie) może spowodować błędy inicjowania zasobów Kubernetes.

  • Nieprawidłowe ustawienia konfiguracji: Nieprawidłowe ustawienia konfiguracji mogą uniemożliwić uruchamianie zasobników.

Rozwiązanie

Aby rozwiązać ten problem, wykonaj następujące kroki:

  1. Sprawdź zasoby: upewnij się, że klaster Kubernetes ma wystarczające zasoby i że planowanie zasobników jest dozwolone w węzłach (należy rozważyć defekty). Sprawdź, czy zasoby pamięci i procesora CPU spełniają wymagania.

  2. Sprawdzanie zdarzeń: sprawdź zdarzenia w przestrzeni nazw kubernetes, aby zidentyfikować potencjalne problemy, które mogą uniemożliwić zasobnikom, zadaniam lub innym zasobom Kubernetes osiągnięcie stanu gotowości.

  3. Sprawdź wykresy i konfiguracje programu Helm: wiele aplikacji Kubernetes używa wykresów Helm do wdrażania zasobów w klastrze. Niektóre aplikacje mogą wymagać danych wejściowych użytkownika za pośrednictwem ustawień konfiguracji. Upewnij się, że wszystkie podane wartości konfiguracji są dokładne i spełniają wymagania instalacji.

Błąd: Nie można pobrać wykresu Helm z adresu URL repozytorium

Ten błąd jest spowodowany problemami z łącznością między klastrem a zaporą oprócz problemów z blokowaniem ruchu wychodzącego. Aby rozwiązać ten problem, zobacz Reguły sieci wychodzącej i nazwy FQDN dla klastrów usługi Azure Kubernetes Service (AKS).

Błąd: renderowanie wykresu helm nie powiodło się z podanymi wartościami

Ten błąd występuje, jeśli aplikacje Kubernetes korzystają z wykresów Helm w celu wdrożenia zasobów w klastrze Kubernetes. Te aplikacje mogą wymagać danych wejściowych użytkownika udostępnianych za pośrednictwem ustawień konfiguracji, które są przekazywane jako wartości programu Helm podczas instalacji. Jeśli brakuje żadnego z tych kluczowych ustawień konfiguracji lub są one nieprawidłowe, wykres Helm może nie być renderowany.

Aby rozwiązać ten problem, sprawdź dokumentację rozszerzenia lub aplikacji, aby określić, czy pominięto wszystkie obowiązkowe wartości, czy podano nieprawidłowe wartości podczas instalacji aplikacji. Te wytyczne mogą pomóc w rozwiązaniu problemów z renderowaniem wykresu programu Helm, które są spowodowane brakującymi lub niedokładnymi wartościami konfiguracji.

Błąd: Zasób już istnieje w klastrze

Ten błąd występuje, jeśli istnieje konflikt między zasobami Kubernetes w klastrze i zasobami Kubernetes, które aplikacja próbuje zainstalować. Komunikat o błędzie zwykle określa nazwę zasobu powodującego konflikt.

Jeśli zasób powodujący konflikt jest niezbędny i nie można go zamienić, być może nie będzie można zainstalować aplikacji. Jeśli zasób nie jest krytyczny i można go usunąć, usuń zasób powodujący konflikt, a następnie spróbuj ponownie zainstalować.

Błąd: Operacja jest już w toku dla programu Helm

Ten błąd występuje, jeśli operacja jest już w toku dla określonej wersji. Aby rozwiązać ten problem, poczekaj 10 minut, a następnie spróbuj ponownie wykonać operację.

Skontaktuj się z nami, aby uzyskać pomoc

Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii na temat platformy Azure.