Ř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:
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+.
Před spuštěním
az connectedk8s connnect
pří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.
Spusťte následující příkaz:
kubectl get pods -n azure-arc
Zkontrolujte, jestli se
clusterconnect-agent
na podech neboconfig-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
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íť .clusterconnect-agent
Pokud jsou pody aconfig-agent
spuštěné, alekube-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.kube-aad-proxy
Pokud je pod zablokovaný veContainerCreating
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:
Odstraňte prostředek Kubernetes s podporou Azure Arc v Azure Portal.
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
Nainstalujte na počítač stabilní verzi Helmu 3 místo verze s kandidátem na vydání.
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 run
je , 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 limits
je , 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ě:
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
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.