作者简介
邓宇星,SUSE Rancher 中国区软件架构师,6 年云原生领域经验,参与Rancher 1.x 到 Rancher 2.x 版本迭代,目前负责 Rancher For openEuler(RFO) 项目开发。
最近我们关注到一个关于 containerd 运行时的 issue,该问题在 containerd v1.6.9/v1.5.15 被引入。出现的问题是,当 containerd 重启后,在其中运行的 Pod 元数据中关于网络相关的数据(如 pod ip)丢失,核心原因在于部分数据没有落盘。
受影响的版本:
- v1.6.9 ~ v1.6.14,问题在 v1.6.15 版本中被修复。
- v1.5.15 ~ v1.5.16,问题在 v1.5.17 版本中被修复。
通过以下步骤,可以快速重现该问题,并验证该问题的修复情况。
本文使用 rke2 为例进行演示,版本为 rke2 v1.24.9+rke2r1,该版本使用了 k3s-containerd v1.6.12-k3s1,受该 containerd 问题影响。
在 containerd 的默认行为中,重启 containerd 服务不会影响正在运行的业务容器,并在启动容器时,通过将容器父进程绑定 Pid 1 的方式进行体现。即使使用 systemctl 对服务进行重启,也不会影响到已经在运行的容器状态。
问题重现
# 配置rke2使用国内镜像仓库下载镜像
mkdir -p /etc/rancher/rke2
echo "system-default-registry: registry.cn-hangzhou.aliyuncs.com" > /etc/rancher/rke2/config.yaml
# 使用命令安装 rke2,以下命令使用了我们在国内维护的 rke2 安装镜像脚本,会从aliyun OSS下载RKE2资源
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/rke2/install.sh | INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_VERSION=v1.24.9+rke2r1 sh -
# [INFO] using v1.24.9-rke2r1 as release
# [INFO] downloading checksums at https://rancher-mirror.rancher.cn/rke2/releases/download/v1.24.9-rke2r1/sha256sum-amd64.txt
# [INFO] downloading tarball at https://rancher-mirror.r