Kubernetes CNI插件相關(guān)錯誤故障排除

2022-06-02 09:34 更新

CNI 插件相關(guān)錯誤故障排除

為避免與 CNI 插件相關(guān)的錯誤,請確認(rèn)您正在使用或升級到經(jīng)過測試可與您的 Kubernetes 版本一起正常工作的容器運(yùn)行時。

例如,以下容器運(yùn)行時正在或已經(jīng)為 Kubernetes v1.24 準(zhǔn)備好:

  • containerd v1.6.4 及更高版本,v1.5.11 及更高版本
  • CRI-O v1.24.0 及更高版本

關(guān)于“CNI 版本不兼容”和“無法為沙盒銷毀網(wǎng)絡(luò)”錯誤

當(dāng) CNI 插件尚未升級和/或 CNI 配置版本未在 CNI 配置文件中聲明時,在 containerd v1.6.0-v1.6.3 中存在 pod CNI 網(wǎng)絡(luò)設(shè)置和拆除的服務(wù)問題。 containerd 團(tuán)隊報告說,“這些問題在 containerd v1.6.4 中得到解決。”

使用 containerd v1.6.0-v1.6.3,如果您不升級 CNI 插件和/或聲明 CNI 配置版本,您可能會遇到以下“不兼容的 CNI 版本”或“無法為沙盒銷毀網(wǎng)絡(luò)”的錯誤情況。

CNI 版本不兼容錯誤

如果您的 CNI 插件版本與配置中的插件版本不正確匹配,因為配置版本晚于插件版本,則容器日志可能會在 pod 啟動時顯示類似于以下內(nèi)容的錯誤消息:

incompatible CNI versions; config is \"1.0.0\", plugin supports [\"0.1.0\" \"0.2.0\" \"0.3.0\" \"0.3.1\" \"0.4.0\"]"

沙盒錯誤導(dǎo)致網(wǎng)絡(luò)破壞失敗

如果 CNI 插件配置中缺少插件的版本,則 pod 可能會運(yùn)行。 但是,停止 pod 會產(chǎn)生類似于以下內(nèi)容的錯誤:

ERRO[2022-04-26T00:43:24.518165483Z] StopPodSandbox for "b" failed
error="failed to destroy network for sandbox \"bbc85f891eaf060c5a879e27bba9b6b06450210161dfdecfbb2732959fb6500a\": invalid version \"\": the version is empty"

此錯誤使 pod 處于未就緒狀態(tài),但仍附加網(wǎng)絡(luò)命名空間。 要從此問題中恢復(fù),請編輯 CNI 配置文件以添加缺少的版本信息。 下一次停止 pod 的嘗試應(yīng)該會成功。

更新 CNI 插件和 CNI 配置文件

如果您使用 containerd v1.6.0-v1.6.3 并遇到“不兼容的 CNI 版本”或“無法為沙盒銷毀網(wǎng)絡(luò)”錯誤,請考慮更新您的 CNI 插件并編輯 CNI 配置文件。

以下是每個節(jié)點的典型步驟的概述:

  1. 安全地排空并封鎖節(jié)點。
  2. 停止容器運(yùn)行時和 kubelet 服務(wù)后,執(zhí)行以下升級操作:
    • 如果您正在運(yùn)行 CNI 插件,請將它們升級到最新版本。
    • 如果您使用的是非 CNI 插件,請將它們替換為 CNI 插件。 使用最新版本的插件。
    • 更新插件配置文件以指定或匹配插件支持的 CNI 規(guī)范版本,如以下“容器配置文件示例”部分所示。
    • 對于 ?containerd?,請確保您已安裝 CNI 環(huán)回插件的最新版本(v1.0.0 或更高版本)。
    • 將節(jié)點組件(例如 kubelet)升級到 Kubernetes v1.24
    • 升級到或安裝最新版本的容器運(yùn)行時。
  3. 通過重新啟動容器運(yùn)行時和 kubelet 將節(jié)點帶回集群。 取消封鎖節(jié)點(?kubectl uncordon <nodename>?)。

一個示例容器配置文件

以下示例顯示了 ?containerd ?運(yùn)行時 v1.6.x 的配置,它支持最新版本的 CNI 規(guī)范 (v1.0.0)。

有關(guān)配置系統(tǒng)的更多說明,請參閱您的插件和網(wǎng)絡(luò)提供商的文檔。

在 Kubernetes 上,containerd 運(yùn)行時將環(huán)回接口 ?lo ?作為默認(rèn)行為添加到 pod。 containerd 運(yùn)行時通過 CNI 插件 ?loopback ?配置環(huán)回接口。 ?loopback ?插件作為具有 cni 名稱的 ?containerd ?發(fā)布包的一部分分發(fā)。 ?containerd ?v1.6.0 及更高版本包括與 CNI v1.0.0 兼容的環(huán)回插件以及其他默認(rèn) ?CNI ?插件。 loopback 插件的配置由 containerd 內(nèi)部完成,并設(shè)置為使用 CNI v1.0.0。這也意味著當(dāng)這個更新版本的 ?containerd ?啟動時,?loopback ?插件的版本必須是 v1.0.0 或更高版本。

以下 bash 命令生成示例 CNI 配置。在這里,配置版本的 1.0.0 值分配給 ?cniVersion ?字段,以供 ?containerd ?調(diào)用 CNI 橋接插件時使用。

cat << EOF | tee /etc/cni/net.d/10-containerd-net.conflist
{
 "cniVersion": "1.0.0",
 "name": "containerd-net",
 "plugins": [
   {
     "type": "bridge",
     "bridge": "cni0",
     "isGateway": true,
     "ipMasq": true,
     "promiscMode": true,
     "ipam": {
       "type": "host-local",
       "ranges": [
         [{
           "subnet": "10.88.0.0/16"
         }],
         [{
           "subnet": "2001:db8:4860::/64"
         }]
       ],
       "routes": [
         { "dst": "0.0.0.0/0" },
         { "dst": "::/0" }
       ]
     }
   },
   {
     "type": "portmap",
     "capabilities": {"portMappings": true}
   }
 ]
}
EOF

使用基于您的用例和網(wǎng)絡(luò)尋址計劃的 IP 地址范圍更新前面示例中的 IP 地址范圍。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號