你当前正在访问 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 安装的群集启用加载项

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

在 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 工作负荷 ID 并在使用工作负荷 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_TENANT_IDAZURE_FEDERATED_TOKEN_FILEAZURE_AUTHORITY_HOST

第三方信息免责声明

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

联系我们寻求帮助

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