Azure Arc-enabled Kubernetes and GitOps استكشاف الأخطاء وإصلاحها

يوفر هذا المستند أدلة استكشاف الأخطاء وإصلاحها للمشكلات المتعلقة باتصال Kubernetes والأذونات والوكلاء الممكنين من Azure Arc. كما يوفر أدلة استكشاف الأخطاء وإصلاحها ل Azure GitOps ، والتي يمكن استخدامها إما في مجموعات Kubernetes التي تدعم Azure Arc أو Azure Kubernetes Service (AKS).

استكشاف الأخطاء وإصلاحها بشكل عام

Azure CLI

قبل استخدام az connectedk8s أوامر CLI أو az k8s-configuration أوامر CLI، تحقق من تعيين Azure CLI للعمل مقابل اشتراك Azure الصحيح.

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

Azure Arc agents

يتم نشر جميع وكلاء Kubernetes التي تدعم Azure Arc كقرون في azure-arc مساحة الاسم. يجب أن تعمل جميع القرون وتجتاز فحوصاتها الصحية.

أولا، تحقق من إصدار رأس 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

إذا لم يتم العثور على إصدار Helm أو فقده، فحاول توصيل المجموعة ب Azure Arc مرة أخرى.

إذا كان إصدار Helm موجودا مع STATUS: deployed، فتحقق من حالة الوكلاء باستخدام 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

يجب أن تظهر STATUS جميع القرون كما هو الحال Running مع العمود 3/3 أو 2/2 تحته READY . جلب السجلات ووصف القرون التي تعيد Error أو CrashLoopBackOff. إذا كانت أي قرون عالقة في Pending الحالة ، فقد تكون هناك موارد غير كافية على عقد المجموعة. يمكن لتوسيع نطاق مجموعتك أن يجعل هذه القرون تنتقل إلى Running الحالة.

ربط مجموعات Kubernetes ب Azure Arc

يتطلب توصيل المجموعات ب Azure الوصول إلى اشتراك Azure والوصول cluster-admin إلى مجموعة مستهدفة. إذا لم تتمكن من الوصول إلى نظام المجموعة أو لم يكن لديك أذونات كافية، فسيفشل توصيل المجموعة ب Azure Arc.

Azure CLI غير قادر على تنزيل مخطط Helm لوكلاء Azure Arc

إذا كنت تستخدم إصدار >Helm = 3.7.0، فستواجه الخطأ التالي عند az connectedk8s connect تشغيله لتوصيل الكتلة ب 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.

في هذه الحالة ، ستحتاج إلى تثبيت إصدار سابق من Helm 3 ، حيث الإصدار < 3.7.0. بعد ذلك، قم بتشغيل az connectedk8s connect الأمر مرة أخرى لتوصيل الكتلة ب Azure Arc.

أذونات نظام المجموعة غير كافية

إذا لم يكن لدى ملف kubeconfig المقدم أذونات كافية لتثبيت وكلاء Azure Arc، فسيقوم الأمر 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...

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

يجب أن يكون cluster-admin للمستخدم الذي يربط الكتلة ب Azure Arc دور معين له في المجموعة.

غير قادر على توصيل مجموعة OpenShift ب Azure Arc

إذا az connectedk8s connect كان التوقيت قد انتهى وفشل عند توصيل مجموعة OpenShift ب Azure Arc، فتحقق مما يلي:

  1. تحتاج مجموعة OpenShift إلى تلبية المتطلبات الأساسية للإصدار: 4.5.41+ أو 4.6.35+ أو 4.7.18+.

  2. قبل التشغيل az connectedk8s connnect، يجب تشغيل الأمر التالي على نظام المجموعة:

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

مهلات التثبيت

يتطلب توصيل مجموعة Kubernetes ب Kubernetes التي تم تمكين Azure Arc عليها تثبيت عوامل Azure Arc على المجموعة. إذا كانت الكتلة قيد التشغيل عبر اتصال إنترنت بطيء، فقد يستغرق سحب صورة الحاوية للوكلاء وقتا أطول من مهلات 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...

