Azure AKS节点CA证书监控组件故障分析与解决方案
AKS Azure Kubernetes Service 项目地址: https://gitcode.com/gh_mirrors/ak/AKS
问题背景
在Azure Kubernetes Service(AKS)集群中,当启用自定义CA证书信任功能时,系统会部署一个名为aks-node-ca-watcher
的守护进程集(DaemonSet)。该组件负责监控节点上的CA证书变化并确保其正确同步到Pod中。近期部分用户报告该组件在某些节点上无法正常运行,出现容器镜像拉取失败的错误提示。
故障现象
受影响的节点上,custom-ca-trust
Pod会报错:"Container image 'mcr.microsoft.com/aks/aks-node-ca-watcher:static' is not present with pull policy of Never"。这表明系统尝试使用本地镜像运行容器,但所需的静态版本镜像在节点上缺失。
根本原因分析
经过Azure工程团队调查,发现该问题主要与节点镜像版本更新有关:
- 对于早期创建的节点,如果初始部署时未启用自定义CA证书功能,后续启用时可能出现镜像缺失
- 在部分节点镜像版本(如AKSAzureLinux-V2gen2-202409.30.0)中,预加载的
aks-node-ca-watcher
静态版本镜像未能正确部署 - 该组件设计为使用本地镜像运行(PullPolicy: Never),而非从镜像仓库拉取,因此当本地镜像缺失时直接导致启动失败
解决方案
临时解决方案
对于受影响的节点,可以通过以下命令手动修复:
ctr --namespace k8s.io image tag mcr.microsoft.com/aks/aks-node-ca-watcher:master.240820.1 mcr.microsoft.com/aks/aks-node-ca-watcher:static
此命令将可用的master分支镜像重新标记为static标签,使组件能够正常运行。为批量修复集群中所有节点,可以部署以下DaemonSet:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: host-command-ctr
labels:
k8s-app: host-command-ctr
spec:
selector:
matchLabels:
k8s-app: host-command-ctr
template:
metadata:
labels:
k8s-app: host-command-ctr
spec:
hostNetwork: true
hostPID: true
initContainers:
- name: init-node
command:
- nsenter
- --mount=/proc/1/ns/mnt
- --
- sh
- -c
- ctr --namespace k8s.io image tag mcr.microsoft.com/aks/aks-node-ca-watcher:master.240820.1 mcr.microsoft.com/aks/aks-node-ca-watcher:static --force
image: alpine:3
securityContext:
privileged: true
containers:
- name: wait
image: k8s.gcr.io/pause:3.1
tolerations:
- key: CriticalAddonsOnly
operator: Exists
- effect: NoExecute
operator: Exists
- effect: NoSchedule
operator: Exists
长期解决方案
Azure工程团队已发布全局修复方案,新创建的节点和升级后的节点将包含正确的镜像配置。建议用户:
- 对受影响的节点执行节点镜像升级操作
- 定期维护集群,确保节点运行在最新的支持版本上
- 对于关键业务集群,建议启用节点自动升级功能
最佳实践建议
- 在启用自定义CA证书功能前,确保所有节点运行在较新的镜像版本
- 实施变更前,先在测试环境验证功能兼容性
- 建立节点健康监控机制,及时发现类似组件异常
- 保持与AKS发布说明同步,了解已知问题和修复方案
总结
AKS节点CA证书监控组件故障是一个典型的版本兼容性问题,通过理解其工作原理和掌握临时解决方案,运维团队可以快速恢复业务。长期而言,保持集群组件版本最新是预防此类问题的关键。Azure工程团队持续改进产品可靠性,用户可通过官方渠道获取最新更新和支持。
AKS Azure Kubernetes Service 项目地址: https://gitcode.com/gh_mirrors/ak/AKS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考