Azure Arc mengaktifkan pemecahan masalah Kube

Dokumen ini menyediakan panduan pemecahan masalah untuk masalah konektivitas, izin, dan agen.

Pemecahan Masalah Umum

Azure CLI

Sebelum menggunakan perintah CLI az connectedk8s atau az k8s-configuration, periksa apakah Azure CLI sudah diatur untuk bekerja pada langganan Azure yang benar.

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

Agen Azure Arc

Semua agen untuk Azure Arc dengan Kube yang diaktifkan disebarkan sebagai Pod di azure-arc namespace layanan. Semua Pod harus berjalan dan melewati pemeriksaan kesehatan.

Pertama, verifikasi rilis helm Azure Arc:

$ 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

Jika rilis Helm tidak ditemukan atau hilang, coba sambungkan klaster ke Azure Arc lagi.

Jika rilis Helm hadir dengan STATUS: deployed, periksa status agen menggunakan 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

Semua Pod harus menampilkan STATUS sebagai Running dengan baik 3/3 atau 2/2 di bawah kolom READY. Ambil log dan jelaskan Pod yang mengembalikan Error atau CrashLoopBackOff. Jika ada Pod yang terjebak dalam status Pending, mungkin ada sumber daya yang tidak mencukupi pada node kluster. Menskalakan klaster Anda dapat membuat Pod-pod ini beralih ke status Running.

Hubungkan kluster Kubernetes ke Azure Arc

Menyambungkan klaster ke Azure memerlukan akses ke langganan Azure dan akses cluster-admin ke klaster target. Jika Anda tidak dapat mencapai kluster atau Anda memiliki izin yang tidak memadai, sambungan klaster ke Azure Arc akan gagal.

Azure CLI tidak dapat mengunduh bagan Helm untuk agen Azure Arc

Jika Anda menggunakan versi Helm >= 3.7.0, Anda akan mengalami kesalahan berikut saat az connectedk8s connect dijalankan untuk menyambungkan kluster ke 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.

Dalam hal ini, Anda harus memasang versi helm 3sebelumnya, di mana versi < 3.7.0. Setelah ini, jalankan az connectedk8s connect perintah lagi untuk menyambungkan kluster ke Azure Arc.

Izin kluster tidak mencukupi

Jika file kubeconfig yang disediakan tidak memiliki izin yang memadai untuk menginstal agen Azure Arc, maka perintah Azure CLI akan menghasilkan kesalahan.

$ 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

Pengguna yang menghubungkan klaster ke Azure Arc harus memiliki peran cluster-admin yang ditetapkan untuk mereka pada klaster.

Tidak dapat menyambungkan kluster OpenShift ke Azure Arc

Jika waktu az connectedk8s connect habis dan gagal saat menghubungkan kluster OpenShift ke Azure Arc, periksa hal berikut:

  1. Kluster OpenShift perlu memenuhi prasyarat versi: 4.5.41+ atau 4.6.35+ atau 4.7.18+.

  2. Sebelum menjalankan az connectedk8s connnect, perintah berikut perlu dijalankan pada kluster:

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

Batas waktu penginstalan

Menyambungkan kluster Kube ke Azure Arc dengan Kube yang diaktifkan memerlukan pemasangan agen Arc Azure pada kluster tersebut. Jika klaster berjalan melalui koneksi internet yang lambat, penarikan gambar kontainer untuk agen mungkin memakan waktu lebih lama daripada batas waktu 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...

Masalah Helm

Helm versi v3.3.0-rc.1 memiliki masalah yaitu instalasi/pemutakhiran helm (digunakan oleh ekstensi CLI connectedk8s) menghasilkan berjalannya semua kait yang mengarah ke kesalahan berikut:

$ 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

Untuk mengatasi masalah ini, ikuti langkah-langkah berikut:

  1. Hapus sumber daya Azure Arc dengan Kube yang di aktifkan di portal Microsoft Azure.

  2. Jalankan perintah berikut ini di komputer Anda:

    kubectl delete ns azure-arc
    kubectl delete clusterrolebinding azure-arc-operator
    kubectl delete secret sh.helm.release.v1.azure-arc.v1
    
  3. Instal versi stabil Helm 3 di komputer Anda bukan versi kandidat rilis.

  4. Jalankan perintah az connectedk8s connect dengan nilai yang sesuai untuk menyambungkan klaster ke Azure Arc.

Manajemen konfigurasi

Umum

Untuk membantu memecahkan masalah dengan sumber daya konfigurasi, jalankan perintah az dengan parameter --debug yang ditentukan.

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

Membuat konfigurasi

Izin menulis pada sumber daya Azure Arc dengan Kubernetes yang diaktifkan (Microsoft.Kubernetes/connectedClusters/Write) diperlukan dan cukup untuk membuat konfigurasi ada kluster tersebut.

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

Pemantauan

Azure Monitor untuk kontainer mengharuskan DaemonSet-nya dijalankan dalam mode istimewa. Agar berhasil menyiapkan klaster Canonical Charmed Kubernetes untuk pemantauan, jalankan perintah berikut:

juju config kubernetes-worker allow-privileged=true

Aktifkan lokasi kustom menggunakan perwakilan layanan

Saat Anda menyambungkan klaster ke Azure Arc atau saat mengaktifkan fitur lokasi kustom pada klaster yang sudah ada, Anda dapat mengamati peringatan berikut:

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

Peringatan di atas terlihat ketika Anda telah menggunakan perwakilan layanan untuk masuk ke Azure dan perwakilan layanan ini tidak memiliki izin untuk mendapatkan informasi aplikasi yang digunakan oleh layanan Azure Arc. Untuk menghindari kesalahan ini, jalankan langkah-langkah berikut:

  1. Ambil ID Objek aplikasi Microsoft Azure AD yang digunakan oleh layanan Azure Arc:

    az ad sp show --id 'bc313c14-388c-4e7d-a58e-70017303ee3b' --query objectId -o tsv
    
  2. Gunakan nilai <objectId> dari langkah di atas untuk mengaktifkan fitur lokasi kustom pada kluster:

    • Jika Anda mengaktifkan fitur lokasi kustom sebagai bagian dari menyambungkan klaster ke Arc, jalankan perintah berikut:

      az connectedk8s connect -n <cluster-name> -g <resource-group-name> --custom-locations-oid <objectId>   
      
    • Jika Anda mengaktifkan fitur lokasi kustom pada kluster Azure Arc dengan Kube yang diaktifkan yang ada, jalankan perintah berikut:

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

Setelah izin di atas diberikan, Anda sekarang dapat melanjutkan untuk mengaktifkan fitur lokasi kustom pada klaster.

Mesh Layanan Terbuka Azure Arc-diaktifkan

Langkah-langkah pemecahan masalah berikut ini memberikan panduan tentang memvalidasi penyebaran semua komponen ekstensi Open Service Mesh pada klaster Anda.

1. Periksa Penerapan Pengontrol OSM

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

Jika Pengontrol OSM sehat, Anda akan mendapatkan output yang mirip dengan output berikut:

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

2. Periksa Pod Pengontrol OSM

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

Jika Pengontrol OSM sehat, Anda akan mendapatkan output yang mirip dengan output berikut:

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

Meskipun kami memiliki satu pengontrol yang dikeluarkan di beberapa titik, kami memiliki satu lagi yaitu READY 1/1 dan Runningdengan hidupkan ulang 0. Jika kolom READY berisi apa pun selain 1/1 maka jala layanan akan berada dalam status rusak. Kolom READY dengan 0/1 menunjukkan kontainer bidang kontrol rusak- kita perlu mendapatkan log. Lihat bagian Get OSM Controller Logs from Azure Support Center di bawah ini. Kolom READY dengan angka yang lebih tinggi dari 1 setelah /akan menunjukkan bahwa ada sespan yang diinstal. Pengontrol OSM kemungkinan besar tidak akan bekerja dengan sespan apa pun yang melekat padanya.

3. Periksa Layanan Pengontrol OSM

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

Jika Pengontrol OSM sehat, Anda akan mendapatkan output berikut:

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

Catatan: CLUSTER-IP akan berbeda. Layanan NAME dan PORT(S) harus sama seperti yang terlihat dalam output.

4. Periksa Titik Akhir Pengontrol OSM:

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

Jika Pengontrol OSM sehat, Anda akan mendapatkan output yang mirip dengan output berikut:

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

Jika klaster pengguna tidak memiliki ENDPOINTS untuk osm-controller ini menunjukkan bahwa bidang kontrol tidak sehat. Hal ini mungkin disebabkan oleh Pod Pengontrol OSM yang mengalami crash, atau tidak pernah disebarkan dengan benar.

5. Periksa Penyebaran OSM Injector

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

Jika OSM Injector sehat, Anda akan mendapatkan output yang mirip dengan output berikut:

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

6. Periksa Pod OSM Injector

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

Jika OSM Injector sehat, Anda akan mendapatkan output yang mirip dengan output berikut:

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

Kolom READY harus 1/1. Nilai lain akan menunjukkan pod osm-injector yang tidak sehat.

7. Periksa Layanan OSM Injector

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

Jika OSM Injector sehat, Anda akan mendapatkan output yang mirip dengan output berikut:

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

Pastikan alamat IP yang tercantum untuk layanan osm-injector adalah 9090. Seharusnya tidak ada EXTERNAL-IP.

8. Periksa Titik Akhir OSM Injector

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

Jika OSM Injector sehat, Anda akan mendapatkan output yang mirip dengan output berikut:

NAME           ENDPOINTS           AGE
osm-injector   10.240.1.172:9090   75m

Agar OSM berfungsi, harus ada setidaknya satu titik akhir untuk osm-injector. Alamat IP titik akhir OSM Injector Anda akan berbeda. Port 9090 harus sama.

9. Periksa Validasi dan Mutasi webhook:

kubectl get ValidatingWebhookConfiguration --selector app=osm-controller

Jika Validating Webhook sehat, Anda akan mendapatkan output yang mirip dengan output berikut:

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

Jika Mutating Webhook sehat, Anda akan mendapatkan output yang mirip dengan output berikut:

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

Periksa layanan dan bundel CA dari Validating webhook:

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

Validating Webhook Configuration yang dikonfigurasi dengan baik akan memiliki output berikut:

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

Periksa layanan dan bundel CA dari Mutating webhook:

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

Mutating Webhook Configuration yang dikonfigurasi dengan baik akan memiliki output berikut:

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

Periksa apakah Pengontrol OSM telah memberikan Webhook Validasi (atau Mutasi) bundel CA dengan menggunakan perintah berikut:

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

Contoh output:

1845

Angka pada output menunjukkan jumlah byte, atau ukuran Bundel CA. Jika ini kosong, 0, atau beberapa angka di bawah 1000 itu menunjukkan bahwa Bundel CA tidak disediakan dengan benar. Tanpa Bundel CA yang benar, ValidatingWebhook akan menghasilkan kesalahan dan melarang Anda membuat perubahan pada ConfigMap osm-config di namespace arc-osm-system.

Contoh kesalahan saat Bundel CA salah:

  • Upaya untuk mengubah ConfigMap osm-config:
    kubectl patch ConfigMap osm-config -n arc-osm-system --type merge --patch '{"data":{"config_resync_interval":"2m"}}'
    
  • Kesalahan output:
    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
    

Gunakan salah satu solusi berikut ini saat Validating Webhook Configuration memiliki sertifikat yang buruk:

  • Opsi 1. Hidupkan Ulang Pengontrol OSM - Ini akan menghidupkan ulang Pengontrol OSM. Pada awalnya, ia akan menimpa Bundel CA dari webhook Bermutasi dan Memvalidasi.

    kubectl rollout restart deployment -n arc-osm-system osm-controller
    
  • Opsi 2. Hapus Validating Webhook - menghapus Validating Webhook membuat mutasi ConfigMap osm-config tidak lagi divalidasi. Setiap patch akan pergi melalui. Pengontrol OSM mungkin harus dihidupkan ulang untuk menulis ulang Bundel CA dengan cepat.

    kubectl delete ValidatingWebhookConfiguration arc-osm-webhook-osm
    
  • Opsi 3. Hapus dan Tambal: Perintah berikut akan menghapus webhook yang memvalidasi, membuat Anda dapat menambahkan nilai apa pun, dan akan segera mencoba menerapkan tambalan

    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. Periksa osm-config ConfigMap

Catatan

Pengontrol OSM tidak memerlukan adanya ConfigMap osm-config namespace arc-osm-system. Pengontrol memiliki nilai default yang wajar untuk konfigurasi dan dapat beroperasi tanpanya.

Periksa keberadaannya:

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

Periksa konten dari osm-config ConfigMap:

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

Anda akan mendapatkan output berikut:

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

Lihat dokumentasi OSM ConfigMap untuk memahami nilai ConfigMap osm-config.

11. Periksa Namespace layanan

Catatan

Namespace sistem arc-osm tidak akan pernah berpartisipasi dalam jala layanan dan tidak akan pernah diberi label dan/atau dianotasikan dengan kunci/nilai di bawah ini.

Kami menggunakan perintah osm namespace add untuk bergabung dengan namespace layanan ke jala layanan tertentu. Ketika namespace kubernetes adalah bagian dari jala, berikut ini harus benar:

Menampilkan anotasi namespace bookbuyer:

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

Anotasi berikut harus ada:

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

Menampilkan label namespace bookbuyer:

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

Label berikut harus ada:

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

Perhatikan bahwa jika Anda tidak menggunakan CLI osm, Anda juga dapat menambahkan anotasi ini secara manual ke namespace Anda. Jika namespace layanan tidak dianotasikan dengan "openservicemesh.io/sidecar-injection": "enabled" atau tidak diberi label dengan "openservicemesh.io/monitored-by": "osm" OSM Injector tidak akan menambahkan sidecar Envoy.

Catatan

Setelah osm namespace add dipanggil maka hanya pod baru yang akan dimasukkan dengan sidecar Envoy. Pod yang ada harus dihidupkan ulang dengan perintah kubectl rollout restard deployment.

12. Verifikasi SMI CRD

Periksa apakah kluster memiliki CRD yang diperlukan:

kubectl get crds

Pastikan bahwa CRD sesuai dengan versi hulu OSM yang sama. Mis. jika Anda menggunakan v0.8.4, pastikan bahwa CRD cocok dengan yang tersedia di cabang rilis v0.8.4 proyek OSM OSS. Rujuk catatan rilis OSM.

Dapatkan versi CRD yang diinstal dengan perintah ini:

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

Jika CRD hilang, gunakan perintah berikut untuk menginstalnya pada kluster tersebut. Pastikan Anda mengganti versi dalam perintah.

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