Řešení potíží s Kubernetes s podporou Azure Arc a GitOps

Tento dokument obsahuje průvodce odstraňováním potíží s připojením, oprávněními a agenty Kubernetes s podporou Azure Arc. Poskytuje také průvodce odstraňováním potíží pro Azure GitOps, které je možné použít v clusterech Kubernetes s podporou Azure Arc nebo Azure Kubernetes Service (AKS).

Obecné řešení potíží

Azure CLI

Před použitím az connectedk8s příkazů nebo az k8s-configuration rozhraní příkazového řádku zkontrolujte, jestli je Azure CLI nastavené tak, aby fungovalo se správným předplatným Azure.

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

Agenti Azure Arc

Všichni agenti pro Kubernetes s podporou Azure Arc se nasadí jako pody v azure-arc oboru názvů. Všechny pody by měly být spuštěné a měly by projít svými kontrolami stavu.

Nejprve ověřte vydání nástroje Azure Arc Helm Chart:

$ 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

Pokud se verze Helm Chart nenašla nebo chybí, zkuste cluster znovu připojit ke službě Azure Arc .

Pokud je k dispozici verze Helm Chart s STATUS: deployed, zkontrolujte stav agentů pomocí 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

Všechny pody by se měly zobrazit STATUS jako Running u sloupce 3/3 nebo 2/2 pod sloupcem READY . Načtení protokolů a popis podů vracejících Error nebo CrashLoopBackOff. Pokud se některé pody zablokují ve Pending stavu, může být na uzlech clusteru nedostatek prostředků. Vertikálním navýšením kapacity clusteru můžete tyto pody převést do Running stavu.

Připojení clusterů Kubernetes ke službě Azure Arc

Připojení clusterů ke službě Azure Arc vyžaduje přístup k předplatnému Azure a cluster-admin přístup k cílovému clusteru. Pokud se ke clusteru nemůžete připojit nebo pokud nemáte dostatečná oprávnění, připojení clusteru ke službě Azure Arc se nezdaří. Ujistěte se, že jste splnili všechny požadavky na připojení clusteru.

Tip

Vizuálního průvodce řešením těchto problémů najdete v tématu Diagnostika problémů s připojením pro clustery Kubernetes s podporou arc.

Problémy s překladem DNS

Pokud se zobrazí chybová zpráva o problému s překladem DNS v clusteru, můžete zkusit problém diagnostikovat a vyřešit několik věcí.

Další informace najdete v tématu Ladění překladu DNS.

Problémy s odchozím připojením k síti

K problémům s odchozím síťovým připojením z clusteru může dojít z různých důvodů. Nejprve se ujistěte, že jsou splněny všechny požadavky na síť .

Pokud narazíte na tento problém a váš cluster je za odchozím proxy serverem, ujistěte se, že jste během onboardingu clusteru předali parametry proxy serveru a že je proxy server správně nakonfigurovaný. Další informace najdete v tématu Připojení pomocí odchozího proxy serveru.

Nejde načíst certifikát MSI

Příčinou problémů s načtením certifikátu MSI jsou obvykle problémy se sítí. Zkontrolujte, jestli jsou splněné všechny požadavky na síť , a pak to zkuste znovu.

Azure CLI nemůže stáhnout diagram Helmu pro agenty Azure Arc

S verzí >Helm = 3.7.0 můžete při připojení az connectedk8s connect clusteru ke službě Azure Arc narazit na následující chybu:

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.

Pokud chcete tento problém vyřešit, budete muset nainstalovat předchozí verzi Helmu 3, kde je verze menší než 3.7.0. Po instalaci této verze znovu spusťte az connectedk8s connect příkaz pro připojení clusteru ke službě Azure Arc.

Nedostatečná oprávnění ke clusteru

Pokud zadaný soubor kubeconfig nemá dostatečná oprávnění k instalaci agentů Azure Arc, příkaz Azure CLI vrátí chybu.

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

Pokud chcete tento problém vyřešit, měl by mít uživatel připojující cluster ke službě Azure Arc přiřazenou cluster-admin roli v clusteru.

Cluster OpenShift nejde připojit ke službě Azure Arc

