KEDA とは Kubernetes-based Event Driven Autoscaler のことです。 KEDA は、Prometheus などのシステムのメトリックにクエリを実行することで、処理する負荷に基づいて Kubernetes 内の任意のコンテナーのスケーリングの実行を可能とします。 KEDA を Azure Kubernetes Service (AKS) クラスターと統合して、Azure Monitor ワークスペースの Prometheus メトリックに基づいてワークロードをスケーリングします。
KEDA をAzure Kubernetes Service に統合するには、クラスターにワークロード ID またはポッド ID をデプロイして構成する必要があります。 この ID によって、KEDA は Azure で認証を行い、Monitor ワークスペースからスケーリングのためのメトリックを取得できるようになります。
この記事では、ワークロード ID を使用して KEDA を AKS クラスターに統合する手順について説明します。
注意
Microsoft Entra ワークロード ID を使用することをお勧めします。 この認証方法により、ポッドマネージド ID (プレビュー) が置き換えられます。これにより、Kubernetes のネイティブ機能と統合され、アプリケーションに代わって任意の外部 ID プロバイダーとフェデレーションされます。
Azure Kubernetes Service のオープン ソースの Microsoft Entra ポッドマネージド ID (プレビュー) は、2022 年 10 月 24 日の時点で非推奨となり、プロジェクトは 2023 年 9 月にアーカイブされます。 詳細については、非推奨に関する通知を参照してください。 AKS マネージド アドオンは、2023 年 9 月に非推奨となります。
AKS クラスターが、ワークロード ID または OIDC Issuer を有効にして作成されていない場合は、それを有効にする必要があります。 どちらか分からない場合は、次のコマンドを実行して、有効になっているかどうかをチェックできます。
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
ワークロード ID と OIDC Issuer を有効にするには、次のコマンドを実行します。
az aks update -g $RESOURCE_GROUP -n $AKS_CLUSTER_NAME --enable-workload-identity --enable-oidc-issuer
OIDC Issuer の URL を環境変数に格納して、後で使用します。
export AKS_OIDC_ISSUER="$(az aks show -n $AKS_CLUSTER_NAME -g $RESOURCE_GROUP --query "oidcIssuerProfile.issuerUrl" -otsv)"
KEDA 用のユーザー割り当て ID を作成します。 この ID は、KEDA が Azure Monitor での認証に使用します。
フェデレーション ID 資格情報が最初に追加された後に反映されるまでに数秒かかります。 フェデレーション ID 資格情報を追加した直後にトークン要求が行われると、古いデータがあるディレクトリにキャッシュが設定されるため、数分失敗する可能性があります。 このイシューを回避するには、フェデレーション ID 資格情報を追加した後に若干の遅延を追加できます。
KEDA をデプロイする
KEDA は、YAML マニフェスト、Helm チャート、またはオペレーター ハブを使用してデプロイできます。 この記事では、Helm チャートを使用します。 KEDA のデプロイの詳細については、「KEDA のデプロイ」を参照してください。
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\"}"}
ID に Azure Monitor ワークスペースの Monitoring Data Reader ロールがあることを確認します。