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.
Feljegyzé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
- Azure Kubernetes Service- (AKS-) fürt
- A Prometheus metrikákat küld egy Azure Monitor-munkaterületre. További információt a Prometheushoz készült Azure Monitor felügyelt szolgáltatásában talál.
Számítási feladat identitásának beállítása
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.
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
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)"
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": "00001111-aaaa-2222-bbbb-3333cccc4444", "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/rg-keda-integration/providers/Microsoft. ManagedIdentity/userAssignedIdentities/keda-int-identity", "location": "eastus", "name": "keda-int-identity", "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "resourceGroup": "rg-keda-integration", "systemData": null, "tags": {}, "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" }
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)"
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>
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
A szolgáltatásfiók ellenőrzése a futtatással
kubectl describe serviceaccount $SERVICE_ACCOUNT_NAME -n keda
Ö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
Feljegyzés
Az összevont identitás hitelesítő adatának propagálása néhány másodpercet vesz igénybe a kezdeti hozzáadását követően. 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 PromQLmetricName
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: 0000aaaa-11bb-cccc-dd22-eeeeee333333\\r\\nCorrelation ID: 1111bbbb-22cc-dddd-ee33-ffffff444444\\r\\nTimestamp: 2023-05-30 11:11:53Z\",
\"error_codes\": [\n 70021\n ],\n \"timestamp\": \"2023-05-30 11:11:53Z\",
\"trace_id\": \"2222cccc-33dd-eeee-ff44-aaaaaa555555\",
\"correlation_id\": \"aaaa0000-bb11-2222-33cc-444444dddddd\",
\"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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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.