Alibaba Cloud Linux 3系统中Systemd导致Pod初始化失败

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

使用Alibaba Cloud Linux 3作为K8s节点,在扩容后有可能引起Pod初始化失败。本文主要介绍Alibaba Cloud Linux 3系统中Systemd导致Pod初始化失败的原因及解决方案。

问题描述

Pod初始化过程中,扩容节点在刷新K8s相关的配置时调用的脚本执行了systemctl daemon-reload命令,导致Pod初始化失败,报错cgroup设置失败或cgroup.proc文件不存在。

影响范围

Alibaba Cloud Linux 3系统中,Systemd的版本低于systemd-239-82.0.3.4.al8.2

问题原因

  • 执行systemctl daemon-reload命令将重建所有的单元。当该操作与Pod初始化流程并发执行时会导致race,从而引发 dbus 通信失败或unit文件找不到的问题。

  • 执行systemctl daemon-reload过程中未保存和未写入cgroup中的进程IDPod初始化流程并发执行时,可能发生cgroup empty事件,从而导致cgroup被删除。

解决方案

升级Systemdsystemd-239-82.0.3.4.al8.2及以上版本。

  1. 查看当前系统中Systemd版本。

    rpm -q systemd
  2. 升级Systemd版本。

    如需升级为其他版本,替换systemd-239-82.0.3.4.al8.2.x86_64为所需版本。

    sudo dnf upgrade -y systemd-239-82.0.3.4.al8.2.x86_64
  3. 重启系统使配置生效。

    警告

    重启实例将导致您的实例暂停运行,这可能引发业务中断和数据丢失。因此,建议您在执行此操作之前备份关键数据,并选择在非业务高峰期进行。

    sudo reboot