Aracılığıyla paylaş


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

  1. 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.
  2. 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
    
  3. 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)"
    
  4. 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"
    }
    
  5. ve tenantId değerlerini clientId 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)"
    
  6. 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>
    
  7. 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
    
  8. komutunu çalıştırarak hizmet hesabınızı denetleyin

    kubectl describe serviceaccount $SERVICE_ACCOUNT_NAME -n keda
    
  9. 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 sorgulama
  • metricName ö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.