Pokud az connectedk8s connect dochází k vypršení časového limitu a selhání při připojování clusteru OpenShift ke službě Azure Arc:

  1. Ujistěte se, že cluster OpenShift splňuje požadavky na verzi: 4.5.41 nebo novější nebo 4.6.35 nebo novější nebo 4.7.18+.

  2. Před spuštěním az connectedk8s connnectpříkazu spusťte v clusteru tento příkaz:

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

Vypršení časových limitů instalace

Připojení clusteru Kubernetes k Kubernetes s podporou Azure Arc vyžaduje instalaci agentů Azure Arc v clusteru. Pokud cluster běží přes pomalé připojení k internetu, může vyžádání image kontejneru pro agenty trvat déle než vypršení časových limitů Azure CLI.

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...

Chyba časového limitu Helmu

Může se zobrazit následující chyba vypršení časového limitu Helmu:

az connectedk8s connect -n AzureArcTest -g AzureArcTest
Unable to install helm release: Error: UPGRADE Failed: time out waiting for the condition

Pokud chcete tento problém vyřešit, vyzkoušejte následující kroky.

  1. Spusťte následující příkaz:

    kubectl get pods -n azure-arc
    
  2. Zkontrolujte, jestli se clusterconnect-agent na podech nebo config-agent zobrazují crashloopbackoff, nebo jestli nejsou spuštěné všechny kontejnery:

    NAME                                        READY   STATUS             RESTARTS   AGE
    cluster-metadata-operator-664bc5f4d-chgkl   2/2     Running            0          4m14s
    clusterconnect-agent-7cb8b565c7-wklsh       2/3     CrashLoopBackOff   0          1m15s
    clusteridentityoperator-76d645d8bf-5qx5c    2/2     Running            0          4m15s
    config-agent-65d5df564f-lffqm               1/2     CrashLoopBackOff   0          1m14s
    
  3. Pokud níže uvedený certifikát neexistuje, spravovaná identita přiřazená systémem se nenainstalovala.

    kubectl get secret -n azure-arc -o yaml | grep name:
    
    name: azure-identity-certificate
    

    Pokud chcete tento problém vyřešit, zkuste odstranit nasazení Arc spuštěním az connectedk8s delete příkazu a opětovnou instalací. Pokud problém přetrvává, může se jednat o problém s nastavením proxy serveru. V takovém případě zkuste cluster připojit ke službě Azure Arc prostřednictvím proxy serveru a připojit cluster ke službě Arc prostřednictvím proxy serveru. Ověřte také, jestli jsou splněné všechny požadavky na síť .

  4. clusterconnect-agent Pokud jsou pody a config-agent spuštěné, ale kube-aad-proxy chybí, zkontrolujte zásady zabezpečení podů. Tento pod používá azure-arc-kube-aad-proxy-sa účet služby, který nemá oprávnění správce, ale vyžaduje oprávnění k připojení cesty hostitele.

  5. kube-aad-proxy Pokud je pod zablokovaný ve ContainerCreating stavu, zkontrolujte, jestli se do clusteru stáhl certifikát kube-aad-proxy.

    kubectl get secret -n azure-arc -o yaml | grep name:
    
    name: kube-aad-proxy-certificate
    

    Pokud certifikát chybí, odstraňte nasazení a znovu nasaďte cluster s jiným názvem. Pokud potíže potrvají, obraťte se na podporu.

Chyba ověření Helmu

U verze Helm v3.3.0-rc.1 dochází k problému , kdy instalace nebo upgrade helmu (používaného connectedk8s rozšířením rozhraní příkazového řádku) vede ke spuštění všech hooků, což vede k následující chybě:

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

Chcete-li se z tohoto problému zotavit, postupujte takto:

  1. Odstraňte prostředek Kubernetes s podporou Azure Arc v Azure Portal.

  2. Na počítači spusťte následující příkazy:

    kubectl delete ns azure-arc
    kubectl delete clusterrolebinding azure-arc-operator
    kubectl delete secret sh.helm.release.v1.azure-arc.v1
    
  3. Nainstalujte na počítač stabilní verzi Helmu 3 místo verze s kandidátem na vydání.

  4. Spuštěním az connectedk8s connect příkazu s příslušnými hodnotami připojte cluster ke službě Azure Arc.

