Azure Arc kubernetes-aktiverad felsökning

Det här dokumentet innehåller felsökningsguider för problem med anslutning, behörigheter och agenter.

Allmän felsökning

Azure CLI

Innan du az connectedk8s använder az k8s-configuration CLI-kommandona kontrollerar du att Azure CLI är inställt på att fungera mot rätt Azure-prenumeration.

az account set --subscription 'subscriptionId'
az account show

Azure Arc agenter

Alla agenter Azure Arc kubernetes distribueras som poddar i azure-arc namnområdet. Alla poddar bör köras och passera sina hälsokontroller.

Kontrollera först Azure Arc Helm-versionen:

$ helm --namespace default status azure-arc
NAME: azure-arc
LAST DEPLOYED: Fri Apr  3 11:13:10 2020
NAMESPACE: default
STATUS: deployed
REVISION: 5
TEST SUITE: None

Om Helm-versionen inte hittas eller saknas kan du försöka ansluta klustret till Azure Arc igen.

Om Helm-versionen finns med STATUS: deployed kontrollerar du statusen för agenterna med hjälp av kubectl :

$ kubectl -n azure-arc get deployments,pods
NAME                                       READY  UP-TO-DATE  AVAILABLE  AGE
deployment.apps/clusteridentityoperator     1/1       1          1       16h
deployment.apps/config-agent                1/1       1          1       16h
deployment.apps/cluster-metadata-operator   1/1       1          1       16h
deployment.apps/controller-manager          1/1       1          1       16h
deployment.apps/flux-logs-agent             1/1       1          1       16h
deployment.apps/metrics-agent               1/1       1          1       16h
deployment.apps/resource-sync-agent         1/1       1          1       16h

NAME                                            READY   STATUS  RESTART  AGE
pod/cluster-metadata-operator-7fb54d9986-g785b  2/2     Running  0       16h
pod/clusteridentityoperator-6d6678ffd4-tx8hr    3/3     Running  0       16h
pod/config-agent-544c4669f9-4th92               3/3     Running  0       16h
pod/controller-manager-fddf5c766-ftd96          3/3     Running  0       16h
pod/flux-logs-agent-7c489f57f4-mwqqv            2/2     Running  0       16h
pod/metrics-agent-58b765c8db-n5l7k              2/2     Running  0       16h
pod/resource-sync-agent-5cf85976c7-522p5        3/3     Running  0       16h

Alla poddar bör visas STATUS som Running med 3/3 antingen eller under kolumnen 2/2 READY . Hämta loggar och beskriva de poddar som returnerar Error en eller CrashLoopBackOff . Om några poddar har fastnat i Pending tillståndet kan det finnas otillräckliga resurser på klusternoder. Om du skalar upp klustret kan dessa poddar övergå till Running tillstånd.

Ansluta Kubernetes-kluster till Azure Arc

För att ansluta kluster till Azure krävs både åtkomst till en Azure-prenumeration cluster-admin och åtkomst till ett målkluster. Om du inte kan nå klustret eller om du inte har tillräcklig behörighet, kommer anslutningen av klustret till Azure Arc att misslyckas.

Azure CLI kan inte ladda ned Helm-diagram för Azure Arc agenter

Om du använder Helm version >= 3.7.0 får du följande fel när körs för att ansluta klustret az connectedk8s connect till Azure Arc:

$ az connectedk8s connect -n AzureArcTest -g AzureArcTest

Unable to pull helm chart from the registry 'mcr.microsoft.com/azurearck8s/batch1/stable/azure-arc-k8sagents:1.4.0': Error: unknown command "chart" for "helm"
Run 'helm --help' for usage.

I det här fallet måste du installera en tidigare version av Helm 3, där version < 3.7.0. Kör sedan kommandot igen az connectedk8s connect för att ansluta klustret till Azure Arc.

Otillräckliga klusterbehörigheter

Om den angivna kubeconfig-filen inte har tillräcklig behörighet för att installera Azure Arc-agenterna returnerar Azure CLI-kommandot ett fel.

$ az connectedk8s connect --resource-group AzureArc --name AzureArcCluster
Ensure that you have the latest helm version installed before proceeding to avoid unexpected errors.
This operation might take a while...

Error: list: failed to list: secrets is forbidden: User "myuser" cannot list resource "secrets" in API group "" at the cluster scope

Användaren som ansluter klustret till Azure Arc ha cluster-admin tilldelats en roll i klustret.

