Megosztás a következőn keresztül:


A KEDA integrálása az Azure Kubernetes Service-fürttel

A KEDA egy Kubernetes-alapú eseményvezérelt automatikus skálázó. A KEDA lehetővé teszi a Kubernetesben lévő tárolók skálázását a feldolgozandó terhelés alapján, olyan rendszerekből származó metrikák lekérdezésével, mint a Prometheus. A KEDA integrálása az Azure Kubernetes Service-fürttel (AKS) a számítási feladatok skálázásához az Azure Monitor-munkaterület Prometheus-metrikái alapján.

Ahhoz, hogy a KEDA integrálható legyen az Azure Kubernetes Service-be, üzembe kell helyeznie és konfigurálnia kell egy számítási feladat identitását vagy pod-identitását a fürtön. Az identitás lehetővé teszi, hogy a KEDA hitelesítse magát az Azure-ral, és lekérje a skálázási metrikákat a Monitor-munkaterületről.

Ez a cikk végigvezeti a KEDA AKS-fürtbe való integrálásának lépésein egy számítási feladat identitásával.

Megjegyzés:

Javasoljuk a Microsoft Entra Számítási feladat ID használatát. Ez a hitelesítési módszer felváltja a pod által felügyelt identitást (előzetes verzió), amely integrálva van a Kubernetes natív képességeivel, hogy összefésüljenek az alkalmazás nevében bármely külső identitásszolgáltatóval.

Az Azure Kubernetes Service nyílt forráskód Microsoft Entra pod által felügyelt identitása (előzetes verzió) 2022.01.24-én elavult, és a projekt archiválása 2023. szeptemberben lesz. További információt az elavulásról szóló közleményben talál. Az AKS által felügyelt bővítmény 2023 szeptemberében kezdi elavulni.

Az Azure Managed Prometheus támogatása a KEDA 2.10-től indul. Ha a KEDA régebbi verziója van telepítve, frissítenie kell az Azure Managed Prometheus használatához.

Előfeltételek

