AKS 常见问题解答

本文提供有关 Azure Kubernetes 服务 (AKS) 的某些最常见问题的解答。

支持

AKS 是否提供服务级别协议?

AKS 在标准定价层中提供服务级别协议(SLA)保证 ,并提供运行时间 SLA 功能

什么是平台支持,它包括什么?

平台支持是不支持的 n-3 版本群集的支持计划。 平台支持仅包括 Azure 基础结构支持。

有关详细信息,请参阅平台支持策略

AKS 是否会自动升级不受支持的群集?

是的,AKS 会为不受支持的群集启动自动升级。 当 n-3 版本的群集(其中 n 是正式版的最新支持的 AKS 次要版本)即将降至 n-4 时,AKS 会自动将群集升级到 n-2 以保留在 AKS 支持策略中。

有关详细信息,请参阅支持的 Kubernetes 版本计划内维护时段,以及自动升级

是否可以在 AKS 上运行 Windows Server 容器?

是的,AKS 还支持 Windows Server 容器。 有关详细信息,请参阅 AKS 上的 Windows Server 常见问题解答

是否可将 Azure 预留折扣应用于 AKS 代理节点?

AKS 代理节点按标准 Azure 虚拟机(VM)计费。 如果你为在 AKS 中使用的 VM 大小购买了 Azure 预留,会自动应用这些折扣。

运营

是否可以在 Azure 租户之间移动或迁移群集?

否。 当前不支持在租户之间移动 AKS 群集。

是否可以在订阅之间移动或迁移群集?

否。 当前不支持在订阅之间移动 AKS 群集。

是否可以将我的 AKS 群集或 AKS 基础结构资源移到其他资源组,或将它们重命名?

否。 不支持移动或重命名 AKS 群集及其关联的资源。

是否可以在删除群集后还原群集?

否。 删除群集后无法还原群集。 删除群集时,也会删除节点资源组及其所有资源。

如果要保留任何资源,请在删除群集之前将其移动到另一个资源组。 若要防止意外删除,可以使用 Node 资源组锁定锁定托管群集资源的 AKS 托管资源组。

能否将 AKS 群集缩放为零?

是否可以使用虚拟机规模集 API 手动缩放?

否。 不支持使用虚拟机规模集 API 的缩放作。 可以使用 AKS API (az aks scale)。

是否可以使用虚拟机规模集手动缩放到零节点?

否。 不支持使用虚拟机规模集 API 的缩放作。 可以使用 AKS API 将非系统节点池缩放为零,或 改为停止群集

是否可以停止或解除分配所有 VM?

否。 此配置不受支持。 改为停止群集

为什么使用 AKS 创建两个资源组?

AKS 基于许多 Azure 基础结构资源(包括虚拟机规模集、虚拟网络和托管磁盘)构建。 通过这些集成,你可在 AKS 提供的托管 Kubernetes 环境内应用 Azure 平台的多个核心功能。 例如,可以将大多数 Azure VM 类型直接用于 AKS,并且可以使用 Azure 预留自动接收这些资源的折扣。

要启用此体系结构,每个 AKS 部署都需跨越两个资源组:

  1. 创建第一个资源组。 此组仅包含 Kubernetes 服务资源。 在部署过程中,AKS 资源提供程序会自动创建第二个资源组。 例如 MC_myResourceGroup_myAKSCluster_eastus。 有关如何指定这第二个资源组的名称,请参阅下一部分。
  2. 第二个资源组(称为节点资源组)包含与该群集相关联的所有基础结构资源。 这些资源包括 Kubernetes 节点 VM、虚拟网络和存储。 默认情况下,节点资源组的名称类似于 MC_myResourceGroup_myAKSCluster_eastus。 每次删除群集时,AKS 都会自动删除节点资源组。 仅将此资源组用于共享群集生命周期的资源。

备注

修改 AKS 群集中节点资源组下的任何资源是不支持的操作,并且会导致群集操作失败。 可以阻止对节点资源组进行更改。 阻止用户修改 AKS 群集管理的资源。

是否可以自定义 AKS 节点资源组的名称?

默认情况下,AKS 会将节点资源组命名为 MC_resourcegroupname_clustername_location,但你可以提供自己的名称。

若要自行指定一个资源组名称,请安装 aks-preview Azure CLI 扩展版本 0.3.2 或更高版本。 使用 az aks create 命令创建 AKS 群集时,请使用 --node-resource-group 参数并为资源组指定名称。 如果使用 Azure 资源管理器模板 部署 AKS 群集,则可以使用 nodeResourceGroup 属性定义资源组名称。

  • Azure 资源提供程序会自动创建辅助资源组。
  • 只能在创建群集时指定自定义资源组名称。