Det går inte att ansluta OpenShift-klustret till Azure Arc

Kontrollera följande om det inte går att komma i tid och misslyckas az connectedk8s connect vid anslutning Azure Arc OpenShift-kluster till Azure Arc:

  1. OpenShift-klustret måste uppfylla kraven för version: 4.5.41+ eller 4.6.35+ eller 4.7.18+.

  2. Innan az connectedk8s connnect du kör måste följande kommando köras i klustret:

    oc adm policy add-scc-to-user privileged system:serviceaccount:azure-arc:azure-arc-kube-aad-proxy-sa
    

Tidsgränser för installation

Att ansluta ett Kubernetes-kluster Azure Arc kubernetes kräver installation av Azure Arc-agenter i klustret. Om klustret körs via en långsam Internetanslutning kan containeravbildningen för agenter ta längre tid än Azure CLI-tidsgränserna.

$ az connectedk8s connect --resource-group AzureArc --name AzureArcCluster
Ensure that you have the latest helm version installed before proceeding to avoid unexpected errors.
This operation might take a while...

Helm-problem

Helm-versionen har ett problem där helm install/upgrade (används av CLI-tillägget) resulterar i körning av alla v3.3.0-rc.1 connectedk8s hookar, vilket leder till följande fel:

$ az connectedk8s connect -n AzureArcTest -g AzureArcTest
Ensure that you have the latest helm version installed before proceeding.
This operation might take a while...

Please check if the azure-arc namespace was deployed and run 'kubectl get pods -n azure-arc' to check if all the pods are in running state. A possible cause for pods stuck in pending state could be insufficientresources on the kubernetes cluster to onboard to arc.
ValidationError: Unable to install helm release: Error: customresourcedefinitions.apiextensions.k8s.io "connectedclusters.arc.azure.com" not found

Följ dessa steg om du vill återställa från det här problemet:

  1. Ta bort Azure Arc kubernetes-resurs i Azure Portal.

  2. Kör följande kommandon på datorn:

    kubectl delete ns azure-arc
    kubectl delete clusterrolebinding azure-arc-operator
    kubectl delete secret sh.helm.release.v1.azure-arc.v1
    
  3. Installera en stabil version av Helm 3 på datorn i stället för versionen för versionskandidaten.

  4. Kör kommandot az connectedk8s connect med lämpliga värden för att ansluta klustret till Azure Arc.

Konfigurationshantering

Allmänt

Du kan felsöka problem med konfigurationsresursen genom att köra az-kommandon med --debug angiven parameter.

az provider show -n Microsoft.KubernetesConfiguration --debug
az k8s-configuration create <parameters> --debug

Skapa konfigurationer

Skrivbehörigheter för Azure Arc kubernetes-resurs ( ) är nödvändiga och tillräckliga Microsoft.Kubernetes/connectedClusters/Write för att skapa konfigurationer i klustret.

Konfigurationen är kvar Pending

kubectl -n azure-arc logs -l app.kubernetes.io/component=config-agent -c config-agent
$ k -n pending get gitconfigs.clusterconfig.azure.com  -o yaml
apiVersion: v1
items:
- apiVersion: clusterconfig.azure.com/v1beta1
  kind: GitConfig
  metadata:
    creationTimestamp: "2020-04-13T20:37:25Z"
    generation: 1
    name: pending
    namespace: pending
    resourceVersion: "10088301"
    selfLink: /apis/clusterconfig.azure.com/v1beta1/namespaces/pending/gitconfigs/pending
    uid: d9452407-ff53-4c02-9b5a-51d55e62f704
  spec:
    correlationId: ""
    deleteOperator: false
    enableHelmOperator: false
    giturl: git@github.com:slack/cluster-config.git
    helmOperatorProperties: null
    operatorClientLocation: azurearcfork8s.azurecr.io/arc-preview/fluxctl:0.1.3
    operatorInstanceName: pending
    operatorParams: '"--disable-registry-scanning"'
    operatorScope: cluster
    operatorType: flux
  status:
    configAppliedTime: "2020-04-13T20:38:43.081Z"
    isSyncedWithAzure: true
    lastPolledStatusTime: ""
    message: 'Error: {exit status 1} occurred while doing the operation : {Installing
      the operator} on the config'
    operatorPropertiesHashed: ""
    publicKey: ""
    retryCountPublicKey: 0
    status: Installing the operator
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""

Övervakning