Számítási feladat identitásának beállítása

  1. Először állítson be néhány környezeti változót. Módosítsa az értékeket az AKS-fürtnek megfelelően.

    export RESOURCE_GROUP="rg-keda-integration"
    export LOCATION="eastus"
    export SUBSCRIPTION="$(az account show --query id --output tsv)"
    export USER_ASSIGNED_IDENTITY_NAME="keda-int-identity"
    export FEDERATED_IDENTITY_CREDENTIAL_NAME="kedaFedIdentity" 
    export SERVICE_ACCOUNT_NAMESPACE="keda"
    export SERVICE_ACCOUNT_NAME="keda-operator"
    export AKS_CLUSTER_NAME="aks-cluster-name"
    
    • SERVICE_ACCOUNT_NAME - A KEDA-nak az összevont hitelesítő adatok létrehozásához használt szolgáltatásfiókot kell használnia. Ez lehet bármilyen felhasználó által definiált név.
    • AKS_CLUSTER_NAME– Annak az AKS-fürtnek a neve, ahol a KEDA-t telepíteni szeretné.
    • SERVICE_ACCOUNT_NAMESPACE A KEDA-nak és a szolgáltatásfióknak is ugyanabban a névtérben kell lennie.
    • USER_ASSIGNED_IDENTITY_NAME a KEDA-hoz létrehozott Microsoft Entra-identitás neve.
    • FEDERATED_IDENTITY_CREDENTIAL_NAME az Azure-ral való hitelesítéshez a KEDA számára létrehozott hitelesítő adatok neve.
  2. Ha az AKS-fürt nem lett létrehozva számítási feladat-identitással vagy oidc-kiállítóval, engedélyeznie kell azt. Ha nem biztos benne, a következő parancs futtatásával ellenőrizheti, hogy engedélyezve van-e.

    az aks show --resource-group $RESOURCE_GROUP --name $AKS_CLUSTER_NAME --query oidcIssuerProfile
    az aks show --resource-group $RESOURCE_GROUP --name $AKS_CLUSTER_NAME --query securityProfile.workloadIdentity
    

    A számítási feladatok identitásának és oidc-kiállítójának engedélyezéséhez futtassa a következő parancsot.

    az aks update -g $RESOURCE_GROUP -n $AKS_CLUSTER_NAME --enable-workload-identity --enable-oidc-issuer
    
  3. Tárolja az OIDC-kiállító URL-címét egy környezeti változóban, amelyet később használni szeretne.

    export AKS_OIDC_ISSUER="$(az aks show -n $AKS_CLUSTER_NAME -g $RESOURCE_GROUP --query "oidcIssuerProfile.issuerUrl" -otsv)"
    
  4. Hozzon létre egy felhasználó által hozzárendelt identitást a KEDA-hoz. Ezt az identitást használja a KEDA az Azure Monitorral való hitelesítéshez.

     az identity create --name $USER_ASSIGNED_IDENTITY_NAME --resource-group $RESOURCE_GROUP --location $LOCATION --subscription $SUBSCRIPTION
    

    A kimenet az alábbihoz hasonló lesz:

    {
      "clientId": "abcd1234-abcd-abcd-abcd-9876543210ab",
      "id": "/subscriptions/abcdef01-2345-6789-0abc-def012345678/resourcegroups/rg-keda-integration/providers/Microsoft.    ManagedIdentity/userAssignedIdentities/keda-int-identity",
      "location": "eastus",
      "name": "keda-int-identity",
      "principalId": "12345678-abcd-abcd-abcd-1234567890ab",
      "resourceGroup": "rg-keda-integration",
      "systemData": null,
      "tags": {},
      "tenantId": "1234abcd-9876-9876-9876-abcdef012345",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    
  5. Tárolja a clientId tenantId környezeti változókat a későbbi használathoz.

    export USER_ASSIGNED_CLIENT_ID="$(az identity show --resource-group $RESOURCE_GROUP --name $USER_ASSIGNED_IDENTITY_NAME --query 'clientId' -otsv)"
    export TENANT_ID="$(az identity show --resource-group $RESOURCE_GROUP --name $USER_ASSIGNED_IDENTITY_NAME --query 'tenantId' -otsv)"
    
  6. Rendelje hozzá a Monitorozási adatolvasó szerepkört az Azure Monitor-munkaterület identitásához. Ez a szerepkör lehetővé teszi az identitás számára a metrikák beolvasását a munkaterületről. Cserélje le az Azure Monitor-munkaterület erőforráscsoportját és az Azure Monitor-munkaterület nevét az Azure Monitor-munkaterület erőforráscsoportjára és nevére, amely úgy van konfigurálva, hogy metrikákat gyűjtsön az AKS-fürtből.

    az role assignment create \
    --assignee $USER_ASSIGNED_CLIENT_ID \
    --role "Monitoring Data Reader" \
    --scope /subscriptions/$SUBSCRIPTION/resourceGroups/<Azure Monitor Workspace resource group>/providers/microsoft.monitor/accounts/<Azure monitor workspace name>
    
  7. Hozza létre a KEDA névteret, majd hozza létre a Kubernetes szolgáltatásfiókot. A KEDA ezt a szolgáltatásfiókot használja az Azure-ral való hitelesítéshez.

    
    az aks get-credentials -n $AKS_CLUSTER_NAME -g $RESOURCE_GROUP
    
    kubectl create namespace keda
    
    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      annotations:
        azure.workload.identity/client-id: $USER_ASSIGNED_CLIENT_ID
      name: $SERVICE_ACCOUNT_NAME
      namespace: $SERVICE_ACCOUNT_NAMESPACE
    EOF
    
  8. A szolgáltatásfiók ellenőrzése a futtatással

    kubectl describe serviceaccount $SERVICE_ACCOUNT_NAME -n keda
    
  9. Összevont hitelesítőadat létrehozása a szolgáltatásfiók és a felhasználó által hozzárendelt identitás között. Az összevont hitelesítő adatok lehetővé teszik, hogy a szolgáltatásfiók a felhasználó által hozzárendelt identitást használja az Azure-ral való hitelesítéshez.

    az identity federated-credential create --name $FEDERATED_IDENTITY_CREDENTIAL_NAME --identity-name $USER_ASSIGNED_IDENTITY_NAME --resource-group $RESOURCE_GROUP --issuer $AKS_OIDC_ISSUER --subject     system:serviceaccount:$SERVICE_ACCOUNT_NAMESPACE:$SERVICE_ACCOUNT_NAME --audience api://AzureADTokenExchange
    

    Megjegyzés:

    It takes a few seconds for the federated identity credential to be propagated after being initially added. Ha a jogkivonat-kérés közvetlenül az összevont identitás hitelesítő adatainak hozzáadása után történik, az néhány percig sikertelen lehet, mivel a gyorsítótár régi adatokkal van feltöltve a könyvtárban. A probléma elkerülése érdekében az összevont identitás hitelesítő adatainak hozzáadása után némi késést adhat hozzá.

A KEDA üzembe helyezése

A KEDA YAML-jegyzékekkel, Helm-diagramokkal vagy operátorközpontokkal telepíthető. Ez a cikk Helm-diagramokat használ. A KEDA üzembe helyezésével kapcsolatos további információkért lásd: KEDA üzembe helyezése

Helm-adattár hozzáadása:

helm repo add kedacore https://kedacore.github.io/charts
helm repo update

A KEDA üzembe helyezése a következő paranccsal:

helm install keda kedacore/keda --namespace keda \
--set serviceAccount.create=false \
--set serviceAccount.name=keda-operator \
--set podIdentity.azureWorkload.enabled=true \
--set podIdentity.azureWorkload.clientId=$USER_ASSIGNED_CLIENT_ID \
--set podIdentity.azureWorkload.tenantId=$TENANT_ID

Ellenőrizze az üzembe helyezést az alábbi parancs futtatásával.

kubectl get pods -n keda

A kimenet az alábbihoz hasonló lesz:

NAME                                               READY   STATUS    RESTARTS       AGE
keda-admission-webhooks-ffcb8f688-kqlxp            1/1     Running   0              4m
keda-operator-5d9f7d975-mgv7r                      1/1     Running   1 (4m ago)     4m
keda-operator-metrics-apiserver-7dc6f59678-745nz   1/1     Running   0              4m

Skálázók

A skálázók határozzák meg, hogy a KEDA hogyan és mikor skálázza az üzembe helyezést. A KEDA számos skálázót támogat. A skálázókkal kapcsolatos további információkért lásd: Skálázók. Az Azure Managed Prometheus már meglévő Prometheus-skálázót használ a Prometheus-metrikák Lekéréséhez az Azure Monitor Workspace-ből. Az alábbi yaml-fájl egy példa az Azure Managed Prometheus használatára.

apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
  name: azure-managed-prometheus-trigger-auth
spec:
  podIdentity:
      provider: azure-workload | azure # use "azure" for pod identity and "azure-workload" for workload identity
      identityId: <identity-id> # Optional. Default: Identity linked with the label set when installing KEDA.
---
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: azure-managed-prometheus-scaler
spec:
  scaleTargetRef:
    name: deployment-name-to-be-scaled
  minReplicaCount: 1
  maxReplicaCount: 20
  triggers:
  - type: prometheus
    metadata:
      serverAddress: https://test-azure-monitor-workspace-name-1234.eastus.prometheus.monitor.azure.com
      metricName: http_requests_total
      query: sum(rate(http_requests_total{deployment="my-deployment"}[2m])) # Note: query must return a vector/scalar single element response
      threshold: '100.50'
      activationThreshold: '5.5'
    authenticationRef:
      name: azure-managed-prometheus-trigger-auth
  • serverAddress Az Azure Monitor-munkaterület lekérdezési végpontja. További információ: Query Prometheus metrics using the API and PromQL
  • metricName a skálázni kívánt metrika neve.
  • query a metrika lekéréséhez használt lekérdezés.
  • threshold az az érték, amelynél az üzembe helyezés méretezhető.
  • Állítsa be a podIdentity.provider használt identitástípusnak megfelelőt.

Hibaelhárítás

Az alábbi szakasz hibaelhárítási tippeket nyújt a gyakori problémákhoz.

Összevont hitelesítő adatok

Az összevont hitelesítő adatok propagálása akár 10 percet is igénybe vehet. Ha problémákat tapasztal a KEDA Azure-beli hitelesítésével kapcsolatban, próbálkozzon az alábbi lépésekkel.

Az alábbi naplórészlet az összevont hitelesítő adatokkal kapcsolatos hibát mutatja be.

kubectl logs -n keda keda-operator-5d9f7d975-mgv7r

{
 \"error\": \"unauthorized_client\",\n  \"error_description\": \"AADSTS70021: No matching federated identity record found for presented assertion. 
Assertion Issuer: 'https://eastus.oic.prod-aks.azure.com/abcdef01-2345-6789-0abc-def012345678/12345678-abcd-abcd-abcd-1234567890ab/'.
Assertion Subject: 'system:serviceaccount:keda:keda-operator'. 
Assertion Audience: 'api://AzureADTokenExchange'. https://docs.microsoft.com/azure/active-directory/develop/workload-identity-federation
Trace ID: 12dd9ea0-3a65-408f-a41f-5d0403a25100\\r\\nCorrelation ID: 8a2dce68-17f1-4f11-bed2-4bcf9577f2af\\r\\nTimestamp: 2023-05-30 11:11:53Z\",
\"error_codes\": [\n    70021\n  ],\n  \"timestamp\": \"2023-05-30 11:11:53Z\",
\"trace_id\": \"12345678-3a65-408f-a41f-5d0403a25100\",
\"correlation_id\": \"12345678-17f1-4f11-bed2-4bcf9577f2af\",
\"error_uri\": \"https://login.microsoftonline.com/error?code=70021\"\n}
\n--------------------------------------------------------------------------------\n"}

Ellenőrizze a ServiceAccount és a létrehozott az identity federated-credential create hitelesítő adatok létrehozásához használt értékeket, és győződjön meg arról, hogy az subject érték megegyezik az system:serviceaccount értékkel.

Azure Monitor-munkaterület engedélyei

Ha problémákat tapasztal az Azure-beli KEDA-hitelesítéssel kapcsolatban, ellenőrizze az Azure Monitor-munkaterület engedélyeit. Az alábbi naplórészlet azt mutatja be, hogy az identitás nem rendelkezik olvasási engedélyekkel az Azure Monitor-munkaterülethez.

kubectl logs -n keda keda-operator-5d9f7d975-mgv7r

2023-05-30T11:15:45Z    ERROR   scale_handler   error getting metric for scaler 
{"scaledObject.Namespace": "default", "scaledObject.Name": "azure-managed-prometheus-scaler", "scaler": "prometheusScaler", 
"error": "prometheus query api returned error. status: 403 response: {\"status\":\"error\",
\"errorType\":\"Forbidden\",\"error\":\"User \\u0027abc123ab-1234-1234-abcd-abcdef123456
\\u0027 does not have access to perform any of the following actions 
\\u0027microsoft.monitor/accounts/data/metrics/read, microsoft.monitor/accounts/data/metrics/read
\\u0027 on resource \\u0027/subscriptions/abcdef01-2345-6789-0abc-def012345678/resourcegroups/rg-azmon-ws-01/providers/microsoft.monitor/accounts/azmon-ws-01\\u0027. RequestId: 123456c427f348258f3e5aeeefef834a\"}"}

Győződjön meg arról, hogy az identitás rendelkezik a Monitoring Data Reader szerepkörével az Azure Monitor-munkaterületen.