خطأ مهلة Helm

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

إذا ظهرت لك مشكلة مهلة رأس الإدارة أعلاه، فيمكنك استكشاف الأخطاء وإصلاحها على النحو التالي:

  1. شغِّل الأمر التالي:

    kubectl get pods -n azure-arc
    
  2. تحقق مما إذا كانت القرون أو القرون clusterconnect-agentconfig-agent تظهر حالة تعطل ، أو لم تكن جميع الحاويات قيد التشغيل:

    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. إذا لم تكن الشهادة أدناه موجودة، فهذا يعني أنه لم يتم تثبيت الهوية المدارة المعينة من قبل النظام.

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

    قد تكون هذه قضية عابرة. يمكنك محاولة حذف نشر Arc عن طريق تشغيل az connectedk8s delete الأمر وإعادة تثبيته. إذا كنت تواجه هذا باستمرار ، فقد تكون هناك مشكلة في إعدادات الوكيل. يرجى اتباع هذه الخطوات لتوصيل مجموعتك ب Arc عبر وكيل.

  4. إذا كانت القرون clusterconnect-agentconfig-agent قيد التشغيل، ولكن الكبسولة kube-aad-proxy مفقودة، فتحقق من سياسات أمان الكبسولة. تستخدم هذه الحاوية azure-arc-kube-aad-proxy-sa حساب الخدمة ، الذي لا يحتوي على أذونات المسؤول ولكنه يتطلب إذنا لتحميل مسار المضيف.

خطأ في التحقق من صحة Helm

يحتوي إصدار Helm v3.3.0-rc.1 على مشكلة حيث يؤدي تثبيت/ترقية helm (المستخدم بواسطة connectedk8s ملحق CLI) إلى تشغيل جميع الخطافات مما يؤدي إلى الخطأ التالي:

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

للاسترداد من هذه المشكلة، اتبع الخطوات التالية:

  1. حذف مورد Kubernetes الذي تم تمكين Azure arc في مدخل Azure.

  2. قم بتشغيل الأوامر التالية على جهازك:

    kubectl delete ns azure-arc
    kubectl delete clusterrolebinding azure-arc-operator
    kubectl delete secret sh.helm.release.v1.azure-arc.v1
    
  3. قم بتثبيت إصدار مستقر من Helm 3 على جهازك بدلا من الإصدار المرشح للإصدار.

  4. az connectedk8s connect قم بتشغيل الأمر بالقيم المناسبة لتوصيل الكتلة ب Azure Arc.

خطأ في وحدة CryptoHash النمطية

عند محاولة دمج مجموعات Kubernetes إلى النظام الأساسي Azure Arc، قد ترجع البيئة المحلية (على سبيل المثال، وحدة تحكم العميل) رسالة الخطأ التالية:

Cannot load native module 'Crypto.Hash._MD5'

في بعض الأحيان، تفشل الوحدات النمطية التابعة في التنزيل بنجاح عند إضافة الملحقات connectedk8s ومن k8s-configuration خلال Azure CLI أو Azure PowerShell. لحل هذه المشكلة، قم بإزالة الملحقات يدويا ثم قم بإضافتها في البيئة المحلية.

لإزالة الإضافات، استخدم:

az extension remove --name connectedk8s

az extension remove --name k8s-configuration

لإضافة الإضافات، استخدم:

az extension add --name connectedk8s

az extension add --name k8s-configuration

إدارة GitOps

تدفق v1 - عام

للمساعدة في استكشاف مشكلات sourceControlConfigurations المورد (Flux v1) وإصلاحها، قم بتشغيل أوامر az هذه مع --debug تحديد المعلمة:

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

تدفق v1 - إنشاء تكوينات

تعد أذونات الكتابة على مورد Kubernetes (Microsoft.Kubernetes/connectedClusters/Write) الذي تم تمكين Azure Arc ضروريا وكافيا لإنشاء تكوينات على هذه المجموعة.