Azure Monitor för containrar kräver att dess DaemonSet körs i privilegierat läge. Kör följande kommando för att konfigurera ett Canonical Charmed Kubernetes-kluster för övervakning:

juju config kubernetes-worker allow-privileged=true

Aktivera anpassade platser med tjänstens huvudnamn

När du ansluter klustret till Azure Arc eller när du aktiverar funktionen för anpassade platser i ett befintligt kluster kan du se följande varning:

Unable to fetch oid of 'custom-locations' app. Proceeding without enabling the feature. Insufficient privileges to complete the operation.

Ovanstående varning observeras när du har använt ett huvudnamn för tjänsten för att logga in på Azure och tjänstens huvudnamn inte har behörighet att hämta information om programmet som används av Azure Arc-tjänsten. Undvik det här felet genom att utföra följande steg:

  1. Hämta objekt-ID:t för Azure AD-programmet som används av Azure Arc tjänsten:

    az ad sp show --id 'bc313c14-388c-4e7d-a58e-70017303ee3b' --query objectId -o tsv
    
  2. Använd värdet <objectId> från steget ovan för att aktivera funktionen för anpassade platser i klustret:

    • Om du aktiverar funktionen för anpassade platser som en del av anslutningen av klustret till Arc kör du följande kommando:

      az connectedk8s connect -n <cluster-name> -g <resource-group-name> --custom-locations-oid <objectId>   
      
    • Om du aktiverar funktionen anpassade platser i ett befintligt Azure Arc Kubernetes-kluster kör du följande kommando:

      az connectedk8s enable-features -n <cluster-name> -g <resource-group-name> --custom-locations-oid <objectId> --features cluster-connect custom-locations
      

När ovanstående behörigheter har beviljats kan du fortsätta att aktivera funktionen för anpassad plats i klustret.

Azure Arc Open Service Mesh

Följande felsökningssteg ger vägledning om hur du validerar distributionen av alla Open Service Mesh-tilläggskomponenter i klustret.

1. Kontrollera distributionen av OSM-kontrollanten

kubectl get deployment -n arc-osm-system --selector app=osm-controller

Om OSM-styrenheten är felfri får du utdata som liknar följande utdata:

NAME             READY   UP-TO-DATE   AVAILABLE   AGE
osm-controller   1/1     1            1           59m

2. Kontrollera OSM-styrenhetens podd

kubectl get pods -n arc-osm-system --selector app=osm-controller

Om OSM-styrenheten är felfri får du utdata som liknar följande utdata:

NAME                            READY   STATUS    RESTARTS   AGE
osm-controller-b5bd66db-wglzl   0/1     Evicted   0          61m
osm-controller-b5bd66db-wvl9w   1/1     Running   0          31m

Även om en kontrollant har avlägsnats någon gång har vi en till som är READY 1/1 och med Running 0 omstarter. Om kolumnen är READY något annat än 1/1 tjänstnätet skulle vara i ett brutet tillstånd. Kolumn READY med anger att 0/1 kontrollplanscontainern kraschar – vi måste hämta loggar. Se Get OSM Controller Logs from Azure Support Center avsnittet nedan. Kolumn READY med ett tal som är högre än 1 efter skulle indikera att det finns / sidovagn installerade. OSM-styrenheten skulle troligen inte fungera med några sidovagnar som är kopplade till den.

3. Kontrollera OSM-styrenhetstjänsten

kubectl get service -n arc-osm-system osm-controller

Om OSM-styrenheten är felfri får du följande utdata:

NAME             TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)              AGE
osm-controller   ClusterIP   10.0.31.254   <none>        15128/TCP,9092/TCP   67m

Obs! CLUSTER-IP Skulle vara annorlunda. Tjänsten och NAME måste vara samma som visas i PORT(S) utdata.

4. Kontrollera OSM-styrenhetens slutpunkter:

kubectl get endpoints -n arc-osm-system osm-controller

Om OSM-styrenheten är felfri får du utdata som liknar följande utdata:

NAME             ENDPOINTS                              AGE
osm-controller   10.240.1.115:9092,10.240.1.115:15128   69m

Om användarens kluster inte har något ENDPOINTS för detta indikerar det att osm-controller kontrollplanet inte är feltillstånd. Detta kan bero på att OSM-styrenhetens podd kraschar eller aldrig har distribuerats korrekt.

5. Kontrollera distributionen av OSM-injektorn

kubectl get deployments -n arc-osm-system osm-injector