使用节点资源组时,无法:

  • 不能为节点资源组指定现有资源组。
  • 为节点资源组指定不同的订阅。
  • 创建群集后更改节点资源组名称。
  • 不能为节点资源组内的受管理资源指定名称。
  • 不能修改或删除节点资源组内受管理资源中由 Azure 创建的标记。

是否可以修改节点资源组中 AKS 资源的标记和其他属性?

如果修改或删除节点资源组中 Azure 创建的标记和其他资源属性,可能会遇到意外的缩放和升级错误。 AKS 允许创建和修改最终用户创建的自定义标记,并在 创建节点池时添加这些标记。 例如,可以创建或修改标记,以分配业务单位或成本中心。 另一种选择是在托管资源组上创建作用域的 Azure 策略。

为各自的 Azure 服务创建 Azure 创建的标记,应始终允许这些标记。 有用于 AKS 的 aks-managedk8s-azure 标记。 在 AKS 群集中的节点资源组下修改资源上任何 Azure 创建的标记是不受支持的操作,这会中断服务级别目标 (SLO)。

备注

过去,标记名称 Owner 是为 AKS 保留的,用于管理负载均衡器前端 IP 上分配的公共 IP。 现在,服务使用 aks-managed 前缀。 对于旧资源,请勿使用 Azure 策略应用 Owner 标记名称。 否则,AKS 群集部署和更新操作上的所有资源都会中断。 此限制不适用于新创建的资源。

为什么在群集上看到 Aks 管理的前缀 Helm 版本,以及其修订计数为何不断增加?

AKS 使用 Helm 将组件传送到群集。 可以安全地忽略 aks-managed 前缀的 Helm 版本。 这些 Helm 版本的不断增加修订是预期和安全。

限额、限制和区域可用性

哪些 Azure 区域目前提供 AKS?

有关可用区域的完整列表,请参阅 AKS 区域和可用性

能否跨区域分布 AKS 群集?

否。 AKS 群集是区域性资源,不能跨区域。 有关如何创建包含多个区域的体系结构的指导,请参阅 业务连续性和灾难恢复的最佳做法

AKS 群集是否可以跨可用性区域?

是的,在支持可用性区域的区域中,可以在一个或跨多个可用性区域部署 AKS 群集。

单个群集中 VM 的大小是否可以不同?

是的,可以通过创建 多个节点池,在 AKS 群集中使用不同的 VM 大小。

AKS 中容器映像的大小限制是多少?

AKS 不会对容器映像大小设置限制。 但图像越大,内存需求就越高。 再大的话可能超出资源限制或工作器节点的总体可用内存。 默认情况下,AKS 群集的 VM 大小 Standard_DS2_v2 的内存设置为 7 GiB。

当容器映像过大(如 TB)范围内一样,kubelet 可能无法将其从容器注册表拉取到节点,因为磁盘空间不足。

对于 Windows Server 节点,Windows 更新不会自动运行和应用最新的更新。 应在 AKS 群集中的群集和 Windows Server 节点池上执行升级。 根据 Windows 更新发布周期和你自己的验证过程遵循常规计划。 此升级过程创建运行最新 Windows Server 映像和修补程序的节点,然后删除较旧的节点。 有关此过程的详细信息,请参阅升级 AKS 中的节点池

AKS 映像是否需要以根用户身份运行?

以下映像具有作为根运行的功能要求,并且必须针对任何策略提出例外:

  • mcr.azk8s.cn/oss/kubernetes/coredns
  • mcr.azk8s.cn/azuremonitor/containerinsights/ciprod
  • mcr.azk8s.cn/oss/calico/node
  • mcr.azk8s.cn/oss/kubernetes-csi/azuredisk-csi

安全性、访问和标识

是否可以控制谁有权限访问 Kubernetes API 服务器?

是的,可以通过以下两种方式限制对 API 服务器的访问:

  • 如果要为 API 服务器维护公共终结点,但限制对一组受信任的 IP 范围的访问,请使用 API 服务器授权 IP 范围。
  • 如果要限制只能从虚拟网络内部访问 API 服务器,请使用专用群集

安全更新是否可应用于 AKS 代理节点?

AKS 修补每周有 供应商修复 的 CVE。 没有修补程序的 CVE 正在等待供应商修复,然后才能进行修正。 AKS 映像在 30 天内自动更新。 建议定期应用更新的节点映像,以确保应用最新的修补映像和 OS 修补程序以及最新修补程序。 可以执行此任务:

  • 通过 Azure 门户或 Azure CLI 手动执行。
  • 通过升级 AKS 群集。 群集会自动升级 警戒线和清空节点 。 然后,它会使用最新的 Ubuntu 映像和新的修补程序版本或次要 Kubernetes 版本将新节点联机。 有关详细信息,请参阅升级 AKS 群集
  • 使用 节点映像升级

