最近我們關注到一個關于containerd 運行時的issue
(https://github.com/containerd/containerd/issues/7843),該問題在 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安裝鏡像腳本,會從aliyunOSS下載RKE2資源
curl-sfLhttps://rancher-mirror.oss-cn-beijing.aliyuncs.com/rke2/install.sh|INSTALL_RKE2_MIRROR=cnINSTALL_RKE2_VERSION=v1.24.9+rke2r1sh-
#[INFO]usingv1.24.9-rke2r1asrelease
#[INFO]downloadingchecksumsathttps://rancher-mirror.rancher.cn/rke2/releases/download/v1.24.9-rke2r1/sha256sum-amd64.txt
#[INFO]downloadingtarballathttps://rancher-mirror.rancher.cn/rke2/releases/download/v1.24.9-rke2r1/rke2.linux-amd64.tar.gz
#[INFO]verifyingtarball
#[INFO]unpackingtarballfileto/usr/local
#啟動rke2服務,并等待服務啟動成功
systemctlstartrke2-server
#配置rke2相關的PATH路徑以及kube-config路徑
exportKUBECONFIG=/etc/rancher/rke2/rke2.yaml
exportPATH=/var/lib/rancher/rke2/bin:$PATH
#使用kubectl查詢當前集群狀態
kubectlgetpo-A|greprke2-metrics-server-5b987d776b-gqxv9
#kube-systemrke2-metrics-server-5b987d776b-gqxv91/1Running015m
至此,rke2 單節點服務啟動完成,但我們的目標是 containerd,接下來繼續操作:
#配置containerd相關環境變量
exportCRI_CONFIG_FILE=/var/lib/rancher/rke2/agent/etc/containerd/config.tomlCONTAINER_RUNTIME_ENDPOINT=unix:///var/run/k3s/containerd/containerd.sock
#使用crictl查詢pods以及container信息
crictlpods|greprke2-metrics-server
#bfad44591742318minutesagoReadyrke2-metrics-server-5b987d776b-gqxv9kube-system0(default)
crictlps|greprke2-metrics-server
#db5d6392a310ef6dc23a68f5fb18minutesagoRunningmetrics-server0bfad445917423rke2-metrics-server-5b987d776b-gqxv9
我們以 metrics-server 的 pod 為例,查詢 pod 詳情中的網絡部分內容,并對 containerd 進行重啟,對問題進行重現:
#查詢metrics-serverpod的詳情
crictlinspectpbfad445917423|jq.status.network
#{
#"additionalIps":[],
#"ip":"10.42.0.6"
#}
#停止rke2-server服務并單獨啟動containerd,避免kubelet影響重現結果
systemctlstoprke2-server
#單獨啟動containerd
containerd-c/var/lib/rancher/rke2/agent/etc/containerd/config.toml-a/run/k3s/containerd/containerd.sock--state/run/k3s/containerd--root/var/lib/rancher/rke2/agent/containerd
通過新的 terminal,使用 crictl 查詢 containerd 運行狀態
crictlpods|greprke2-metrics-server
#bfad44591742324minutesagoReadyrke2-metrics-server-5b987d776b-gqxv9kube-system0(default)
#再次查詢metrics-serverpod詳情
crictlinspectpbfad445917423|jq.status.network
#{
#"additionalIps":[],
#"ip":""
#}
從最后的返回結果可以看出,containerd 重啟后容器的 IP 丟失。
——問題影響——
通過在上述例子中重啟 rke2-server 可以看到,由于 ip 信息丟失,導致了業務容器被重建,帶來了業務中斷的風險。
#在中斷containerd進程后,重啟rke2-server進程(以下數據為重新驗證后的數據)
systemctlrestartrke2-server
kubectlgetpo-A|greprke2-metrics-server-5b987d776b-8vg69
#kube-systemrke2-metrics-server-5b987d776b-8vg691/1Running2(115sago)23m
crictlpods|greprke2-metrics-server
#caba6d8d1582341secondsagoReadyrke2-metrics-server-5b987d776b-8vg69kube-system1(default)
#2dec6a11fd36f22minutesagoNotReadyrke2-metrics-server-5b987d776b-8vg69kube-system0(default)
可以看到,在 rke2-server 重啟后,使用了 cni 的 pod 發生了重啟,在 crictl pods 返回中可以看到重新創建的 pods。
——問題修復驗證——
下載新版本 containerd,這次驗證使用 k3s-containerd v1.6.14+k3s1。該版本為 Rancher 在 containerd v1.6.15 發布前緊急發布的修復補丁版本。
#拉取新鏡像
dockerpullrancher/hardened-containerd:v1.6.14-k3s1-build20230105
mkdircontainer-new
cdcontainer-new
#從鏡像中獲取新版本containerd
dockerrun--rm-it-v${PWD}:/outputrancher/hardened-containerd:v1.6.14-k3s1-build20230105cp-r/usr/local/bin/output
./output/bin/containerd--version
#containerdgithub.com/k3s-io/containerdv1.6.14-k3s16f9c63d571f5026e85a0768f0f2ef03d1c8dbc6e
#關閉當前運行的容器
pkill-f/var/lib/rancher/rke2/data/v1.24.9-rke2r1-d4d8faf800d0/bin/containerd-shim-runc-v2
#替換containerdbinary版本
cp./bin/*/var/lib/rancher/rke2/bin
/var/lib/rancher/rke2/bin/containerd--version
#containerdgithub.com/k3s-io/containerdv1.6.14-k3s16f9c63d571f5026e85a0768f0f2ef03d1c8dbc6e
#啟動rke2
systemctlstartrke2-server
#此時使用crictl查詢新的metrics-serverpod
crictlpods|grep"Ready"|grepmetrics-server
#ad8b101f819df3minutesagoReadyrke2-metrics-server-5b987d776b-gqxv9kube-system1(default)
#停止rke2并使用命令行啟動containerd
systemctlstoprke2-server
containerd-c/var/lib/rancher/rke2/agent/etc/containerd/config.toml-a/run/k3s/containerd/containerd.sock--state/run/k3s/containerd--root/var/lib/rancher/rke2/agent/containerd
通過新的 terminal,使用 crictl 查詢 containerd 運行狀態
crictlinspectpad8b101f819df|jq.status.network
#{
#"additionalIps":[],
#"ip":"10.42.0.13"
#}
可以看到 containerd 重啟后,pod ip 沒有丟失。
—— RKE2 與 RFO——
RKE2 以下版本受該 issue 影響:
-
v1.23.15+rke2r1
-
v1.24.9+rke2r1
-
v1.25.5+rke2r1
-
v1.26.0+rke2r1
該 issue 在 2022 年 12 月 20 日被提交,RKE2 團隊在 2023 年 1 月 6 日緊急合并了 containerd 中修復該 issue 的 commit,發布了 k3s-containerd v1.6.14+k3s1 版本,并發布了新的 rke2 rc 版本進行測試驗證。
最終在 1 月 11 日,RKE2 團隊發布以下已經修復 containerd 問題的版本:
-
v1.23.16+rke2r1
-
v1.24.9+rke2r2
-
v1.25.5+rke2r2
-
v1.26.0+rke2r2
RFO 是 Rancher For openEuler 的縮寫,顧名思義,目的在于面向 openEuler 打造 Rancher 基礎平臺。
由于 RFO 版本發布周期在 RKE2 之后,RFO 并沒有受到該 issue 影響,并在近期發布了以下版本:
-
v1.23.16+rfor1
-
v1.24.9+rfor1
-
v1.24.10+rfor1
-
v1.25.5+rfor1
-
v1.25.6+rfor1
-
v1.26.0+rfor1
-
v1.26.1+rfor1
—— 寫在最后 ——
由于操作系統的軟件包發布存在一定的時間延后性,在大部分情況下都無法及時修復軟件出現的問題。像 CVE、功能缺陷等問題都比較緊急,等待操作系統供應商提供修復版本將是一個漫長的過程,甚至有時候由于一些限制,操作系統提供商無法提供新版本的軟件包,這會給系統運行帶來不確定因素。
在這種情況下,將軟件自身依賴的組件打包到自己的 rootfs 中進行分發,能更好地對其進行管理和升級,避免給系統運行帶來風險以及潛在的損失。
審核編輯 :李倩
-
操作系統
+關注
關注
37文章
6896瀏覽量
123759 -
容器
+關注
關注
0文章
499瀏覽量
22125 -
BUG
+關注
關注
0文章
155瀏覽量
15725
原文標題:Containerd 的 Bug 導致容器被重建!如何避免?
文章出處:【微信號:openEulercommunity,微信公眾號:openEuler】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
如何避免電容器充電會時導致的涌入電流
![如何<b class='flag-5'>避免</b>電<b class='flag-5'>容器</b>充電會時<b class='flag-5'>導致</b>的涌入電流](https://file.elecfans.com/web1/M00/51/D0/o4YBAFsPUcaAevPOAABKrzQkgKE747.png)
Containerd常見命令操作
電容器被擊穿的multism模型如何設計
8 分鐘入門 K8s | 詳解容器基本概念
蘋果IOS10.3.1正式版緊急發布,修復BUG
IOS 10.3.1正式版緊急發布,修復BUG
![IOS 10.3.1正式版緊急發布,修復<b class='flag-5'>BUG</b>](https://file1.elecfans.com//web2/M00/A6/B5/wKgZomUMP9WAcT5NAAAl1IdHQKA701.png)
評論