You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"
根因分析

故障由三个配置问题共同导致:

  1. 缺少宿主机路径挂载,无法检测到重启标记:当前DaemonSet配置未将宿主机的/var/run目录挂载到kured容器内,容器与宿主机文件系统隔离,无法读取到宿主机上存在的/var/run/reboot-required标记文件,永远无法触发重启判断逻辑。注意hostPID: true仅共享PID命名空间,不会共享文件系统。
  2. 时区配置不生效:配置中添加了--time-zone=Local参数,但未将宿主机的/etc/localtime文件挂载到容器内,容器内的Local时区默认指向UTC时区,和节点本地时区不一致。从日志也可以验证该问题:配置了Local时区,但日志显示重启窗口为UTC时间。
  3. 当前时间不在配置的重启窗口内:日志打印时间为UTC 2022-06-24 09:24,当天为星期五,而配置中--reboot-days=mon仅允许周一执行重启,即便前两个配置问题修复,非周一时间段也不会触发重启操作。
修复方案

按以下步骤调整kured DaemonSet配置:

  1. 补全容器内的卷挂载配置,在kured容器的containers配置段下添加volumeMounts:
volumeMounts:
- name: host-run
  mountPath: /var/run
- name: host-localtime
  mountPath: /etc/localtime
  readOnly: true
  1. 在Pod spec层级(和containers同级)添加volumes配置,关联宿主机路径:
volumes:
- name: host-run
  hostPath:
    path: /var/run
- name: host-localtime
  hostPath:
    path: /etc/localtime
  1. 根据实际业务需求调整重启窗口参数:
    • 若需要在节点本地时间每周一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
  2. 验证配置生效:
    • 等待DaemonSet滚动更新完成,查看新启动的kured Pod日志,确认重启窗口显示的时区为节点本地时区(东八区环境会显示为CST)
    • 可在测试节点手动创建/var/run/reboot-required文件,在配置的重启窗口时间内观察节点是否被自动封锁、触发重启流程。

内容的提问来源于stack exchange,提问作者Vowneee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:24:33