Chyba modulu CryptoHash

Při pokusu o onboarding clusterů Kubernetes k platformě Azure Arc může místní prostředí (například vaše klientská konzola) vrátit následující chybovou zprávu:

Cannot load native module 'Crypto.Hash._MD5'

Někdy se při přidávání rozšíření connectedk8s a k8s-configuration prostřednictvím Azure CLI nebo Azure PowerShell nepodaří úspěšně stáhnout závislé moduly. Chcete-li tento problém vyřešit, ručně odeberte a pak přidejte rozšíření v místním prostředí.

Pokud chcete rozšíření odebrat, použijte:

az extension remove --name connectedk8s

az extension remove --name k8s-configuration

Pokud chcete přidat rozšíření, použijte:

az extension add --name connectedk8s

az extension add --name k8s-configuration

Správa GitOps

Flux v1 – obecné

Poznámka

Azure nakonec přestane podporovat GitOps s Flux v1, takže začněte používat Flux v2 co nejdříve.

Pokud chcete pomoct s řešením potíží s prostředkem sourceControlConfigurations (Flux v1), spusťte tyto příkazy Azure CLI se zadaným parametrem --debug :

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

Flux v1 – vytváření konfigurací

Oprávnění k zápisu k prostředku Kubernetes s podporou Azure Arc (Microsoft.Kubernetes/connectedClusters/Write) jsou nezbytná a dostatečná pro vytváření konfigurací v daném clusteru.

sourceControlConfigurations zbytky Pending (Flux v1)

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

Flux v2 – obecné

Pokud chcete pomoct s řešením potíží s prostředkem fluxConfigurations (Flux v2), spusťte tyto příkazy Azure CLI se zadaným parametrem --debug :

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

Flux v. 2: Chyby spuštění webhooku nebo zkušebního běhu

Pokud se zobrazí chyba Flux selhává s chybou, jako dry-run failed, error: admission webhook "<webhook>" does not support dry runje , můžete problém vyřešit tak, že vyhledáte ValidatingWebhookConfiguration nebo MutatingWebhookConfiguration a nastavíte sideEffects na None nebo NoneOnDryRun:

Další informace najdete v tématu Návody vyřešit webhook does not support dry run chyby?

Flux v2 – chyba při instalaci microsoft.flux rozšíření

Rozšíření microsoft.flux nainstaluje kontrolery Flux a agenty Azure GitOps do clusterů Kubernetes nebo Azure Kubernetes Service (AKS) s podporou Azure Arc. Pokud rozšíření ještě není nainstalované v clusteru a vytvoříte pro tento cluster prostředek konfigurace GitOps, rozšíření se nainstaluje automaticky.

Pokud během instalace dojde k chybě nebo pokud je rozšíření ve stavu selhání, můžete nejdříve spustit skript, který situaci prozkoumá. Parametr typu clusteru lze pro cluster s podporou Arc nastavit jako connectedClusters a pro cluster AKS jako managedClusters. Název microsoft.flux rozšíření bude "flux", pokud se rozšíření nainstalovalo automaticky během vytváření konfigurace GitOps. Vyhledejte informace v objektu statuses.

Například:

az k8s-extension show -g <RESOURCE_GROUP> -c <CLUSTER_NAME> -n flux -t <connectedClusters or managedClusters>
"statuses": [
    {
      "code": "InstallationFailed",
      "displayStatus": null,
      "level": null,
      "message": "unable to add the configuration with configId {extension:flux} due to error: {error while adding the CRD configuration: error {Operation cannot be fulfilled on extensionconfigs.clusterconfig.azure.com \"flux\": the object has been modified; please apply your changes to the latest version and try again}}",
      "time": null
    }
  ]

Další příklad:

az k8s-extension show -g <RESOURCE_GROUP> -c <CLUSTER_NAME> -n flux -t <connectedClusters or managedClusters>
"statuses": [
    {
      "code": "InstallationFailed",
      "displayStatus": null,
      "level": null,
      "message": "Error: {failed to install chart from path [] for release [flux]: err [cannot re-use a name that is still in use]} occurred while doing the operation : {Installing the extension} on the config",
      "time": null
    }
  ]