Om OSM-injektorn är felfri får du utdata som liknar följande utdata:

NAME           READY   UP-TO-DATE   AVAILABLE   AGE
osm-injector   1/1     1            1           73m

6. Kontrollera OSM-injektorpodden

kubectl get pod -n arc-osm-system --selector app=osm-injector

Om OSM-injektorn är felfri får du utdata som liknar följande utdata:

NAME                            READY   STATUS    RESTARTS   AGE
osm-injector-5986c57765-vlsdk   1/1     Running   0          73m

Kolumnen READY måste vara 1/1 . Ett annat värde indikerar en osm-injector-pod med feltillstånd.

7. Kontrollera OSM-injektortjänsten

kubectl get service -n arc-osm-system osm-injector

Om OSM-injektorn är felfri får du utdata som liknar följande utdata:

NAME           TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
osm-injector   ClusterIP   10.0.39.54   <none>        9090/TCP   75m

Kontrollera att IP-adressen som anges osm-injector för tjänsten är 9090 . Det får inte finnas någon EXTERNAL-IP .

8. Kontrollera OSM-injektorslutpunkter

kubectl get endpoints -n arc-osm-system osm-injector

Om OSM-injektorn är felfri får du utdata som liknar följande utdata:

NAME           ENDPOINTS           AGE
osm-injector   10.240.1.172:9090   75m

För att OSM ska fungera måste det finnas minst en slutpunkt för osm-injector . IP-adressen för dina OSM-injektorslutpunkter kommer att vara annorlunda. Porten 9090 måste vara samma.

9. Kontrollera verifiera och mutera webhooks:

kubectl get ValidatingWebhookConfiguration --selector app=osm-controller

Om valideringswebhooken är felfri får du utdata som liknar följande utdata:

NAME              WEBHOOKS   AGE
arc-osm-webhook-osm   1      81m
kubectl get MutatingWebhookConfiguration --selector app=osm-controller

Om den muterande webhooken är felfri får du utdata som liknar följande utdata:

NAME              WEBHOOKS   AGE
arc-osm-webhook-osm   1      102m

Sök efter tjänsten och CA-paketet för verifierande webhook:

kubectl get ValidatingWebhookConfiguration arc-osm-webhook-osm -o json | jq '.webhooks[0].clientConfig.service'

En välkonfigurerad Validating Webhook Configuration skulle ha följande utdata:

{
  "name": "osm-config-validator",
  "namespace": "arc-osm-system",
  "path": "/validate-webhook",
  "port": 9093
}

Sök efter tjänsten och CA-paketet för muterande webhook:

kubectl get MutatingWebhookConfiguration arc-osm-webhook-osm -o json | jq '.webhooks[0].clientConfig.service'

En välkonfigurerad konfiguration av muterande webhook skulle ha följande utdata:

{
  "name": "osm-injector",
  "namespace": "arc-osm-system",
  "path": "/mutate-pod-creation",
  "port": 9090
}

Kontrollera om OSM-kontrollanten har gett webhooken Verifierar (eller muterar) ett CA-paket med hjälp av följande kommando:

kubectl get ValidatingWebhookConfiguration arc-osm-webhook-osm -o json | jq -r '.webhooks[0].clientConfig.caBundle' | wc -c
kubectl get MutatingWebhookConfiguration arc-osm-webhook-osm -o json | jq -r '.webhooks[0].clientConfig.caBundle' | wc -c

Exempel på utdata:

1845

Talet i utdata anger antalet byte eller storleken på CA-paketet. Om detta är tomt, 0 eller ett tal under 1 000 indikerar det att CA-paketet inte är korrekt etablerat. Utan ett korrekt CA-paket skulle ValidatingWebhooken skapa ett fel och hindra dig från att göra ändringar i osm-config ConfigMap i arc-osm-system namnområdet.

Nu ska vi titta på ett exempelfel när CA-paketet är felaktigt:

  • Ett försök att ändra osm-config ConfigMap:
    kubectl patch ConfigMap osm-config -n arc-osm-system --type merge --patch '{"data":{"config_resync_interval":"2m"}}'
    
  • Felutdata:
    Error from server (InternalError): Internal error occurred: failed calling webhook "osm-config-webhook.k8s.io": Post https://osm-config-validator.arc-osm-system.svc:9093/validate-webhook?timeout=30s: x509: certificate signed by unknown authority
    

