Azure Kubernetes Service'te (AKS) KEDA eklentisini ve iş yükü kimliğini kullanarak uygulamalarınızı güvenli bir şekilde ölçeklendirme
Bu makalede, Azure Kubernetes Service'te (AKS) Kubernetes Event-driven Autoscaling (KEDA) eklentisi ve iş yükü kimliğiyle uygulamalarınızı güvenli bir şekilde ölçeklendirme adımları gösterilmektedir.
Önemli
Kümenizin Kubernetes sürümü, AKS kümenize hangi KEDA sürümünün yükleneceğini belirler. Hangi KEDA sürümünün her AKS sürümüne eşleneceğini görmek için Kubernetes bileşen sürümü tablosunun AKS tarafından yönetilen eklentiler sütununa bakın.
GA Kubernetes sürümleri için AKS, tablodaki ilgili KEDA ikincil sürümü için tam destek sunar. Kubernetes önizleme sürümleri ve en son KEDA düzeltme eki, müşteri desteği kapsamındadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:
Başlamadan önce
- Azure aboneliğine ihtiyacınız var. Azure aboneliğiniz yoksa ücretsiz hesap oluşturabilirsiniz.
- Azure CLI'nın yüklü olması gerekir.
- Kubernetes API sunucusuna erişime izin verecek şekilde yapılandırılmış güvenlik duvarı kurallarınız olduğundan emin olun. Daha fazla bilgi için bkz . Azure Kubernetes Service (AKS) kümeleri için giden ağ ve FQDN kuralları.
Kaynak grubu oluşturma
komutunu kullanarak
az group create
bir kaynak grubu oluşturun. Yer tutucu değerlerini kendi değerlerinizle değiştirdiğinizden emin olun.LOCATION=<azure-region> RG_NAME=<resource-group-name> az group create --name $RG_NAME --location $LOCATION
AKS kümesi oluşturma
,
--enable-keda
ve--enable-oidc-issuer
bayraklarıyla komutunu--enable-workload-identity
kullanarakaz aks create
KEDA eklentisi, iş yükü kimliği ve OIDC verenin etkinleştirildiği bir AKS kümesi oluşturun. Yer tutucu değerini kendi değerinizle değiştirdiğinizden emin olun.AKS_NAME=<cluster-name> az aks create \ --name $AKS_NAME \ --resource-group $RG_NAME \ --enable-workload-identity \ --enable-oidc-issuer \ --enable-keda \ --generate-ssh-keys
Dağıtımın başarılı olduğunu doğrulayın ve bayrağı olarak ayarlanmış
"[workloadAutoScalerProfile, securityProfile, oidcIssuerProfile]"
komutunu kullanarak kümede KEDA, iş yükü kimliği ve OIDC vereninaz aks show
etkinleştirildiğinden--query
emin olun.az aks show \ --name $AKS_NAME \ --resource-group $RG_NAME \ --query "[workloadAutoScalerProfile, securityProfile, oidcIssuerProfile]"
komutunu kullanarak kümeye bağlanın
az aks get-credentials
.az aks get-credentials \ --name $AKS_NAME \ --resource-group $RG_NAME \ --overwrite-existing
Azure Service Bus oluşturma
komutunu kullanarak
az servicebus namespace create
bir Azure Service Bus ad alanı oluşturun. Yer tutucu değerini kendi değerinizle değiştirdiğinden emin olun.SB_NAME=<service-bus-name> SB_HOSTNAME="${SB_NAME}.servicebus.windows.net" az servicebus namespace create \ --name $SB_NAME \ --resource-group $RG_NAME \ --disable-local-auth
komutunu kullanarak
az servicebus queue create
bir Azure Service Bus kuyruğu oluşturun. Yer tutucu değerini kendi değerinizle değiştirdiğinden emin olun.SB_QUEUE_NAME=<service-bus-queue-name> az servicebus queue create \ --name $SB_QUEUE_NAME \ --namespace $SB_NAME \ --resource-group $RG_NAME
Yönetilen kimlik oluşturma
komutunu kullanarak
az identity create
yönetilen kimlik oluşturun. Yer tutucu değerini kendi değerinizle değiştirdiğinden emin olun.MI_NAME=<managed-identity-name> MI_CLIENT_ID=$(az identity create \ --name $MI_NAME \ --resource-group $RG_NAME \ --query "clientId" \ --output tsv)
bayrağı olarak ayarlanmış komutunu kullanarak
az aks show
OIDC veren URL'sini--query
oidcIssuerProfile.issuerUrl
alın.AKS_OIDC_ISSUER=$(az aks show \ --name $AKS_NAME \ --resource-group $RG_NAME \ --query oidcIssuerProfile.issuerUrl \ --output tsv)
komutunu kullanarak
az identity federated-credential create
yönetilen kimlik ile iş yükü tarafından kullanılan ad alanı ve hizmet hesabı arasında federasyon kimlik bilgileri oluşturun. Yer tutucu değerini kendi değerinizle değiştirdiğinden emin olun.FED_WORKLOAD=<federated-credential-workload-name> az identity federated-credential create \ --name $FED_WORKLOAD \ --identity-name $MI_NAME \ --resource-group $RG_NAME \ --issuer $AKS_OIDC_ISSUER \ --subject system:serviceaccount:default:$MI_NAME \ --audience api://AzureADTokenExchange
komutunu kullanarak
az identity federated-credential create
keda-operator tarafından kullanılan ad alanı ve hizmet hesabı ile yönetilen kimlik arasında ikinci bir federasyon kimlik bilgisi oluşturun. Yer tutucu değerini kendi değerinizle değiştirdiğinden emin olun.FED_KEDA=<federated-credential-keda-name> az identity federated-credential create \ --name $FED_KEDA \ --identity-name $MI_NAME \ --resource-group $RG_NAME \ --issuer $AKS_OIDC_ISSUER \ --subject system:serviceaccount:kube-system:keda-operator \ --audience api://AzureADTokenExchange
Rol atamaları oluşturma
bayrağı olarak ayarlanmış
"principalId"
komutunu kullanarakaz identity show
yönetilen kimliğin--query
nesne kimliğini alın.MI_OBJECT_ID=$(az identity show \ --name $MI_NAME \ --resource-group $RG_NAME \ --query "principalId" \ --output tsv)
bayrağı olarak ayarlanmış
"id"
komutunu--query
kullanarakaz servicebus namespace show
Service Bus ad alanı kaynak kimliğini alın.SB_ID=$(az servicebus namespace show \ --name $SB_NAME \ --resource-group $RG_NAME \ --query "id" \ --output tsv)
komutunu kullanarak yönetilen kimliğe Azure Service Bus Veri Sahibi rolünü atayın
az role assignment create
.az role assignment create \ --role "Azure Service Bus Data Owner" \ --assignee-object-id $MI_OBJECT_ID \ --assignee-principal-type ServicePrincipal \ --scope $SB_ID
KEDA operatöründe İş Yükü Kimliğini etkinleştirme
ServiceAccount için federasyon kimlik bilgilerini oluşturduktan sonra, İş Yükü Kimliği ortam değişkenlerinin pod'a eklendiğinden
keda-operator
emin olmak içinkeda-operator
podları el ile yeniden başlatmanız gerekir.kubectl rollout restart deploy keda-operator -n kube-system
Keda-operator podlarının yeniden başlat olduğunu onaylayın
kubectl get pod -n kube-system -lapp=keda-operator -w
Önceki izleme komutunu kesmek için keda-operator podlarının sıralı isabeti
Ctrl+c
tamamladığını onayladıktan sonra İş Yükü Kimliği ortam değişkenlerinin eklenmiş olduğunu onaylayın.KEDA_POD_ID=$(kubectl get po -n kube-system -l app.kubernetes.io/name=keda-operator -ojsonpath='{.items[0].metadata.name}') kubectl describe po $KEDA_POD_ID -n kube-system
Ortam altında aşağıdakine benzer bir çıktı görmeniz gerekir.
--- AZURE_CLIENT_ID: AZURE_TENANT_ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx AZURE_FEDERATED_TOKEN_FILE: /var/run/secrets/azure/tokens/azure-identity-token AZURE_AUTHORITY_HOST: https://login.microsoftonline.com/ ---
Kullanıcı Tarafından Atanan Yönetilen Kimliğin İstemci Kimliğini içeren bir KEDA Tetikleyici Kimlik Doğrulama kaynağı dağıtın.
kubectl apply -f - <<EOF apiVersion: keda.sh/v1alpha1 kind: TriggerAuthentication metadata: name: azure-servicebus-auth namespace: default # this must be same namespace as the ScaledObject/ScaledJob that will use it spec: podIdentity: provider: azure-workload identityId: $MI_CLIENT_ID EOF
Not
TriggerAuthentication etkinken, KEDA iş yükü kimliği aracılığıyla kimlik doğrulaması yapabilir.
keda-operator
Podlar, ölçeklendirme tetikleyicilerini değerlendirirken Azure kaynaklarında kimlik doğrulaması yapmak için öğesiniidentityId
kullanır.
Azure Service Bus'ta ileti yayımlama
Bu noktada her şey KEDA ve Microsoft Entra İş Yükü Kimliği ile ölçeklendirme için yapılandırılır. Üretici ve tüketici iş yüklerini dağıtarak bunu test edeceğiz.
İş yükleri için yeni bir ServiceAccount oluşturun.
kubectl apply -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: annotations: azure.workload.identity/client-id: $MI_CLIENT_ID name: $MI_NAME EOF
100 ileti yayımlamak için bir İş dağıtın.
kubectl apply -f - <<EOF apiVersion: batch/v1 kind: Job metadata: name: myproducer spec: template: metadata: labels: azure.workload.identity/use: "true" spec: serviceAccountName: $MI_NAME containers: - image: ghcr.io/azure-samples/aks-app-samples/servicebusdemo:latest name: myproducer resources: {} env: - name: OPERATION_MODE value: "producer" - name: MESSAGE_COUNT value: "100" - name: AZURE_SERVICEBUS_QUEUE_NAME value: $SB_QUEUE_NAME - name: AZURE_SERVICEBUS_HOSTNAME value: $SB_HOSTNAME restartPolicy: Never EOF
Azure Service Bus'tan iletileri kullanma
Azure Service Bus kuyruğunda iletileri yayımladığımıza göre, iletileri kullanmak için bir ScaledJob dağıtacağız. Bu ScaledJob, iş yükü kimliğini kullanarak Azure Service Bus kuyruğunda kimlik doğrulaması yapmak ve her 10 iletinin ölçeğini genişletmek için KEDA TriggerAuthentication kaynağını kullanır.
İletileri kullanmak için bir ScaledJob kaynağı dağıtın. Ölçek tetikleyicisi her 10 iletide bir ölçeği genişletecek şekilde yapılandırılır. KEDA ölçeklendiricisi, 100 iletiyi kullanmak için 10 iş oluşturur.
kubectl apply -f - <<EOF apiVersion: keda.sh/v1alpha1 kind: ScaledJob metadata: name: myconsumer-scaledjob spec: jobTargetRef: template: metadata: labels: azure.workload.identity/use: "true" spec: serviceAccountName: $MI_NAME containers: - image: ghcr.io/azure-samples/aks-app-samples/servicebusdemo:latest name: myconsumer env: - name: OPERATION_MODE value: "consumer" - name: MESSAGE_COUNT value: "10" - name: AZURE_SERVICEBUS_QUEUE_NAME value: $SB_QUEUE_NAME - name: AZURE_SERVICEBUS_HOSTNAME value: $SB_HOSTNAME restartPolicy: Never triggers: - type: azure-servicebus metadata: queueName: $SB_QUEUE_NAME namespace: $SB_NAME messageCount: "10" authenticationRef: name: azure-servicebus-auth EOF
Not
ScaledJob her ölçeklendirme olayı gerçekleştiğinde bir Kubernetes İş kaynağı oluşturur ve bu nedenle kaynak oluşturulurken bir İş şablonunun geçirilmesi gerekir. Yeni İşler oluşturulduktan sonra, podlar iletileri kullanmak için iş yükü kimlik bitleriyle dağıtılır.
KEDA ölçeklendiricisinin beklendiği gibi çalıştığını doğrulayın.
kubectl describe scaledjob myconsumer-scaledjob
Aşağıdakine benzer olaylar görmeniz gerekir.
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal KEDAScalersStarted 10m scale-handler Started scalers watch Normal ScaledJobReady 10m keda-operator ScaledJob is ready for scaling Warning KEDAScalerFailed 10m scale-handler context canceled Normal KEDAJobsCreated 10m scale-handler Created 10 jobs
Kaynakları temizleme
Dağıtımın başarılı olduğunu doğruladıktan sonra, Azure maliyetlerinin oluşmasını önlemek için kaynakları temizleyebilirsiniz.
[
az group delete
][az-group-delete] komutunu kullanarak Azure kaynak grubunu ve içindeki tüm kaynakları silin.az group delete --name $RG_NAME --yes --no-wait
Sonraki adımlar
Bu makalede, AKS'de KEDA eklentisini ve iş yükü kimliğini kullanarak uygulamalarınızı nasıl güvenli bir şekilde ölçeklendirdiğiniz gösterildi.
KEDA sorunlarını giderme hakkında bilgi için bkz . Kubernetes Olay Odaklı Otomatik Ölçeklendirme (KEDA) eklentisinin sorunlarını giderme.
KEDA hakkında daha fazla bilgi edinmek için yukarı akış KEDA belgelerine bakın.
Azure Kubernetes Service