將節點上的容器執行時從 Docker Engine 更改為 containerd

本任務概述了將容器執行時從 Docker 更新為 containerd 所需的步驟。它適用於執行 Kubernetes 1.23 或更早版本的叢集操作員。本任務還包括一個從 dockershim 遷移到 containerd 的示例場景。其他容器執行時可以在此頁面選擇。

準備工作

安裝 containerd。有關更多資訊,請參閱containerd 的安裝文件,並按照containerd 指南瞭解具體的先決條件。

排空節點

kubectl drain <node-to-drain> --ignore-daemonsets

<node-to-drain> 替換為您要排空的節點的名稱。

停止 Docker 守護程序

systemctl stop kubelet
systemctl disable docker.service --now

安裝 Containerd

按照指南中的詳細步驟安裝 containerd。

  1. 從官方 Docker 倉庫安裝 containerd.io 包。有關為您的 Linux 發行版設定 Docker 倉庫並安裝 containerd.io 包的說明,請參見containerd 入門

  2. 配置 containerd

    sudo mkdir -p /etc/containerd
    containerd config default | sudo tee /etc/containerd/config.toml
    
  3. 重啟 containerd

    sudo systemctl restart containerd
    

啟動 Powershell 會話,將 $Version 設定為所需版本(例如:$Version="1.4.3"),然後執行以下命令

  1. 下載 containerd

    curl.exe -L https://github.com/containerd/containerd/releases/download/v$Version/containerd-$Version-windows-amd64.tar.gz -o containerd-windows-amd64.tar.gz
    tar.exe xvf .\containerd-windows-amd64.tar.gz
    
  2. 解壓並配置

    Copy-Item -Path ".\bin\" -Destination "$Env:ProgramFiles\containerd" -Recurse -Force
    cd $Env:ProgramFiles\containerd\
    .\containerd.exe config default | Out-File config.toml -Encoding ascii
    
    # Review the configuration. Depending on setup you may want to adjust:
    # - the sandbox_image (Kubernetes pause image)
    # - cni bin_dir and conf_dir locations
    Get-Content config.toml
    
    # (Optional - but highly recommended) Exclude containerd from Windows Defender Scans
    Add-MpPreference -ExclusionProcess "$Env:ProgramFiles\containerd\containerd.exe"
    
  3. 啟動 containerd

    .\containerd.exe --register-service
    Start-Service containerd
    

將 kubelet 配置為使用 containerd 作為其容器執行時

編輯檔案 /var/lib/kubelet/kubeadm-flags.env 並將 containerd 執行時新增到標誌中;--container-runtime-endpoint=unix:///run/containerd/containerd.sock

使用 kubeadm 的使用者應注意,kubeadm 工具將主機的 CRI 套接字儲存在每個節點上的

/var/lib/kubelet/instance-config.yaml 檔案中。您可以在節點上建立此 /var/lib/kubelet/instance-config.yaml 檔案。

/var/lib/kubelet/instance-config.yaml 檔案允許設定 containerRuntimeEndpoint 引數。

您可以將此引數的值設定為所選 CRI 套接字的路徑(例如 unix:///run/containerd/containerd.sock)。

重啟 kubelet

systemctl start kubelet

驗證節點是否健康

執行 kubectl get nodes -o wide,將 containerd 顯示為我們剛剛更改的節點的執行時。

移除 Docker Engine

如果節點顯示健康,則移除 Docker。

sudo yum remove docker-ce docker-ce-cli

sudo apt-get purge docker-ce docker-ce-cli

sudo dnf remove docker-ce docker-ce-cli

sudo apt-get purge docker-ce docker-ce-cli

前面的命令不會刪除您主機上的映象、容器、卷或自定義配置檔案。要刪除它們,請按照 Docker 的說明解除安裝 Docker Engine

恢復排程節點

kubectl uncordon <node-to-uncordon>

<node-to-uncordon> 替換為您之前已排空的節點的名稱。

此頁面上的專案涉及提供 Kubernetes 所需功能的第三方產品或專案。Kubernetes 專案作者對這些第三方產品或專案不負責。有關詳細資訊,請參閱 CNCF 網站指南

在提議新增額外第三方連結的更改之前,你應該閱讀內容指南

最後修改時間:2025 年 7 月 4 日太平洋標準時間晚上 11:28:新增 NodeLocalCRISocket 升級到 Beta 版的文件 (0135b1b08b)