Další příklad z portálu:

{'code':'DeploymentFailed','message':'At least one resource deployment operation failed. Please list 
deployment operations for details. Please see https://aka.ms/DeployOperations for usage details.
','details':[{'code':'ExtensionCreationFailed', 'message':' Request failed to https://management.azure.com/
subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.ContainerService/
managedclusters/<CLUSTER_NAME>/extensionaddons/flux?api-version=2021-03-01. Error code: BadRequest. 
Reason: Bad Request'}]}

Ve všech těchto případech je možné nápravné akce vynutit odstranění rozšíření, odinstalovat verzi Helm a odstranit flux-system obor názvů z clusteru.

az k8s-extension delete --force -g <RESOURCE_GROUP> -c <CLUSTER_NAME> -n flux -t <managedClusters OR connectedClusters>
helm uninstall flux -n flux-system
kubectl delete namespaces flux-system

Další aspekty, které je potřeba vzít v úvahu:

  • V případě clusteru AKS se ujistěte, že má Microsoft.ContainerService/AKS-ExtensionManager předplatné povolený příznak funkce.

    az feature register --namespace Microsoft.ContainerService --name AKS-ExtensionManager
    
  • Ujistěte se, že cluster nemá žádné zásady, které by omezovaly flux-system vytváření oboru názvů nebo prostředků v daném oboru názvů.

Po provedení těchto akcí můžete buď znovu vytvořit konfiguraci fluxu, která automaticky nainstaluje rozšíření flux, nebo můžete rozšíření flux nainstalovat ručně.

Flux v2 – Instalace rozšíření v microsoft.flux clusteru s povolenou identitou podu Azure AD

Pokud se pokusíte nainstalovat rozšíření Flux do clusteru s povolenou identitou podu Azure Active Directory (Azure AD), může dojít k chybě v podu agenta rozšíření.

{"Message":"2021/12/02 10:24:56 Error: in getting auth header : error {adal: Refresh request failed. Status Code = '404'. Response body: no azure identity found for request clientID <REDACTED>\n}","LogType":"ConfigAgentTrace","LogLevel":"Information","Environment":"prod","Role":"ClusterConfigAgent","Location":"westeurope","ArmId":"/subscriptions/<REDACTED>/resourceGroups/<REDACTED>/providers/Microsoft.Kubernetes/managedclusters/<REDACTED>","CorrelationId":"","AgentName":"FluxConfigAgent","AgentVersion":"0.4.2","AgentTimestamp":"2021/12/02 10:24:56"}

Stav rozšíření se také vrátí jako „Selhalo“.

"{\"status\":\"Failed\",\"error\":{\"code\":\"ResourceOperationFailure\",\"message\":\"The resource operation completed with terminal provisioning state 'Failed'.\",\"details\":[{\"code\":\"ExtensionCreationFailed\",\"message\":\" error: Unable to get the status from the local CRD with the error : {Error : Retry for given duration didn't get any results with err {status not populated}}\"}]}}",

Pod agenta rozšíření se pokouší získat token z IMDS v clusteru, aby mohl komunikovat se službou rozšíření v Azure, ale identita podu zachytí požadavek na token).

Tento problém můžete vyřešit upgradem na nejnovější verzi microsoft.flux rozšíření. Pro verzi 1.6.1 nebo starší je alternativním řešením vytvořit AzurePodIdentityException nástroj, který Azure AD identitě podu oznámí, že má ignorovat požadavky na tokeny z podů rozšíření flux.

apiVersion: aadpodidentity.k8s.io/v1
kind: AzurePodIdentityException
metadata:
  name: flux-extension-exception
  namespace: flux-system
spec:
  podLabels:
    app.kubernetes.io/name: flux-extension

Flux v2 – Instalace microsoft.flux rozšíření v clusteru s povolenou identitou Kubelet

Při práci s clustery Azure Kubernetes je jednou z možností ověřování identita kubelet pomocí spravované identity přiřazené uživatelem. Použití identity kubeletu může snížit provozní režii a zvýšit zabezpečení při připojování k prostředkům Azure, jako je Azure Container Registry.