sourceControlConfigurations بقايا Pending (تدفق 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: ""

تدفق v2 - عام

للمساعدة في استكشاف مشكلات fluxConfigurations المورد (Flux v2) وإصلاحها، قم بتشغيل أوامر az هذه مع --debug تحديد المعلمة:

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

تدفق v2 - أخطاء Webhook / تشغيل جاف

إذا رأيت فشل Flux في التوفيق مع خطأ مثل dry-run failed, error: admission webhook "<webhook>" does not support dry run، فيمكنك حل المشكلة عن طريق العثور على ValidatingWebhookConfiguration أو وتعيين sideEffects إلى None أو MutatingWebhookConfigurationNoneOnDryRun:

لمزيد من المعلومات، راجع كيف أعمل حل webhook does not support dry run الأخطاء؟

تدفق v2 - خطأ في تثبيت الامتداد microsoft.flux

يقوم الملحق microsoft.flux بتثبيت وحدات تحكم Flux ووكلاء Azure GitOps في مجموعات Kubernetes أو Azure Kubernetes Service (AKS) التي تدعم Azure Arc. إذا لم يكن الملحق مثبتا بالفعل في نظام مجموعة وقمت بإنشاء مورد تكوين GitOps لهذه المجموعة، تثبيت الملحق تلقائيا.

إذا واجهت خطأ أثناء التثبيت أو إذا كان الملحق في حالة فشل، فيمكنك أولا تشغيل برنامج نصي للتحقيق. يمكن تعيين معلمة نوع الكتلة إلى connectedClusters مجموعة ممكنة بواسطة Arc أو managedClusters لمجموعة AKS. سيكون اسم الإضافة microsoft.flux "تدفق" إذا تم تثبيت الإضافة تلقائيا أثناء إنشاء تكوين GitOps. ابحث في كائن "الحالات" للحصول على معلومات.

ومن الأمثلة على ذلك:

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

مثال آخر:

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

مثال آخر من البوابة:

{'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'}]}

بالنسبة لجميع هذه الحالات، تتمثل إجراءات المعالجة المحتملة في فرض حذف الملحق وإزالة تثبيت إصدار Helm وحذف flux-system مساحة الاسم من المجموعة.

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

بعض الجوانب الأخرى التي يجب مراعاتها:

  • بالنسبة إلى مجموعة AKS، تأكد من تمكين علامة الميزة التالية في الاشتراك: Microsoft.ContainerService/AKS-ExtensionManager.

    az feature register --namespace Microsoft.ContainerService --name AKS-ExtensionManager
    
  • تأكد من أن المجموعة لا تحتوي على أية نهج تقيد إنشاء flux-system مساحة الاسم أو الموارد في مساحة الاسم هذه.

مع إنجاز هذه الإجراءات ، يمكنك إما إعادة إنشاء تكوين تدفق يقوم بتثبيت ملحق التدفق تلقائيا أو يمكنك إعادة تثبيت ملحق التدفق يدويا.

Flux v2 - تثبيت الامتداد microsoft.flux في مجموعة مع تمكين Azure AD Pod Identity

إذا حاولت تثبيت ملحق التدفق في نظام مجموعة يحتوي على تمكين هوية Pod Pod ل Azure Active Directory (Azure AD)، فقد يحدث خطأ في جراب عامل الملحق.

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

ترجع حالة الإضافة أيضا ك "فشل".

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

المشكلة هي أن جراب وكيل التمديد يحاول الحصول على الرمز المميز الخاص به من IMDS على المجموعة من أجل التحدث إلى خدمة التمديد في Azure. ومع ذلك ، يتم اعتراض طلب الرمز المميز هذا بواسطة هوية pod (التفاصيل هنا).

الحل البديل هو إنشاء AzurePodIdentityException Azure AD من شأنه أن يخبر Pod Identity بتجاهل طلبات الرمز المميز من قرون امتداد التدفق.

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

المراقبة