我是否应注意针对 AKS 的安全威胁?

Microsoft提供了其他作的指导,这些作可以通过 Microsoft Defender for Containers 等服务来保护工作负荷。 有关与 AKS 和 Kubernetes 相关的安全威胁的信息,请参阅 新的大规模市场活动目标 Kubeflow (2021 年 6 月 8 日)。

AKS 是否将任何客户数据存储在群集区域之外?

否。 所有数据都存储在群集的区域。

当卷中有大量文件时,应如何避免权限所有权设置缓慢问题?

传统上,如果 Pod 作为非根用户(应运行),则必须在 Pod 的安全上下文中指定参数 fsGroup ,以便该卷可读且可由 Pod 写入。 有关此要求的详细信息,请参阅 配置 Pod 或容器的安全上下文

设置 fsGroup 的副作用是,每次装载卷时,Kubernetes 都必须以递归方式对卷中的所有文件和目录使用 chown() 命令 chmod() (但有几个例外)。 即使卷的组所有权已与请求 fsGroup 的参数匹配,也会发生这种情况。 对于包含大量小文件的大型卷,此配置可能很昂贵,这可能会导致 Pod 启动需要很长时间。 此方案是 v1.20 之前的已知问题。 解决方法是将 Pod 设置为以 root 身份运行:

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    runAsUser: 0
    fsGroup: 0

此问题已在 Kubernetes 版本 1.20 中解决。 有关详细信息,请参阅 Kubernetes 1.20:精细控制卷权限更改

网络

托管控制平面如何与节点通信?

AKS 使用安全隧道通信来允许 api-server 各个节点的 kubelets 进行通信,即使在单独的虚拟网络上也是如此。 隧道通过相互传输层安全加密进行保护。 AKS 使用的当前主隧道是 Konnectivity,以前称为 apiserver-network-proxy。 验证所有网络规则是否都遵循 Azure 所需的网络规则和完全限定的域名(FQDN)。

我的 Pod 是否可以使用 API 服务器 FQDN 而不使用群集 IP?

是的,你可以在 Pod 中添加注释 kubernetes.azure.com/set-kube-service-host-fqdn,将 KUBERNETES_SERVICE_HOST 变量设置为 API 服务器的域名而不是群集内服务 IP。 如果群集出口是通过第 7 层防火墙完成的,则此修改非常有用。 例如,将 Azure 防火墙与应用程序规则配合使用。

是否可以使用 AKS 配置 NSG?

AKS 不会将网络安全组(NSG)应用到其子网,也不会修改与该子网关联的任何 NSG。 AKS 仅修改网络接口 NSG 设置。 如果使用容器网络接口(CNI),还必须确保 NSG 中的安全规则允许节点和 Pod 无类域间路由(CIDR)范围之间的流量。 如果使用 kubenet,还必须确保 NSG 中的安全规则允许节点与 Pod CIDR 之间的流量。 有关详细信息,请参阅网络安全组

时间同步在 AKS 中的工作原理是什么?

AKS 节点运行 chrony 服务,该服务从本地主机拉取时间。 在 Pod 上运行的容器从 AKS 节点获取时间。 在容器内打开的应用程序使用 Pod 容器中的时间。

加载项、扩展和集成

是否可以使用自定义 VM 扩展?

否。 AKS 是托管服务。 不支持作基础结构即服务(IaaS)资源。 若要安装自定义组件,请使用 Kubernetes API 和机制。 例如,使用 DaemonSets 安装任何必需的组件。

AKS 支持哪些 Kubernetes 许可控制器? 是否可以添加或删除许可控制器?

AKS 支持以下许可控制器

  • NamespaceLifecycle
  • LimitRanger
  • ServiceAccount
  • DefaultIngressClass
  • DefaultStorageClass
  • DefaultTolerationSeconds
  • MutatingAdmissionWebhook
  • ValidatingAdmissionWebhook
  • ResourceQuota
  • PodNodeSelector
  • PodTolerationRestriction
  • ExtendedResourceToleration

目前无法修改 AKS 中的准入控制器列表。

是否可以在 AKS 上使用许可控制器 Webhook?

是,可以在 AKS 上使用准入控制器 Webhook。 建议排除使用 control-plane 标签标记的内部 AKS 命名空间。 例如:

namespaceSelector:
    matchExpressions:
    - key: control-plane
      operator: DoesNotExist

AKS 防火墙 API 服务器出口,以便可从群集内部访问允许控制器 Webhook。

