KEDA'yi Azure Kubernetes Service kümenizle tümleştirme
KEDA, Kubernetes tabanlı bir Olay Odaklı Otomatik Ölçeklendiricidir. KEDA, Prometheus gibi sistemlerden ölçümleri sorgulayarak işlenecek yüke göre Kubernetes'teki tüm kapsayıcıların ölçeklendirmesini sağlamanızı sağlar. İş yüklerinizi Azure İzleyici çalışma alanınızdaki Prometheus ölçümlerine göre ölçeklendirmek için KEDA'yi Azure Kubernetes Service (AKS) kümenizle tümleştirin.
KEDA'yı Azure Kubernetes Hizmetinizle tümleştirmek için kümenizde bir iş yükü kimliği veya pod kimliği dağıtmanız ve yapılandırmanız gerekir. Kimlik, KEDA'nın Azure'da kimlik doğrulaması yapmasına ve İzleyici çalışma alanınızdan ölçeklendirme ölçümlerini almasına olanak tanır.
Bu makalede, iş yükü kimliği kullanarak KEDA'nın AKS kümenizle tümleştirilmesine yönelik adımlarda size yol gösterilir.
Not
Microsoft Entra İş Yükü Kimliği kullanmanızı öneririz. Bu kimlik doğrulama yöntemi, uygulama adına herhangi bir dış kimlik sağlayıcısıyla federasyon sağlamak için Kubernetes yerel özellikleriyle tümleşen pod ile yönetilen kimliğin (önizleme) yerini alır.
Azure Kubernetes Service'teki açık kaynak Microsoft Entra pod yönetilen kimliği (önizleme) 24.10.2022 itibarıyla kullanım dışı bırakılmıştır ve proje Eylül 2023'te arşivlenecektir. Daha fazla bilgi için kullanımdan kaldırma bildirimine bakın. AKS Yönetilen eklentisi Eylül 2023'te kullanımdan kaldırmaya başlar.
Azure Yönetilen Prometheus desteği KEDA v2.10'dan başlar. DAHA eski bir KEDA sürümünü yüklediyseniz, Azure Yönetilen Prometheus ile çalışmak için yükseltmeniz gerekir.
Önkoşullar
- Azure Kubernetes Service (AKS) kümesi
- Azure İzleyici çalışma alanına ölçüm gönderen prometheus. Daha fazla bilgi için bkz . Prometheus için Azure İzleyici yönetilen hizmeti.
İş yükü kimliği ayarlama
Başlangıç olarak bazı ortam değişkenleri ayarlayın. Değerleri AKS kümenize uyacak şekilde değiştirin.
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, federasyon kimlik bilgilerini oluşturmak için kullanılan hizmet hesabını kullanmalıdır. Bu, kullanıcı tanımlı herhangi bir ad olabilir.AKS_CLUSTER_NAME
- KEDA dağıtmak istediğiniz AKS kümesinin adı.SERVICE_ACCOUNT_NAMESPACE
Hem KEDA hem de hizmet hesabı aynı ad alanında olmalıdır.USER_ASSIGNED_IDENTITY_NAME
, KEDA için oluşturulan Microsoft Entra kimliğinin adıdır.FEDERATED_IDENTITY_CREDENTIAL_NAME
, KEDA'nın Azure'da kimlik doğrulaması yapmak için kullanması için oluşturulan kimlik bilgilerinin adıdır.
AKS kümeniz iş yükü kimliği veya oidc-issuer etkin olarak oluşturulmadıysa etkinleştirmeniz gerekir. Emin değilseniz, etkinleştirilip etkinleştirilmediğini denetlemek için aşağıdaki komutu çalıştırabilirsiniz.
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
İş yükü kimliğini ve oidc-issuer'ı etkinleştirmek için aşağıdaki komutu çalıştırın.
az aks update -g $RESOURCE_GROUP -n $AKS_CLUSTER_NAME --enable-workload-identity --enable-oidc-issuer
OIDC veren url'sini daha sonra kullanılacak bir ortam değişkeninde depolayın.
export AKS_OIDC_ISSUER="$(az aks show -n $AKS_CLUSTER_NAME -g $RESOURCE_GROUP --query "oidcIssuerProfile.issuerUrl" -otsv)"
KEDA için kullanıcı tarafından atanan bir kimlik oluşturun. Bu kimlik, KeDA tarafından Azure İzleyici ile kimlik doğrulaması yapmak için kullanılır.
az identity create --name $USER_ASSIGNED_IDENTITY_NAME --resource-group $RESOURCE_GROUP --location $LOCATION --subscription $SUBSCRIPTION
Çıktı aşağıdakine benzerdir.
{ "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" }
ve
tenantId
değerleriniclientId
daha sonra kullanmak üzere ortam değişkenlerinde depolayın.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)"
Azure İzleyici çalışma alanınızın kimliğine İzleme Veri Okuyucusu rolünü atayın. Bu rol, kimliğin çalışma alanınızdaki ölçümleri okumasına olanak tanır. Azure İzleyici Çalışma Alanı kaynak grubunu ve Azure İzleyici Çalışma Alanı adını, AKS kümesinden ölçümleri toplamak üzere yapılandırılan Azure İzleyici çalışma alanının kaynak grubu ve adıyla değiştirin.
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>
KEDA ad alanını ve ardından Kubernetes hizmet hesabını oluşturun. Bu hizmet hesabı, KeDA tarafından Azure'da kimlik doğrulaması yapmak için kullanılır.
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
komutunu çalıştırarak hizmet hesabınızı denetleyin
kubectl describe serviceaccount $SERVICE_ACCOUNT_NAME -n keda
Hizmet hesabıyla kullanıcı tarafından atanan kimlik arasında federasyon kimlik bilgileri oluşturun. Federasyon kimlik bilgileri, hizmet hesabının Azure'da kimlik doğrulaması yapmak için kullanıcı tarafından atanan kimliği kullanmasına olanak tanır.
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
Not
Şirket dışı kimlik bilgilerinin ilk eklendikten sonra yayılması birkaç saniye sürer. Federasyon kimliği kimlik bilgileri eklendikten hemen sonra bir belirteç isteği yapılırsa, önbellek dizinde eski verilerle doldurulduktan sonra birkaç dakika hataya neden olabilir. Bu sorunu önlemek için, federasyon kimliği kimlik bilgilerini ekledikten sonra biraz gecikme ekleyebilirsiniz.
KEDA dağıtma
KEDA YAML bildirimleri, Helm grafikleri veya Operatör Hub'ı kullanılarak dağıtılabilir. Bu makalede Helm grafikleri kullanılmaktadır. KEDA dağıtma hakkında daha fazla bilgi için bkz . KEDA Dağıtma
Helm deposu ekleme:
helm repo add kedacore https://kedacore.github.io/charts
helm repo update
Aşağıdaki komutu kullanarak KEDA'yi dağıtın:
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
Aşağıdaki komutu çalıştırarak dağıtımınızı denetleyin.
kubectl get pods -n keda
Çıktı aşağıdakine benzerdir.
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
Ölçekleyiciler
Ölçekleyiciler, KEDA'nın bir dağıtımı nasıl ve ne zaman ölçeklendirmesi gerektiğini tanımlar. KEDA, çeşitli ölçekleyicileri destekler. Ölçekleyiciler hakkında daha fazla bilgi için bkz . Ölçekleyiciler. Azure Yönetilen Prometheus, Azure İzleyici Çalışma Alanı'ndan Prometheus ölçümlerini almak için mevcut Prometheus ölçeklendiricisini kullanır. Aşağıdaki yaml dosyası, Azure Yönetilen Prometheus'un kullanımına bir örnektir.
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
, Azure İzleyici çalışma alanınızın Sorgu uç noktasıdır. Daha fazla bilgi için bkz . API ve PromQL kullanarak Prometheus ölçümlerini sorgulamametricName
ölçeğini genişletmek istediğiniz ölçümün adıdır.query
ölçümü almak için kullanılan sorgudur.threshold
, dağıtımın ölçeklendirildiği değerdir.- öğesini kullanmakta
podIdentity.provider
olduğunuz kimliğin türüne göre ayarlayın.
Sorun giderme
Aşağıdaki bölümde yaygın sorunlar için sorun giderme ipuçları sağlanır.
Federasyon kimlik bilgileri
Federasyon kimlik bilgilerinin yayılması 10 dakika kadar sürebilir. Azure'da KEDA kimlik doğrulamasıyla ilgili sorunlarla karşılaşıyorsanız aşağıdaki adımları deneyin.
Aşağıdaki günlük alıntısı, federasyon kimlik bilgileriyle ilgili bir hata gösterir.
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"}
ServiceAccount'ı oluşturmak için kullanılan değerleri ve ile oluşturulan kimlik bilgilerini denetleyin ve değerin değerle az identity federated-credential create
eşleştiğinden system:serviceaccount
subject
emin olun.
Azure İzleyici çalışma alanı izinleri
Azure'da KEDA kimlik doğrulamasıyla ilgili sorunlarla karşılaşıyorsanız Azure İzleyici çalışma alanının izinlerini denetleyin. Aşağıdaki günlük alıntısı, kimliğin Azure İzleyici çalışma alanı için okuma izinlerine sahip olmadığını gösterir.
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\"}"}
Kimliğin Monitoring Data Reader
Azure İzleyici çalışma alanında rolü olduğundan emin olun.