Dela via


Felsöka fel vid distribution av AKS-klustertillägg

I den här artikeln beskrivs hur du felsöker fel som uppstår när du distribuerar klustertillägg för Microsoft Azure Kubernetes Service (AKS).

Fel vid skapande av tillägg

Fel: Det går inte att hämta ett svar från agenten i tid

Det här felet uppstår om Azure-tjänster inte får något svar från klustertilläggsagenten. Den här situationen kan inträffa eftersom AKS-klustret inte kan upprätta en anslutning till Azure.

Orsak 1: Klustertilläggsagenten och hanteringspoddarna initieras inte

Klustertilläggsagenten och chefen är viktiga systemkomponenter som ansvarar för att hantera livscykeln för Kubernetes-program. Initieringen av klustertilläggsagenten och hanteringspoddar kan misslyckas på grund av följande problem:

  • Resursbegränsningar
  • Principbegränsningar
  • Nodtaints, till exempel NoSchedule
Lösning 1: Kontrollera att klustertilläggsagenten och hanteringspoddarna fungerar korrekt

Lös problemet genom att se till att klustertilläggsagenten och hanteringspoddarna är korrekt schemalagda och kan starta. Om poddarna har fastnat i ett oläst tillstånd kontrollerar du poddbeskrivningen genom att köra följande kubectl describe pod kommando för att få mer information om de underliggande problemen (till exempel taints som förhindrar schemaläggning, otillräckligt minne eller principbegränsningar):

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

Här är ett kommandoutdataexempel:

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

För ARC-anslutna kluster kör du följande kommando för att kontrollera poddbeskrivningen:

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

Här är ett kommandoutdataexempel:

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

När klustertilläggsagenten och hanteringspoddarna är driftsdugliga och felfria upprättar de kommunikation med Azure-tjänster för att installera och hantera Kubernetes-program.

Orsak 2: Ett problem påverkar utgående block eller brandvägg

Om klustertilläggsagenten och hanteringspoddarna är felfria och du fortfarande stöter på felet "Det går inte att få ett svar från agenten i tid" finns förmodligen ett utgående block- eller brandväggsproblem. Det här problemet kan blockera klustertilläggsagenten och hanteringspoddar från att kommunicera med Azure.

Lösning 2: Kontrollera att nätverkskraven uppfylls

Lös problemet genom att se till att du följer de nätverkskrav som beskrivs i utgående nätverk och FQDN-regler för AKS-kluster (Azure Kubernetes Service).

Orsak 3: Trafiken är inte auktoriserad

Tilläggsagenten försöker utan framgång anropa tjänstslutpunkter för <region>.dp.kubernetesconfiguration.azure.com dataplanet. Det här felet genererar posten "Errorcode: 403, Message This traffic is not authorized" i poddloggarna för tilläggsagenten.

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"  }

Det här felet uppstår om det finns ett befintligt PrivateLinkScope i ett tilläggs dataplan för Azure Arc-aktiverade Kubernetes och det virtuella nätverket (eller den privata DNS-servern) delas mellan Azure Arc-aktiverade Kubernetes och det AKS-hanterade klustret. Den här nätverkskonfigurationen gör att AKS utgående trafik från tilläggsdataplanet även dirigeras via samma privata IP-adress i stället för via en offentlig IP-adress.

Kör följande nslookup-kommando i AKS-klustret för att hämta den specifika privata IP-adress som dataplanets slutpunkt matchar:

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

När du söker efter den privata IP-adressen i Azure Portal pekar sökresultaten på den exakta resursen: virtuellt nätverk, privat DNS-zon, privat DNS-server och så vidare. Den här resursen har en privat slutpunkt som har konfigurerats för tilläggsdataplanet för Azure Arc-aktiverade Kubernetes.

För att lösa det här problemet rekommenderar vi att du skapar separata virtuella nätverk för Azure Arc-aktiverade Kubernetes- och AKS-beräkningar.

Lösning 3.2: Skapa en CoreDNS-åsidosättning