Använd någon av följande lösningar när webhookkonfigurationen för verifierar har ett felaktigt certifikat:

  • Alternativ 1. Starta om OSM-styrenheten – Detta startar om OSM-styrenheten. När du startar skriver den över CA-paketet för både mutating- och validating-webhooks.

    kubectl rollout restart deployment -n arc-osm-system osm-controller
    
  • Alternativ 2. Ta bort den verifierande webhooken – om du tar bort den verifierande webhooken gör det inte längre att osm-config ConfigMap verifieras. Alla korrigeringar går igenom. OSM-kontrollanten kan behöva startas om för att snabbt skriva om CA-paketet.

    kubectl delete ValidatingWebhookConfiguration arc-osm-webhook-osm
    
  • Alternativ 3. Ta bort och korrigera: Följande kommando tar bort den verifierande webhooken, så att du kan lägga till värden och försöker omedelbart tillämpa en korrigering

    kubectl delete ValidatingWebhookConfiguration arc-osm-webhook-osm; kubectl patch ConfigMap osm-config -n arc-osm-system --type merge --patch '{"data":{"config_resync_interval":"15s"}}'
    

10. Kontrollera osm-config ConfigMap

Anteckning

OSM-kontrollanten kräver inte osm-config att ConfigMap finns i arc-osm-system namnområdet. Kontrollanten har rimliga standardvärden för -konfiguration och kan fungera utan den.

Kontrollera om det finns:

kubectl get ConfigMap -n arc-osm-system osm-config

Kontrollera innehållet i osm-config ConfigMap:

kubectl get ConfigMap -n arc-osm-system osm-config -o json | jq '.data'     

Du får följande utdata:

{
  "egress": "false",
  "enable_debug_server": "false",
  "enable_privileged_init_container": "false",
  "envoy_log_level": "error",
  "permissive_traffic_policy_mode": "true",
  "prometheus_scraping": "true",
  "service_cert_validity_duration": "24h",
  "tracing_enable": "false",
  "use_https_ingress": "false",
}

Information om ConfigMap-värden finns i dokumentationen för OSM osm-config ConfigMap.

11. Kontrollera namnområden

Anteckning

Namnrymden arc-osm-system deltar aldrig i ett tjänstnät och märks aldrig och/eller kommenteras aldrig med nyckeln/värdena nedan.

Vi använder kommandot osm namespace add för att koppla namnrymder till ett visst tjänstnät. När ett kubernetes-namnområde ingår i nätnätet måste följande vara sant:

Visa anteckningar för namnområdet bookbuyer :

kc get namespace bookbuyer -o json | jq '.metadata.annotations'

Följande anteckning måste finnas:

{
  "openservicemesh.io/sidecar-injection": "enabled"
}

Visa etiketterna för namnområdet bookbuyer :

kc get namespace bookbuyer -o json | jq '.metadata.labels'

Följande etikett måste finnas:

{
  "openservicemesh.io/monitored-by": "osm"
}

Observera att om du inte använder osm CLI kan du även manuellt lägga till dessa anteckningar i dina namnområden. Om ett namnområde inte är kommenterat med eller inte är märkt med "openservicemesh.io/sidecar-injection": "enabled" "openservicemesh.io/monitored-by": "osm" OSM Injector lägger du inte till Envoy-sidovagnar.

Anteckning

När osm namespace add anropas matas endast nya poddar in med en Envoy-sidovagn. Befintliga poddar måste startas om med kubectl rollout restard deployment kommandot .

12. Verifiera SMI-CRD:erna

Kontrollera om klustret har nödvändiga CRD:er:

kubectl get crds

Kontrollera att CRD:erna motsvarar samma överordnade OSM-version. T.ex. Om du använder v0.8.4, se till att CRD:erna matchar dem som är tillgängliga i release branch v0.8.4 av OSM OSS-projektet. Se OSM-versionsanteckningar.

Hämta versionerna av CRD:erna installerade med följande kommando:

for x in $(kubectl get crds --no-headers | awk '{print $1}' | grep 'smi-spec.io'); do
    kubectl get crd $x -o json | jq -r '(.metadata.name, "----" , .spec.versions[].name, "\n")'
done

Om CRD saknas använder du följande kommandon för att installera dem i klustret. Se till att du ersätter versionen i kommandot .

kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm/release-v0.8.2/charts/osm/crds/access.yaml

kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm/release-v0.8.2/charts/osm/crds/specs.yaml

kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm/release-v0.8.2/charts/osm/crds/split.yaml