Pokud chcete, aby flux používal identitu kubeletu, přidejte parametr --config useKubeletIdentity=true při instalaci rozšíření Flux. Tato možnost se podporuje od verze 1.6.1 rozšíření.

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type managedClusters --name flux --extension-type microsoft.flux --config useKubeletIdentity=true

Flux v2 – microsoft.flux limity procesoru a paměti instalace rozšíření

Kontrolery nainstalované v clusteru Kubernetes s rozšířením Microsoft Flux vyžadují následující limity prostředků procesoru a paměti, aby bylo možné správně plánovat na uzlech clusteru Kubernetes.

Název kontejneru Limit procesoru Limit paměti
fluxconfig-agent 50m 150mi
fluxconfig-controller 100m 150mi
fluent-bit 20m 150mi
helm-controller 1000m 1Gi
source-controller 1000m 1Gi
kustomize-controller 1000m 1Gi
kontroler oznámení 1000m 1Gi
image-automation-controller 1000m 1Gi
image-reflector-controller 1000m 1Gi

Pokud jste povolili vlastní nebo předdefinovanou zásadu Azure Gatekeeper, jako Kubernetes cluster containers CPU and memory resource limits should not exceed the specified limitsje , která omezuje prostředky pro kontejnery v clusterech Kubernetes, budete muset buď zajistit, aby limity prostředků pro zásadu byly vyšší než výše uvedené limity, nebo flux-system je obor názvů součástí parametru excludedNamespaces v přiřazení zásad.

Sledování

Azure Monitor pro kontejnery vyžaduje, aby se sada DaemonSet spouštěla v privilegovaném režimu. Pokud chcete úspěšně nastavit cluster Kubernetes s kanonickým charmed pro monitorování, spusťte následující příkaz:

juju config kubernetes-worker allow-privileged=true

Připojení ke clusteru

Použitá stará verze agentů

Některé starší verze agenta funkci Připojení ke clusteru nepodporují. Pokud používáte některou z těchto verzí, může se zobrazit tato chyba:

az connectedk8s proxy -n AzureArcTest -g AzureArcTest
Hybrid connection for the target resource does not exist. Agent might not have started successfully.

Nezapomeňte použít connectedk8s rozšíření Azure CLI s verzí >= 1.2.0 a pak cluster znovu připojte ke službě Azure Arc. Také ověřte, že jste splnili všechny požadavky na síť potřebné pro Kubernetes s podporou arc.

Pokud je váš cluster za odchozím proxy serverem nebo bránou firewall, ověřte, že jsou povolená připojení protokolu websocket pro *.servicebus.windows.net, což je vyžadováno speciálně pro funkci Připojení ke clusteru .

Funkce připojení ke clusteru je zakázaná.

clusterconnect-agent Pokud pody a kube-aad-proxy chybí, je funkce připojení clusteru v clusteru pravděpodobně zakázaná a az connectedk8s proxy nepodaří se navázat relaci s clusterem.

az connectedk8s proxy -n AzureArcTest -g AzureArcTest
Cannot connect to the hybrid connection because no agent is connected in the target arc resource.

Pokud chcete tuto chybu vyřešit, povolte ve svém clusteru funkci Připojení ke clusteru.

az connectedk8s enable-features --features cluster-connect -n $CLUSTER_NAME -g $RESOURCE_GROUP

Povolení vlastních umístění pomocí instančního objektu

Při připojování clusteru ke službě Azure Arc nebo povolení vlastních umístění v existujícím clusteru se může zobrazit následující upozornění:

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