Om den rekommenderade lösningen inte är möjlig i din situation skapar du en CoreDNS-åsidosättning för att tilläggsdataplanets slutpunkt ska gå över det offentliga nätverket. Mer information om hur du anpassar CoreDNS finns i avsnittet "Hosts plugin" i "Anpassa CoreDNS med Azure Kubernetes Service".

Följ dessa steg för att skapa en CoreDNS-åsidosättning:

  1. Hitta den offentliga IP-adressen för tilläggets dataplansslutpunkt genom att nslookup köra kommandot . Se till att du ändrar regionen (till exempel eastus2euap) baserat på platsen för ditt AKS-kluster:

    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. Skapa en säkerhetskopia av den befintliga coreDNS-konfigurationen:

    kubectl get configmap -n kube-system coredns-custom -o yaml > coredns.backup.yaml
    
  3. Åsidosätt mappningen för den regionala (till exempel eastus2euap) dataplanets slutpunkt till den offentliga IP-adressen. För att göra detta skapar du en YAML-fil med namnet corednsms.yaml och kopierar sedan följande exempelkonfiguration till den nya filen. (Se till att du uppdaterar adressen och värdnamnet med hjälp av värdena för din miljö.)

    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. Om du vill skapa ConfigMap kör kubectl apply du kommandot och anger namnet på YAML-manifestfilen:

    kubectl apply -f corednsms.yaml
    
  5. Om du vill läsa in ConfigMap igen och göra det möjligt för Kubernetes Scheduler att starta om CoreDNS utan driftstopp kör du kommandot för kubectl-distributionsstart :

    kubectl -n kube-system rollout restart deployment coredns
    
  6. nslookup Kör kommandot igen för att se till att dataplanets slutpunkt matchar den angivna offentliga IP-adressen:

    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
    

Poddloggarna för tilläggsagenten bör inte längre logga felkod: 403, meddelande Den här trafiken är inte auktoriserad. I stället ska loggarna innehålla svarskoderna "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"  }

Fel: Tilläggspoddar kan inte schemaläggas om alla nodpooler i klustret är "CriticalAddonsOnly" fördärvade

När det här felet inträffar loggas följande post i tilläggsagentloggen:

Tilläggspoddfel: 0/2 noder är tillgängliga: 2 noder hade orörd taint {CriticalAddonsOnly: true}. preemption: 0/2 noder är tillgängliga: 2 Preemption är inte användbart för schemaläggning.

Orsak