يتطلب Azure Monitor للحاويات تشغيل DaemonSet الخاص به في الوضع المميز. لإعداد مجموعة Kubernetes ساحرة Canonical للمراقبة بنجاح، قم بتشغيل الأمر التالي:

juju config kubernetes-worker allow-privileged=true

اتصال الكتلة

النسخة القديمة من الوكلاء المستخدمين

سيؤدي استخدام الإصدار الأقدم من الوكلاء حيث لم يتم دعم ميزة الاتصال نظام المجموعة بعد إلى حدوث الخطأ التالي:

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

عند حدوث ذلك، تأكد من أنك تستخدم connectedk8s امتداد Azure CLI للإصدار >= 1.2.0 وقم بتوصيل الكتلة مرة أخرى ب Azure Arc. تحقق أيضا من أنك استوفيت جميع متطلبات الشبكة الأساسية اللازمة ل Kubernetes التي تدعم Arc. إذا كانت الكتلة الخاصة بك خلف وكيل صادر أو جدار حماية، فتحقق من تمكين اتصالات websocket المطلوبة خصيصا لميزة *.servicebus.windows.netالاتصال نظام المجموعة.

تم تعطيل ميزة الاتصال المجموعة

إذا تم تعطيل ميزة الاتصال نظام المجموعة على نظام المجموعة، فسوف az connectedk8s proxy تفشل في إنشاء جلسة عمل مع المجموعة.

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

لحل هذا الخطأ، قم بتمكين ميزة الاتصال نظام المجموعة على نظام المجموعة الخاص بك.

تمكين المواقع المخصصة باستخدام مبدأ الخدمة

عند توصيل مجموعتك ب Azure Arc أو عند تمكين ميزة المواقع المخصصة على نظام مجموعة موجود، يمكنك ملاحظة التحذير التالي:

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

يتم ملاحظة التحذير أعلاه عند استخدام مبدأ خدمة لتسجيل الدخول إلى Azure وليس لدى مدير الخدمة هذا أذونات للحصول على معلومات التطبيق المستخدم بواسطة خدمة Azure Arc. لتجنب هذا الخطأ، قم بتنفيذ الخطوات التالية:

  1. جلب معرف الكائن الخاص بتطبيق Azure AD المستخدم بواسطة خدمة Azure Arc:

    az ad sp show --id bc313c14-388c-4e7d-a58e-70017303ee3b --query objectId -o tsv
    
  2. <objectId> استخدم القيمة من الخطوة أعلاه لتمكين ميزة المواقع المخصصة على المجموعة:

    • إذا كنت تقوم بتمكين ميزة المواقع المخصصة كجزء من توصيل الكتلة ب Arc، فقم بتشغيل الأمر التالي:

      az connectedk8s connect -n <cluster-name> -g <resource-group-name> --custom-locations-oid <objectId>   
      
    • إذا كنت تقوم بتمكين ميزة المواقع المخصصة على مجموعة Kubernetes موجودة ممكنة بواسطة Azure Arc، فقم بتشغيل الأمر التالي:

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

بمجرد منح الأذونات المذكورة أعلاه ، يمكنك الآن المتابعة لتمكين ميزة الموقع المخصص على المجموعة.

Azure Arc-enabled Open Service Mesh

توفر خطوات استكشاف الأخطاء وإصلاحها التالية إرشادات حول التحقق من صحة نشر كافة مكونات ملحق Mesh Open Service على نظام المجموعة الخاص بك.

التحقق من نشر وحدة تحكم OSM

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

إذا كانت وحدة تحكم OSM سليمة ، فستحصل على إخراج مشابه للإخراج التالي:

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

تحقق من جراب وحدة تحكم OSM

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

إذا كانت وحدة تحكم OSM سليمة ، فستحصل على إخراج مشابه للإخراج التالي:

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