K tomuto upozornění dochází, když k přihlášení k Azure použijete instanční objekt. Instanční objekt nemá oprávnění k získání informací o aplikaci používané službou Azure Arc. Pokud se chcete této chybě vyhnout, postupujte následovně:

  1. Přihlaste se k Azure CLI pomocí svého uživatelského účtu. Načtěte ID objektu aplikace Azure AD, kterou používá služba Azure Arc:

    az ad sp show --id bc313c14-388c-4e7d-a58e-70017303ee3b --query objectId -o tsv
    
  2. Přihlaste se k Azure CLI pomocí instančního objektu. <objectId> Pomocí hodnoty z výše uvedeného kroku povolte vlastní umístění v clusteru:

    • Pokud chcete povolit vlastní umístění při připojování clusteru ke službě Arc, spusťte následující příkaz:

      az connectedk8s connect -n <cluster-name> -g <resource-group-name> --custom-locations-oid <objectId>   
      
    • Pokud chcete povolit vlastní umístění v existujícím clusteru Kubernetes s podporou Azure Arc, spusťte následující příkaz:

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

Open Service Mesh s podporou Azure Arc

Následující postup poskytuje pokyny k ověření nasazení všech komponent rozšíření Open Service Mesh (OSM) v clusteru.

Kontrola nasazení kontroleru OSM

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

Pokud je kontroler OSM v pořádku, zobrazí se výstup podobný následujícímu:

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

Kontrola podu kontroleru OSM

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

Pokud je kontroler OSM v pořádku, zobrazí se výstup podobný následujícímu:

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

I když byl jeden kontroler v určitém okamžiku vyřazen , existuje jiný, který je READY 1/1 a Running s restartováním 0 . Pokud je sloupec READY jiný než 1/1, síť služby by byla v poškozeném stavu. Sloupec READY s 0/1 označuje, že kontejner řídicí roviny selhává. Pomocí následujícího příkazu zkontrolujte protokoly kontroleru:

kubectl logs -n arc-osm-system -l app=osm-controller

Sloupec READY s číslem vyšším než 1 za parametrem / by značil, že jsou nainstalovány sajdkáry. Ovladač OSM by s největší pravděpodobností nefungoval s žádnými sajdkárami připojenými k němu.

Kontrola služby kontroleru OSM

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

Pokud je řadič OSM v pořádku, zobrazí se následující výstup:

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

Poznámka

To CLUSTER-IP by bylo jiné. Služba NAME a PORT(S) musí být stejná jako ve výstupu.

Kontrola koncových bodů kontroleru OSM

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

Pokud je kontroler OSM v pořádku, zobrazí se výstup podobný následujícímu:

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

Pokud cluster uživatele nemá pro osm-controller, ENDPOINTS řídicí rovina není v pořádku. Tento stav, který není v pořádku, může být způsobený chybou podu kontroleru OSM nebo se pod nikdy nenasadil správně.

Kontrola nasazení injektoru OSM

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

Pokud je injektor OSM v pořádku, zobrazí se výstup podobný následujícímu:

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

Kontrola podu OSM Injektor

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

Pokud je injektor OSM v pořádku, zobrazí se výstup podobný následujícímu:

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

Sloupec READY musí být 1/1. Jakákoli jiná hodnota by značila, že pod osm-injektor není v pořádku.

Kontrola služby injektoru OSM

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

Pokud je injektor OSM v pořádku, zobrazí se výstup podobný následujícímu:

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

Ujistěte se, že IP adresa uvedená pro osm-injector službu je 9090. Nemělo by existovat žádné EXTERNAL-IP.

Kontrola koncových bodů injektoru OSM

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

Pokud je injektor OSM v pořádku, zobrazí se výstup podobný následujícímu:

NAME           ENDPOINTS           AGE
osm-injector   10.240.1.172:9090   75m

Aby osm fungovalo, musí existovat alespoň jeden koncový bod pro osm-injector. IP adresa koncových bodů osm injektoru se bude lišit. Port 9090 musí být stejný.

Kontrola ověřování a mutování webhooků

kubectl get ValidatingWebhookConfiguration --selector app=osm-controller

Pokud je webhook ověřování v pořádku, zobrazí se výstup podobný následujícímu:

NAME                     WEBHOOKS   AGE
osm-validator-mesh-osm   1          81m
kubectl get MutatingWebhookConfiguration --selector app=osm-injector

Pokud je webhook mutování v pořádku, zobrazí se výstup podobný následujícímu:

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

Pomocí následujícího příkazu vyhledejte službu a sadu certifikační autority ověřujícího webhooku:

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