Det här felet uppstår när du försöker aktivera tillägg (till exempel DAPR (Distributed Application Runtime) i ett AKS-kluster som har CriticalAddonsOnly fläckade nodpooler. I det här fallet schemaläggs inte tilläggspoddar på någon nod eftersom det inte finns någon tolerans för dessa taints.

Om du vill visa felsituationen granskar du tilläggspoddarna för att kontrollera att de har fastnat i ett väntande tillstånd:

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

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

Beskriv poddarna för att se att de inte kan schemaläggas på grund av en taint som inte stöds:

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.

Kommentar

  • Vi rekommenderar att du inte installerar tillägg på CriticalAddOnsOnly fördärvade nodpooler såvida inte detta krävs för programarbetsbelastningar.

  • Vi rekommenderar att du inte använder en taint på kluster med en CriticalAddOnsOnly nodpool. Om du använder den tainten i ett kluster som bara har en nodpool kan du inte schemalägga programpoddar i klustret. Kontrollera att minst en nodpool i klustret inte har den här tainten. Mer information om när anteckningen CriticalAddonsOnly ska användas finns i Hantera systemnodpooler i Azure Kubernetes Service (AKS).

Lösning 1: Lägga till en nodpool i klustret

Lös problemet genom att lägga till ytterligare en nodpool som inte har en CriticalAddonsOnly taint. Den här åtgärden gör att tilläggspoddarna schemaläggs i den nya nodpoolen.

Lösning 2: Ta bort tainten "CriticalAddonsOnly"

Om det är möjligt och praktiskt kan du ta bort CriticalAddonsOnly taint för att installera tillägget i klustret.

Helm-fel

Du kan stöta på något av följande Helm-relaterade fel:

Fel: Tidsgränsen för att vänta på resursberedskap

Installationen av ett Kubernetes-program misslyckas och följande felmeddelanden visas:

jobbet misslyckades: BackoffLimitExceeded

Tidsgränsen för att vänta på att resursen ska komma till ett färdigt/slutfört tillstånd.

Orsak

Det här problemet har följande vanliga orsaker:

  • Resursbegränsningar: Otillräckligt minne eller CPU-resurser i klustret kan förhindra en lyckad initiering av poddar, jobb eller andra Kubernetes-resurser. Så småningom leder den här situationen till att installationen överskrider tidsgränsen. Principbegränsningar eller nodtaints (till exempel NoSchedule) kan också blockera resursinitiering.

  • Arkitekturfel: Om du försöker schemalägga ett Linux-baserat program på en Windows-baserad nod (eller tvärtom) kan det orsaka fel i Kubernetes-resursinitiering.

  • Felaktiga konfigurationsinställningar: Felaktiga konfigurationsinställningar kan hindra poddar från att starta.

Lösning

Följ det här stegen för att lösa problemet:

  1. Kontrollera resurser: Kontrollera att Kubernetes-klustret har tillräckligt med resurser och att poddschemaläggning tillåts på noderna (du bör överväga taints). Kontrollera att minne och CPU-resurser uppfyller kraven.

  2. Granska händelser: Kontrollera händelserna i Kubernetes-namnområdet för att identifiera potentiella problem som kan hindra poddar, jobb eller andra Kubernetes-resurser från att nå ett klart tillstånd.

  3. Kontrollera Helm-diagram och -konfigurationer: Många Kubernetes-program använder Helm-diagram för att distribuera resurser i klustret. Vissa program kan kräva användarindata via konfigurationsinställningar. Kontrollera att alla angivna konfigurationsvärden är korrekta och uppfyller installationskraven.

Fel: Det går inte att ladda ned Helm-diagrammet från lagringsplatsens URL

Det här felet orsakas av anslutningsproblem som uppstår mellan klustret och brandväggen utöver problem med utgående blockering. Information om hur du löser det här problemet finns i Utgående nätverk och FQDN-regler för AKS-kluster (Azure Kubernetes Service).

Fel: Helm-diagramåtergivningen misslyckades med angivna värden

Det här felet uppstår om Kubernetes-program förlitar sig på Helm-diagram för att distribuera resurser i Kubernetes-klustret. Dessa program kan kräva användarindata som tillhandahålls via konfigurationsinställningar som skickas som Helm-värden under installationen. Om någon av dessa viktiga konfigurationsinställningar saknas eller är felaktiga kanske Helm-diagrammet inte återges.

Lös problemet genom att läsa tilläggs- eller programdokumentationen för att avgöra om du utelämnade några obligatoriska värden eller angav felaktiga värden under programinstallationen. De här riktlinjerna kan hjälpa dig att åtgärda problem med Helm-diagramåtergivning som orsakas av saknade eller felaktiga konfigurationsvärden.

Fel: Resursen finns redan i klustret

Det här felet uppstår om det finns en konflikt mellan Kubernetes-resurserna i klustret och Kubernetes-resurserna som programmet försöker installera. Felmeddelandet anger vanligtvis namnet på den resurs som står i konflikt.

Om den resurs som står i konflikt är nödvändig och inte kan ersättas kanske du inte kan installera programmet. Om resursen inte är kritisk och kan tas bort tar du bort resursen som står i konflikt och försöker sedan installera igen.

Fel: Åtgärden pågår redan för Helm

Det här felet uppstår om det redan pågår en åtgärd för en viss version. Lös problemet genom att vänta 10 minuter och sedan försöka utföra åtgärden igen.

Kontakta oss för att få hjälp

Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.