على الرغم من أنه تم إخلاء وحدة تحكم واحدة في مرحلة ما ، إلا أن لدينا وحدة تحكم أخرى مع READY 1/1Running0 إعادة التشغيل. إذا كان العمود READY أي شيء آخر 1/1 غير شبكة الخدمة سيكون في حالة مكسورة. يشير العمود READY الذي يحتوي 0/1 على حاوية مستوى التحكم إلى تحطم - نحتاج إلى الحصول على سجلات. استخدم الأمر التالي لفحص سجلات وحدة التحكم:

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

العمود READY الذي يحتوي على رقم أعلى من 1 بعد / الإشارة إلى وجود سيارات جانبية مثبتة. من المرجح ألا تعمل وحدة تحكم OSM مع أي سيارات جانبية متصلة بها.

تحقق من خدمة وحدة تحكم OSM

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

إذا كانت وحدة تحكم OSM سليمة ، فسيكون لديك الإخراج التالي:

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

ملاحظة

CLUSTER-IP سيكون مختلفا. الخدمة NAME ويجب PORT(S) أن تكون هي نفسها كما هو موضح في الإخراج.

تحقق من نقاط نهاية وحدة تحكم OSM

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

إذا كانت وحدة تحكم OSM سليمة ، فستحصل على إخراج مشابه للإخراج التالي:

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

إذا كانت مجموعة المستخدم لا تحتوي على أي ENDPOINTS شيء لهذا osm-controller ، فسيشير ذلك إلى أن مستوى التحكم غير صحي. قد يحدث هذا بسبب تعطل جراب وحدة تحكم OSM أو لم يتم نشره بشكل صحيح.

تحقق من نشر حاقن OSM

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

إذا كان حاقن OSM صحيا ، فستحصل على إخراج مشابه للإخراج التالي:

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

تحقق من OSM حاقن جراب

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

إذا كان حاقن OSM صحيا ، فستحصل على إخراج مشابه للإخراج التالي:

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

READY يجب أن يكون 1/1العمود . أي قيمة أخرى من شأنها أن تشير إلى جراب حاقن OSM غير صحي.

تحقق من خدمة حاقن OSM

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

إذا كان حاقن OSM صحيا ، فستحصل على إخراج مشابه للإخراج التالي:

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

تأكد من أن عنوان IP المدرج للخدمة osm-injector هو 9090. لا EXTERNAL-IPينبغي أن يكون هناك .

تحقق من نقاط نهاية حاقن OSM

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

إذا كان حاقن OSM صحيا ، فستحصل على إخراج مشابه للإخراج التالي:

NAME           ENDPOINTS           AGE
osm-injector   10.240.1.172:9090   75m

لكي يعمل OSM ، يجب أن يكون هناك نقطة نهاية واحدة على الأقل ل osm-injector. سيكون عنوان IP الخاص بنقاط نهاية OSM Injector مختلفا. يجب أن يكون المنفذ 9090 هو نفسه.

تحقق من التحقق من صحةوتغيير خطافات الويب

kubectl get ValidatingWebhookConfiguration --selector app=osm-controller

إذا كان التحقق من صحة Webhook صحيا ، فستحصل على إخراج مشابه للإخراج التالي:

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

إذا كان Webhook المتحور سليما ، فستحصل على إخراج مشابه للإخراج التالي:

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

تحقق من الخدمة وحزمة CA الخاصة بخطاف الويب للتحقق من الصحة

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

سيكون لتكوين Webhook الذي تم تكوينه بشكل جيد الإخراج التالي:

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

تحقق من الخدمة وحزمة CA الخاصة بخطاف الويب المتحور

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

سيكون لتكوين Webhook المتحور الذي تم تكوينه بشكل جيد الإخراج التالي:

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

تحقق مما إذا كانت وحدة تحكم OSM قد أعطت Webhook التحقق من الصحة (أو تحوير) حزمة CA باستخدام الأمر التالي:

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

مثال على الإخراج:

1845

يشير الرقم الموجود في الإخراج إلى عدد البايتات أو حجم حزمة CA. إذا كان هذا فارغا أو 0 أو رقما أقل من 1000 ، فسيشير ذلك إلى أن حزمة CA لم يتم توفيرها بشكل صحيح. بدون حزمة CA صحيحة ، فإن ValidatingWebhook سيلقي خطأ.

