Kubernetes 將節(jié)點上的容器運行時從Docker Engine改為containerd

2022-06-02 09:17 更新

騰空節(jié)點

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

將 ?<node-to-drain>? 替換為你所要騰空的節(jié)點的名稱

停止 Docker 守護進程 

systemctl stop kubelet
systemctl disable docker.service --now

安裝 Containerd 

  • Linux
    1. 從官方的 Docker 倉庫安裝 ?containerd.io? 包。關于為你所使用的 Linux 發(fā)行版來設置 Docker 倉庫,以及安裝 ?containerd.io? 包的詳細說明,可參見 開始使用 containerd。
    2. 配置 containerd:
    3. sudo mkdir -p /etc/containerd
      containerd config default | sudo tee /etc/containerd/config.toml
    4. 重啟 containerd:
    5. sudo systemctl restart containerd
  • Windows(PowerShell)
  • 啟動一個 Powershell 會話,將 ?$Version? 設置為期望的版本(例如:?$Version="1.4.3"?), 之后運行下面的命令:

    1. 下載 containerd:
    2. 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
    3. 解壓縮并執(zhí)行配置:
    4. Copy-Item -Path ".\bin\" -Destination "$Env:ProgramFiles\containerd" -Recurse -Force
      cd $Env:ProgramFiles\containerd\
      .\containerd.exe config default | Out-File config.toml -Encoding ascii
      
      # 請審查配置信息。取決于你的安裝環(huán)境,你可能需要調整:
      # - the sandbox_image (Kubernetes pause 鏡像)
      # - cni bin_dir 和 conf_dir 的位置
      Get-Content config.toml
      
      # (可選步驟,但強烈建議執(zhí)行)將 containerd 排除在 Windows Defender 掃描之外
      Add-MpPreference -ExclusionProcess "$Env:ProgramFiles\containerd\containerd.exe"
    5. 啟動 containerd:
    6. .\containerd.exe --register-service
      Start-Service containerd

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

編輯文件 ?/var/lib/kubelet/kubeadm-flags.env?,將 containerd 運行時添加到標志中: ?--container-runtime=remote? 和 ?--container-runtime-endpoint=unix:///run/containerd/containerd.sock"?。

對于使用 kubeadm 的用戶,可以考慮下面的問題:

?kubeadm ?工具將每個主機的 CRI 套接字保存在該主機對應的 Node 對象的注解中。 使用 ?kubeadm ?的用戶應該知道,?kubeadm ?工具將每個主機的 CRI 套接字保存在該主機對應的 Node 對象的注解中。 要更改這一注解信息,你可以在一臺包含 kubeadm ?/etc/kubernetes/admin.conf? 文件的機器上執(zhí)行以下命令:

kubectl edit no <node-name>

這一命令會打開一個文本編輯器,供你在其中編輯 Node 對象。 要選擇不同的文本編輯器,你可以設置 ?KUBE_EDITOR ?環(huán)境變量。

  • 更改 ?kubeadm.alpha.kubernetes.io/cri-socket? 值,將其從 ?/var/run/dockershim.sock? 改為你所選擇的 CRI 套接字路徑 (例如:?unix:///run/containerd/containerd.sock?)。
  • 注意新的 CRI 套接字路徑必須帶有 ?unix://? 前綴。

  • 保存文本編輯器中所作的修改,這會更新 Node 對象。

重啟 kubelet 

systemctl start kubelet

驗證節(jié)點處于健康狀態(tài) 

運行 ?kubectl get nodes -o wide?,containerd 會顯示為我們所更改的節(jié)點上的運行時。

最后,在一切順利時刪除 Docker。

  • CentOS
  • sudo yum remove docker-ce docker-ce-cli
    
  • Debian
  • sudo apt-get purge docker-ce docker-ce-cli
    
  • Fedora
  • sudo dnf remove docker-ce docker-ce-cli
    
  • Ubuntu
  • sudo apt-get purge docker-ce docker-ce-cli
    


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號