允许控制器 Webhook 是否会影响 kube-system 和内部 AKS 命名空间?

为了保护系统的稳定性并防止自定义允许控制器影响命名空间中的 kube-system 内部服务,AKS 具有允许强制程序,该强制程序会自动排除 kube-system 和 AKS 内部命名空间。 此服务可确保自定义允许控制器不会影响在其中 kube-system运行的服务。

如果有用于部署支持自定义许可 Webhook 的内容 kube-system 的关键用例,可以添加以下标签或批注,以便允许强制程序忽略它:

  • 标签:"admissions.enforcer/disabled": "true"
  • 注解: "admissions.enforcer/disabled": true

不是,它没有与 Azure Key Vault 集成。

适用于机密存储 CSI 驱动程序的 Azure Key Vault 提供程序 提供 Azure Key Vault 与 AKS 的本机集成。

是否可以将 FIPS 加密库用于 AKS 上的部署?

基于 Linux 的节点池现在支持使用联邦信息处理标准(FIPS)启用的节点。 有关更多详细信息,请参阅添加已启用 FIPS 的节点池

AKS 加载项如何更新?

任何补丁(包括安全修补程序)都会自动应用于 AKS 群集。 更新群集时,任何大于修补程序(例如主要版本或次要版本更改)(可能具有已部署对象的中断性变更)在更新群集时(如果有新版本可用)都更新。 有关新版本何时可用的信息,请参阅 AKS 发行说明

在 Linux 虚拟机规模集实例上安装的 AKS Linux 扩展有什么用途?

AKS Linux 扩展是一个 Azure VM 扩展,用于在 Kubernetes 工作节点上安装和配置监视工具。 该扩展安装在所有新的和现有的 Linux 节点上。 它配置以下监视工具:

  • 节点导出程序:从 VM 收集硬件遥测数据,并使用指标终结点使其可用。 然后,监视工具(如 Prometheus)可以取消这些指标。
  • 节点问题检测器:旨在使各种节点问题对群集管理堆栈中的上游层可见。 它是在每个节点上运行的系统单元,可检测节点问题,并使用它们Events报告给群集的 API 服务器NodeConditions
  • ig:是一个 eBPF 支持的开源框架,用于调试和观察 Linux 和 Kubernetes 系统。 它提供一组工具(或小工具),用于收集用户可用于识别性能问题、崩溃或其他异常原因的相关信息。 值得注意的是,它与 Kubernetes 的独立使用户还能够用它来调试控制平面问题。

这些工具有助于围绕许多节点运行状况相关问题提供可观测性,例如:

  • 基础结构守护程序问题: NTP 服务关闭
  • 硬件问题: CPU、内存或磁盘错误
  • 内核问题: 内核死锁,文件系统损坏
  • 容器运行时问题: 无响应运行时守护程序

扩展不需要对记录的 AKS 出口要求以外的任何 URL、IP 地址或端口进行额外的出站访问。 它不需要在 Azure 中授予的任何特殊权限。 它用于 kubeconfig 连接到 API 服务器以发送收集的监视数据。

排查群集问题

为什么删除群集需要这么长的时间?

大多数群集会根据用户请求删除。 在某些情况下,尤其是自带资源组或执行跨资源组任务的情况下,删除可能需要更多时间甚至失败。 如果删除出现问题,请仔细检查资源组上没有锁。 此外,请确保资源组之外的任何资源都与资源组取消关联。

为什么创建或更新群集需要这么长的时间?

如果在创建和更新群集时遇到问题,请确保没有任何分配的策略或服务约束可能会阻止 AKS 群集管理 VM、负载均衡器或标记等资源。

如果我的 Pod 或部署处于 NodeLost 或未知状态,我仍能升级群集吗?

可以,但我们不建议这样做。 当群集的状态已知且正常时执行更新。

如果群集具有一个或多个处于“不正常”状态的节点,或者如果群集处于“不正常”状态,是否可以执行升级?

否。 在升级之前,删除或删除处于失败状态或其他群集的任何节点。

我尝试删除群集,但看到错误“[Errno 11001] getaddrinfo 失败。

最常见的情况是,如果正在使用的一个或多个 NSG 仍与群集关联,则会出现此错误。 删除它们并尝试再次删除群集。

我运行了升级,但现在我的 Pod 处于崩溃循环中,就绪情况探测会失败。

确认服务主体未过期。 有关详细信息,请参阅 AKS 服务主体AKS 更新凭据

群集正常工作,但突然无法预配负载均衡器或装载永久性卷声明。

确认服务主体未过期。 有关详细信息,请参阅 AKS 服务主体AKS 更新凭据