Dobře nakonfigurovaná konfigurace ověřování webhooku bude mít výstup podobný následujícímu:

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

Pomocí následujícího příkazu vyhledejte službu a sadu certifikační autority webhooku Mutating :

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

Dobře nakonfigurovaná konfigurace mutování webhooku bude mít výstup podobný následujícímu:

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

Pomocí následujícího příkazu zkontrolujte, jestli řadič OSM udělil webhooku ověřování (nebo mutování) sadu certifikační autority:

kubectl get ValidatingWebhookConfiguration osm-validator-mesh-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

Příklad výstupu:

1845

Číslo ve výstupu označuje počet bajtů nebo velikost sady certifikační autority. Pokud je tato hodnota prázdná, 0 nebo číslo pod 1000, není správně zřízena sada certifikační autority. Bez správné sady certifikační autority ValidatingWebhook vyvolá chyba.

osm-mesh-config Kontrola prostředku

Zkontrolujte, jestli prostředek existuje:

kubectl get meshconfig osm-mesh-config -n arc-osm-system

Zkontrolujte obsah OSM MeshConfig:

kubectl get meshconfig osm-mesh-config -n arc-osm-system -o yaml
apiVersion: config.openservicemesh.io/v1alpha1
kind: MeshConfig
metadata:
  creationTimestamp: "0000-00-00A00:00:00A"
  generation: 1
  name: osm-mesh-config
  namespace: arc-osm-system
  resourceVersion: "2494"
  uid: 6c4d67f3-c241-4aeb-bf4f-b029b08faa31
spec:
  certificate:
    certKeyBitSize: 2048
    serviceCertValidityDuration: 24h
  featureFlags:
    enableAsyncProxyServiceMapping: false
    enableEgressPolicy: true
    enableEnvoyActiveHealthChecks: false
    enableIngressBackendPolicy: true
    enableMulticlusterMode: false
    enableRetryPolicy: false
    enableSnapshotCacheMode: false
    enableWASMStats: true
  observability:
    enableDebugServer: false
    osmLogLevel: info
    tracing:
      enable: false
  sidecar:
    configResyncInterval: 0s
    enablePrivilegedInitContainer: false
    logLevel: error
    resources: {}
  traffic:
    enableEgress: false
    enablePermissiveTrafficPolicyMode: true
    inboundExternalAuthorization:
      enable: false
      failureModeAllow: false
      statPrefix: inboundExtAuthz
      timeout: 1s
    inboundPortExclusionList: []
    outboundIPRangeExclusionList: []
    outboundPortExclusionList: []
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""

osm-mesh-config hodnoty prostředků:

Klíč Typ Výchozí hodnota Příklady příkazů Kubectl Patch
spec.traffic.enableEgress bool false kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"traffic":{"enableEgress":false}}}' --type=merge
spec.traffic.enablePermissiveTrafficPolicyMode bool true kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"traffic":{"enablePermissiveTrafficPolicyMode":true}}}' --type=merge
spec.traffic.outboundPortExclusionList array [] kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"traffic":{"outboundPortExclusionList":[6379,8080]}}}' --type=merge
spec.traffic.outboundIPRangeExclusionList array [] kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"traffic":{"outboundIPRangeExclusionList":["10.0.0.0/32","1.1.1.1/24"]}}}' --type=merge
spec.traffic.inboundPortExclusionList array [] kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"traffic":{"inboundPortExclusionList":[6379,8080]}}}' --type=merge
spec.certificate.serviceCertValidityDuration řetězec "24h" kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"certificate":{"serviceCertValidityDuration":"24h"}}}' --type=merge
spec.observability.enableDebugServer bool false kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"observability":{"enableDebugServer":false}}}' --type=merge
spec.observability.osmLogLevel řetězec "info" kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"observability":{"tracing":{"osmLogLevel": "info"}}}}' --type=merge
spec.observability.tracing.enable bool false kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"observability":{"tracing":{"enable":true}}}}' --type=merge
spec.sidecar.enablePrivilegedInitContainer bool false kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"sidecar":{"enablePrivilegedInitContainer":true}}}' --type=merge
spec.sidecar.logLevel řetězec "error" kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"sidecar":{"logLevel":"error"}}}' --type=merge
spec.featureFlags.enableWASMStats bool "true" kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"featureFlags":{"enableWASMStats":"true"}}}' --type=merge
spec.featureFlags.enableEgressPolicy bool "true" kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"featureFlags":{"enableEgressPolicy":"true"}}}' --type=merge
spec.featureFlags.enableMulticlusterMode bool "false" kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"featureFlags":{"enableMulticlusterMode":"false"}}}' --type=merge
spec.featureFlags.enableSnapshotCacheMode bool "false" kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"featureFlags":{"enableSnapshotCacheMode":"false"}}}' --type=merge
spec.featureFlags.enableAsyncProxyServiceMapping bool "false" kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"featureFlags":{"enableAsyncProxyServiceMapping":"false"}}}' --type=merge
spec.featureFlags.enableIngressBackendPolicy bool "true" kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"featureFlags":{"enableIngressBackendPolicy":"true"}}}' --type=merge
spec.featureFlags.enableEnvoyActiveHealthChecks bool "false" kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"featureFlags":{"enableEnvoyActiveHealthChecks":"false"}}}' --type=merge

