AKS集群部署Kured后未自动封锁带重启标记节点问题排查
故障环境说明
- AKS集群基础配置:版本1.22.6,网络类型Azure CNI,为私有集群
- 节点池镜像版本信息:
Name NodeImageVersion --------- --------------------------------------- devpool AKSUbuntu-1804gen2containerd-2022.02.07 system AKSUbuntu-1804gen2containerd-2022.02.07
- 已部署Kured组件实现节点镜像更新调度,所有组件资源创建成功,kured DaemonSet Pod已在所有节点正常运行。当前kured DaemonSet配置如下:
apiVersion: apps/v1 kind: DaemonSet metadata: annotations: deprecated.daemonset.template.generation: "6" name: kured namespace: kube-system spec: revisionHistoryLimit: 10 selector: matchLabels: name: kured template: metadata: labels: name: kured spec: containers: - command: - /usr/bin/kured - --period=1m - --start-time=10am - --end-time=1pm - --time-zone=Local - --ds-name=kured - --ds-namespace=kube-system - --reboot-days=mon env: - name: KURED_NODE_ID valueFrom: fieldRef: apiVersion: v1 fieldPath: spec.nodeName image: docker.io/weaveworks/kured:master-f6e4062 imagePullPolicy: IfNotPresent name: kured resources: {} securityContext: privileged: true terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst hostPID: true restartPolicy: Always schedulerName: default-scheduler securityContext: {} serviceAccount: kured serviceAccountName: kured terminationGracePeriodSeconds: 30 tolerations: - effect: NoSchedule key: node-role.kubernetes.io/master updateStrategy: rollingUpdate: maxSurge: 0 maxUnavailable: 1 type: RollingUpdate
故障表现
- kured检测周期已设置为1分钟,经登录节点排查,所有节点上均存在
/var/run/reboot-required重启标记文件 - 节点始终保持
Ready for Scheduling状态,未按预期被kured自动封锁并触发重启流程 - kured Pod运行日志输出如下:
time="2022-06-24T09:24:12Z" level=info msg="Kubernetes Reboot Daemon: master-f6e4062" time="2022-06-24T09:24:12Z" level=info msg="Node ID: aks-devpool-1xxxxxxx-vmssxxxxxxx" time="2022-06-24T09:24:12Z" level=info msg="Lock Annotation: kube-system/kured:weave.works/kured-node-lock" time="2022-06-24T09:24:12Z" level=info msg="Reboot Sentinel: /var/run/reboot-required every 1m0s" time="2022-06-24T09:24:12Z" level=info msg="Blocking Pod Selectors: []" time="2022-06-24T09:24:12Z" level=info msg="Reboot on: ---Mon--------------- between 10:00 and 13:00 UTC"
根因分析
故障由三个配置问题共同导致:
- 缺少宿主机路径挂载,无法检测到重启标记:当前DaemonSet配置未将宿主机的
/var/run目录挂载到kured容器内,容器与宿主机文件系统隔离,无法读取到宿主机上存在的/var/run/reboot-required标记文件,永远无法触发重启判断逻辑。注意hostPID: true仅共享PID命名空间,不会共享文件系统。 - 时区配置不生效:配置中添加了
--time-zone=Local参数,但未将宿主机的/etc/localtime文件挂载到容器内,容器内的Local时区默认指向UTC时区,和节点本地时区不一致。从日志也可以验证该问题:配置了Local时区,但日志显示重启窗口为UTC时间。 - 当前时间不在配置的重启窗口内:日志打印时间为UTC 2022-06-24 09:24,当天为星期五,而配置中
--reboot-days=mon仅允许周一执行重启,即便前两个配置问题修复,非周一时间段也不会触发重启操作。
修复方案
按以下步骤调整kured DaemonSet配置:
- 补全容器内的卷挂载配置,在kured容器的
containers配置段下添加volumeMounts:
volumeMounts: - name: host-run mountPath: /var/run - name: host-localtime mountPath: /etc/localtime readOnly: true
- 在Pod spec层级(和
containers同级)添加volumes配置,关联宿主机路径:
volumes: - name: host-run hostPath: path: /var/run - name: host-localtime hostPath: path: /etc/localtime
- 根据实际业务需求调整重启窗口参数:
- 若需要在节点本地时间每周一10:00-13:00执行重启,保留原有
--reboot-days=mon、--start-time=10am、--end-time=1pm、--time-zone=Local参数即可 - 若需要扩展允许重启的日期,修改
--reboot-days参数,例如允许工作日重启可设置为--reboot-days=mon,tue,wed,thu,fri
- 若需要在节点本地时间每周一10:00-13:00执行重启,保留原有
- 验证配置生效:
- 等待DaemonSet滚动更新完成,查看新启动的kured Pod日志,确认重启窗口显示的时区为节点本地时区(东八区环境会显示为CST)
- 可在测试节点手动创建
/var/run/reboot-required文件,在配置的重启窗口时间内观察节点是否被自动封锁、触发重启流程。
内容的提问来源于stack exchange,提问作者Vowneee
相关产品推荐
相关产品推荐

