Integrace KEDA s clusterem Azure Kubernetes Service
KEDA je automatické škálování řízené událostmi založené na Kubernetes. KEDA umožňuje řídit škálování libovolného kontejneru v Kubernetes na základě zatížení, které se má zpracovat, dotazováním metrik ze systémů, jako je Například Prometheus. Integrujte KEDA s clusterem Azure Kubernetes Service (AKS) a škálujte úlohy na základě metrik Prometheus z pracovního prostoru služby Azure Monitor.
Pokud chcete integrovat KEDA do služby Azure Kubernetes Service, musíte v clusteru nasadit a nakonfigurovat identitu úlohy nebo identitu podu. Identita umožňuje, aby se KEDA ověřila v Azure a načítala metriky pro škálování z pracovního prostoru Monitoru.
Tento článek vás provede postupem integrace KEDA do clusteru AKS pomocí identity úloh.
Poznámka:
Doporučujeme používat ID úloh Microsoft Entra. Tato metoda ověřování nahrazuje identitu spravovanou podem (Preview), která se integruje s nativními možnostmi Kubernetes pro federaci s externími zprostředkovateli identity jménem aplikace.
Opensourcová identita spravovaná podem Microsoft Entra (Preview) ve službě Azure Kubernetes Service je od 24. 10. 2022 zastaralá a projekt bude archivován v září 2023. Další informace najdete v oznámení o vyřazení. Spravovaný doplněk AKS začíná v září 2023 zastarání.
Podpora azure Managed Prometheus začíná od KEDA verze 2.10. Pokud máte nainstalovanou starší verzi KEDA, musíte upgradovat, abyste mohli pracovat se službou Azure Managed Prometheus.
Požadavky
- Cluster služby Azure Kubernetes Service (AKS)
- Prometheus odesílá metriky do pracovního prostoru služby Azure Monitor. Další informace najdete ve spravované službě Azure Monitor pro Prometheus.
Nastavení identity úlohy
Začněte nastavením některých proměnných prostředí. Změňte hodnoty tak, aby vyhovovaly vašemu clusteru AKS.
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
– KEDA musí používat účet služby, který byl použit k vytvoření federovaných přihlašovacích údajů. Může se jednat o jakékoli uživatelem definované jméno.AKS_CLUSTER_NAME
– Název clusteru AKS, do kterého chcete nasadit KEDA.SERVICE_ACCOUNT_NAMESPACE
KeDA i účet služby musí být ve stejném oboru názvů.USER_ASSIGNED_IDENTITY_NAME
je název identity Microsoft Entra, která je vytvořená pro KEDA.FEDERATED_IDENTITY_CREDENTIAL_NAME
je název přihlašovacích údajů vytvořených pro KEDA, které se mají použít k ověřování v Azure.
Pokud se váš cluster AKS nevytvořil s povolenou identitou úloh nebo vystavitelem oidc, budete ho muset povolit. Pokud si nejste jistí, můžete spuštěním následujícího příkazu zkontrolovat, jestli je povolený.
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
Pokud chcete povolit identitu úlohy a vystavitele oidc,spusťte následující příkaz.
az aks update -g $RESOURCE_GROUP -n $AKS_CLUSTER_NAME --enable-workload-identity --enable-oidc-issuer
Uložte adresu URL vystavitele OIDC do proměnné prostředí, která se použije později.
export AKS_OIDC_ISSUER="$(az aks show -n $AKS_CLUSTER_NAME -g $RESOURCE_GROUP --query "oidcIssuerProfile.issuerUrl" -otsv)"
Vytvořte identitu přiřazenou uživatelem pro KEDA. Tuto identitu používá KEDA k ověření ve službě Azure Monitor.
az identity create --name $USER_ASSIGNED_IDENTITY_NAME --resource-group $RESOURCE_GROUP --location $LOCATION --subscription $SUBSCRIPTION
Výstup se bude podobat tomuto:
{ "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" }
clientId
Uložte proměnné prostředí atenantId
použijte je později.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)"
Přiřaďte roli Čtenář dat monitorování k identitě pracovního prostoru služby Azure Monitor. Tato role umožňuje identitě číst metriky z vašeho pracovního prostoru. Nahraďte skupinu prostředků azure Monitoru a název pracovního prostoru služby Azure Monitor skupinou prostředků a názvem pracovního prostoru služby Azure Monitor, který je nakonfigurovaný tak, aby shromažďoval metriky z clusteru AKS.
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>
Vytvořte obor názvů KEDA a pak vytvořte účet služby Kubernetes. Tento účet služby používá KEDA k ověřování v Azure.
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
Spuštěním příkazu
zkontrolujte svůj účet služby. kubectl describe serviceaccount $SERVICE_ACCOUNT_NAME -n keda
Vytvořte federované přihlašovací údaje mezi účtem služby a identitou přiřazenou uživatelem. Federované přihlašovací údaje umožňují účtu služby používat identitu přiřazenou uživatelem k ověření v Azure.
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
Poznámka:
Rozšíření přihlašovacích údajů federované identity po počátečním přidání trvá několik sekund. Pokud se žádost o token provede okamžitě po přidání přihlašovacích údajů federované identity, může dojít k selhání po dobu několika minut, protože mezipaměť je naplněná starými daty v adresáři. Abyste se tomuto problému vyhnuli, můžete po přidání přihlašovacích údajů federované identity přidat mírné zpoždění.
Nasazení KEDA
KEDA je možné nasadit pomocí manifestů YAML, chartů Helm nebo centra operátorů. Tento článek používá charty Helm. Další informace o nasazení KEDA najdete v tématu Nasazení KEDA.
Přidejte úložiště Helm:
helm repo add kedacore https://kedacore.github.io/charts
helm repo update
KeDA nasaďte pomocí následujícího příkazu:
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
Spuštěním následujícího příkazu zkontrolujte nasazení.
kubectl get pods -n keda
Výstup se bude podobat tomuto:
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
Škálovací škálovače
Škálovací nástroje definují, jak a kdy má KEDA škálovat nasazení. KEDA podporuje různé škálovače. Další informace o škálovačích najdete v tématu Škálování. Azure Managed Prometheus využívá už existující škálovací nástroj Prometheus k načtení metrik Prometheus z pracovního prostoru služby Azure Monitor. Následující soubor yaml je příkladem použití spravovaného nástroje Azure Prometheus.
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
je koncový bod dotazu vašeho pracovního prostoru služby Azure Monitor. Další informace najdete v tématu Dotazování metrik Prometheus pomocí rozhraní API a PromQL.metricName
je název metriky, se kterou chcete škálovat.query
je dotaz použitý k načtení metriky.threshold
je hodnota, ve které se škáluje nasazení.podIdentity.provider
Nastavte typ identity, kterou používáte.
Řešení problému
Následující část obsahuje tipy pro řešení běžných problémů.
Federované přihlašovací údaje
Rozšíření federovaných přihlašovacích údajů může trvat až 10 minut. Pokud máte problémy s ověřováním KEDA v Azure, vyzkoušejte následující kroky.
Následující výňatek protokolu ukazuje chybu s federovanými přihlašovacími údaji.
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"}
Zkontrolujte hodnoty použité k vytvoření účtu ServiceAccount a přihlašovacích údajů vytvořených pomocí az identity federated-credential create
a ujistěte se, subject
že hodnota odpovídá hodnotě system:serviceaccount
.
Oprávnění pracovního prostoru služby Azure Monitor
Pokud máte problémy s ověřováním KEDA v Azure, zkontrolujte oprávnění pro pracovní prostor Služby Azure Monitor. Následující výňatek protokolu ukazuje, že identita nemá oprávnění ke čtení pro pracovní prostor služby Azure Monitor.
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\"}"}
Ujistěte se, že identita má Monitoring Data Reader
roli v pracovním prostoru služby Azure Monitor.