Kontrola oborů názvů

Poznámka

Obor názvů arc-osm-system se nikdy nebude účastnit sítě služby a nikdy nebude označen ani opatřen poznámkami s klíči a hodnotami níže.

Pomocí příkazu osm namespace add připojíme obory názvů k dané síti služby. Pokud je obor názvů Kubernetes součástí sítě, ověřte následující:

Zobrazení poznámek oboru názvů bookbuyer:

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

Musí být k dispozici následující poznámka:

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

Zobrazení popisků oboru názvů bookbuyer:

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

Musí být k dispozici následující popisek:

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

Pokud rozhraní příkazového řádku nepoužíváte osm , můžete tyto poznámky do oborů názvů přidat také ručně. Pokud obor názvů není opatřen poznámkami "openservicemesh.io/sidecar-injection": "enabled"nebo není označený "openservicemesh.io/monitored-by": "osm", injektor OSM nepřidá sajdkáru envoy.

Poznámka

Po osm namespace add zavolání, pouze nové pody budou injektovány se sajdkár envoy. Existující pody se musí restartovat pomocí kubectl rollout restart deployment příkazu .

Ověření identifikátorů SMI CRD

Pomocí následujícího příkazu zkontrolujte, jestli cluster obsahuje požadované vlastní definice prostředků (CRD):

kubectl get crds

Ujistěte se, že identifikátory CRD odpovídají verzím dostupným ve větvi vydané verze. Pokud například používáte OSM-Arc v1.0.0-1, přejděte na stránku podporované verze SMI a v rozevíracím seznamu Vydané verze vyberte verzi 1.0 a zkontrolujte, které verze CRD se používají.

Pomocí následujícího příkazu získejte nainstalované verze disků CRD:

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

Pokud identifikátory CRD chybí, nainstalujte je do clusteru pomocí následujících příkazů. Pokud používáte verzi OSM-Arc, která není verze 1.0, ujistěte se, že jste v příkazu nahradili verzi (například verze 1.1.0 bude release-v1.1).

kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm/release-v1.0/cmd/osm-bootstrap/crds/smi_http_route_group.yaml

kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm/release-v1.0/cmd/osm-bootstrap/crds/smi_tcp_route.yaml

kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm/release-v1.0/cmd/osm-bootstrap/crds/smi_traffic_access.yaml

kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm/release-v1.0/cmd/osm-bootstrap/crds/smi_traffic_split.yaml

Pokud chcete zobrazit změny CRD mezi verzemi, projděte si poznámky k verzi OSM.

Řešení potíží se správou certifikátů

Informace o tom, jak OSM vydává a spravuje certifikáty pro proxy servery envoy spuštěné na podech aplikací, najdete na webu dokumentace OSM.

Upgradovat vyslance

Když se v oboru názvů monitorovaném doplňkem vytvoří nový pod, osm do podu vloží sajdkár proxy serveru envoy . Pokud je potřeba aktualizovat verzi envoy, postupujte podle pokynů v průvodci upgradem na webu dokumentace k OSM.