你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

排查 Kubernetes 事件驱动的自动缩放加载项问题

本文讨论如何对 Microsoft Azure Kubernetes 服务 (AKS) 的 Kubernetes 事件驱动的自动缩放 (KEDA) 加载项进行故障排除。 部署 KEDA AKS 加载项时,可能会遇到与应用程序自动缩放程序配置相关的问题。 本文将帮助你排查影响加载项但官方 KEDA 常见问题解答故障排除指南中未涵盖的错误和常见问题。

先决条件

KEDA 加载项支持

KEDA 加载项遵循与其他 AKS 加载项类似的支持模型。 支持所有 Azure KEDA 缩放程序 ,但 AKS 不支持第三方缩放程序。 如果遇到第三方缩放程序问题,请在官方 KEDA GitHub 存储库中提出问题。

故障排除清单

按照以下部分中的说明验证 KEDA 组件并对其进行故障排除。

检查可用的 KEDA 版本

可以使用 kubectl get 命令确定可用的 KEDA 版本:

kubectl get crd/scaledobjects.keda.sh -o custom-columns='APP:.metadata.labels.app\.kubernetes\.io/version'

命令输出显示已安装的 KEDA 版本:

APP
2.8.1

确保群集防火墙配置正确

KEDA 可能无法成功缩放应用程序,因为它无法启动。

检查操作员日志时,可能会发现类似于以下文本的错误条目:

1.6545953013458195e+09 ERROR Failed to get API Group-Resources {"error": "Get \"https://10.0.0.1:443/api?timeout=32s\": EOF"}
sigs.k8s.io/controller-runtime/pkg/cluster.New
/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.2/pkg/cluster/cluster.go:160
sigs.k8s.io/controller-runtime/pkg/manager.New
/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.2/pkg/manager/manager.go:313
main.main
/workspace/main.go:87
runtime.main
/usr/local/go/src/runtime/proc.go:255
1.6545953013459463e+09 ERROR setup unable to start manager {"error": "Get \"https://10.0.0.1:443/api?timeout=32s\": EOF"}
main.main
/workspace/main.go:97
runtime.main
/usr/local/go/src/runtime/proc.go:255

在指标服务器部分中,你可能会发现 KEDA 无法启动:

I0607 09:53:05.297924 1 main.go:147] keda_metrics_adapter "msg"="KEDA Version: 2.7.1"
I0607 09:53:05.297979 1 main.go:148] keda_metrics_adapter "msg"="KEDA Commit: "
I0607 09:53:05.297996 1 main.go:149] keda_metrics_adapter "msg"="Go Version: go1.17.9"
I0607 09:53:05.298006 1 main.go:150] keda_metrics_adapter "msg"="Go OS/Arch: linux/amd64"
E0607 09:53:15.344324 1 logr.go:279] keda_metrics_adapter "msg"="Failed to get API Group-Resources" "error"="Get \"https://10.0.0.1:443/api?timeout=32s\": EOF"
E0607 09:53:15.344360 1 main.go:104] keda_metrics_adapter "msg"="failed to setup manager" "error"="Get \"https://10.0.0.1:443/api?timeout=32s\": EOF"
E0607 09:53:15.344378 1 main.go:209] keda_metrics_adapter "msg"="making provider" "error"="Get \"https://10.0.0.1:443/api?timeout=32s\": EOF"
E0607 09:53:15.344399 1 main.go:168] keda_metrics_adapter "msg"="unable to run external metrics adapter" "error"="Get \"https://10.0.0.1:443/api?timeout=32s\": EOF"

这种情况可能意味着 KEDA 加载项由于防火墙配置错误而无法启动。 若要确保 KEDA 正常运行,请将防火墙配置为满足 Azure 全局所需的网络规则

为具有自托管开源 KEDA 安装的群集启用加载项

从理论上讲,即使 Kubernetes 只允许安装一个指标服务器,也可以多次安装 KEDA。 但是,我们不建议安装多个,因为只有一个安装可以正常工作。

在 AKS 群集上安装 KEDA 加载项时,将重写以前安装的开源 KEDA,并且加载项将接管。 在此方案中,自安装的 KEDA 部署的自定义和配置将丢失,不再应用。

尽管现有的自动缩放可能继续正常运行,但这种情况会带来风险。 KEDA 加载项的配置方式不同,并且不支持托管标识等功能。 为了防止安装过程中出现错误,建议先卸载现有 KEDA 安装,然后再启用 KEDA 加载项。

若要确定 KEDA 使用哪些指标适配器,请 kubectl get 运行 命令:

kubectl get APIService/v1beta1.external.metrics.k8s.io -o custom-columns='NAME:.spec.service.name,NAMESPACE:.spec.service.namespace'

概述显示了 Kubernetes 将用于获取指标的服务和命名空间:

NAME                              NAMESPACE
keda-operator-metrics-apiserver   kube-system

警告

如果命名空间不是 kube-system,则会忽略 AKS 加载项,并使用另一个指标服务器。

当工作负载标识未正确注入时如何重启 KEDA 操作员 Pod

如果使用 Microsoft Entra Workload ID并在使用Workload ID之前启用 KEDA,则必须重启 KEDA 操作员 Pod。 这可确保注入正确的环境变量。 为此,请按照下列步骤操作:

  1. 通过运行以下命令重启 Pod:

    kubectl rollout restart deployment keda-operator -n kube-system
    
  2. 通过运行以下命令获取 KEDA 运算符 Pod,然后找到名称以“keda-operator”开头的 Pod。

    kubectl get pod -n kube-system
    
  3. 若要验证是否已成功注入环境变量,请运行以下命令:

    kubectl describe pod <keda-operator-pod-name> -n kube-system
    

    如果已成功注入变量,则应在“环境”部分看到 、 AZURE_FEDERATED_TOKEN_FILEAZURE_AUTHORITY_HOST 的值AZURE_TENANT_ID

第三方信息免责声明

本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。