التحقق من ⁧osm-mesh-config⁩ المورد

التحقق من وجود:

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

تحقق من محتوى تكوين شبكة OSM

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⁩قيم الموارد:

المفتاح النوع القيمة الافتراضية أمثلة أوامر 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 صفيف [] kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"traffic":{"outboundPortExclusionList":[6379,8080]}}}' --type=merge
spec.traffic.outboundIPRangeExclusionList صفيف [] 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 صفيف [] kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"traffic":{"inboundPortExclusionList":[6379,8080]}}}' --type=merge
spec.certificate.serviceCertValidityDuration سلسلة "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 سلسلة "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 سلسلة "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

التحقق من مساحات الأسماء

ملاحظة

لن تشارك مساحة اسم نظام arc-osm أبدا في شبكة خدمة ولن يتم تصنيفها و / أو التعليق عليها باستخدام المفتاح / القيم أدناه.

نستخدم ⁧osm namespace add⁩ الأمر للانضمام إلى مساحات الأسماء في شبكة نظير الخدمة المحددة. عندما تكون مساحة اسم kubernetes جزءا من الشبكة ، يجب أن يكون ما يلي صحيحا:

عرض التعليقات التوضيحية لمساحة bookbuyerالاسم :

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

يجب أن يظهر التعليق التوضيحي التالي:

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

عرض تسميات مساحة bookbuyerالاسم :

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

يجب أن تظهر التسمية التالية:

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

لاحظ أنه إذا كنت لا تستخدم osm CLI ، فيمكنك أيضا إضافة هذه التعليقات التوضيحية يدويا إلى مساحات الأسماء الخاصة بك. إذا لم يتم شرح مساحة اسم باستخدام ⁧"openservicemesh.io/sidecar-injection": "enabled"⁩أو عدم تسميته باستخدام ⁧"openservicemesh.io/monitored-by": "osm"⁩ لن يُضيف the OSM Injector نظام Envoy sidecars

ملاحظة

بعد osm namespace add استدعائه ، سيتم حقن القرون الجديدة فقط بسيارة جانبية من Envoy. يجب إعادة تشغيل القرون الموجودة باستخدام kubectl rollout restart deployment الأمر.

التحقق من SMI CRDs

تحقق من توافر البطاقات المطلوبة في نظام المجموعة:

kubectl get crds

تأكد من أن CRDs تتوافق مع الإصدارات المتوفرة في فرع الإصدار. على سبيل المثال، إذا كنت تستخدم الإصدار 1.0.0-1 من OSM-Arc، فانتقل إلى صفحة الإصدارات المدعومة من SMI وحدد الإصدار 1.0 من القائمة المنسدلة الإصدارات للتحقق من إصدارات CRDs المستخدمة.

احصل على إصدارات CRDs المثبتة بالأمر التالي:

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

إذا كانت CRDs مفقودة، فاستخدم الأوامر التالية لتثبيتها على المجموعة. إذا كنت تستخدم إصدارا من OSM-Arc ليس v1.0، فتأكد من استبدال الإصدار الموجود في الأمر (على سبيل المثال: الإصدار 1.1.0 سيكون الإصدار 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

ارجع إلى ملاحظات إصدار OSM للاطلاع على تغييرات CRD بين الإصدارات.

استكشاف أخطاء إدارة الشهادات وإصلاحها

يمكن العثور على معلومات حول كيفية إصدار OSM للشهادات وإدارتها لوكلاء Envoy الذين يعملون على قرون التطبيق على موقع مستندات OSM.

مبعوث الترقية

عندما يتم إنشاء جراب جديد في مساحة اسم تراقبها الوظيفة الإضافية، سيقوم OSM بحقن عربة جانبية لوكيل Envoy في تلك البودة. إذا كان إصدار المبعوث بحاجة إلى تحديث، فيمكن العثور على خطوات للقيام بذلك في دليل الترقية على موقع مستندات OSM.