Kubernetes 查明節(jié)點(diǎn)上所使用的容器運(yùn)行時

2022-06-02 09:41 更新

查明節(jié)點(diǎn)上所使用的容器運(yùn)行時

取決于你運(yùn)行集群的方式,節(jié)點(diǎn)所使用的容器運(yùn)行時可能是事先配置好的, 也可能需要你來配置。如果你在使用托管的 Kubernetes 服務(wù), 可能存在特定于廠商的方法來檢查節(jié)點(diǎn)上配置的容器運(yùn)行時。 本頁描述的方法應(yīng)該在能夠執(zhí)行 ?kubectl ?的場合下都可以工作。

在開始之前

安裝并配置 ?kubectl?。參見安裝工具 節(jié)了解詳情。

查明節(jié)點(diǎn)所使用的容器運(yùn)行時

使用 ?kubectl ?來讀取并顯示節(jié)點(diǎn)信息:

kubectl get nodes -o wide

輸出如下面所示。?CONTAINER-RUNTIME? 列給出容器運(yùn)行時及其版本。

對于 Docker Engine,輸出類似于:

NAME         STATUS   VERSION    CONTAINER-RUNTIME
node-1       Ready    v1.16.15   docker://19.3.1
node-2       Ready    v1.16.15   docker://19.3.1
node-3       Ready    v1.16.15   docker://19.3.1

如果你的容器運(yùn)行時顯示為 Docker Engine,你仍然可能不會被 1.24 中 dockershim 的移除所影響。 通過檢查運(yùn)行時端點(diǎn),可以查看你是否在使用 dockershim。 如果你沒有使用 dockershim,你就不會被影響。 看下是否是使用的 dockershim,如何是 dockershim 則會受到在 Kubernetes 1.24 中移除 dockershim 的影響。 反之則不會受到影響。

對于 containerd,輸出類似于這樣:

# For containerd
NAME         STATUS   VERSION   CONTAINER-RUNTIME
node-1       Ready    v1.19.6   containerd://1.4.1
node-2       Ready    v1.19.6   containerd://1.4.1
node-3       Ready    v1.19.6   containerd://1.4.1

檢查當(dāng)前使用的運(yùn)行時端點(diǎn) 

容器運(yùn)行時使用 Unix Socket 與 kubelet 通信,這一通信使用基于 gRPC 框架的 CRI 協(xié)議。kubelet 扮演客戶端,運(yùn)行時扮演服務(wù)器端。 在某些情況下,你可能想知道你的節(jié)點(diǎn)使用的是哪個 socket。 如若集群是 Kubernetes 1.24 及以后的版本, 或許你想知道當(dāng)前運(yùn)行時是否是使用 dockershim 的 Docker Engine。

Note: 如果你的節(jié)點(diǎn)在通過 ?cri-dockerd? 使用 Docker Engine, 那么集群不會受到 Kubernetes 移除 dockershim 的影響。

可以通過檢查 kubelet 的參數(shù)得知當(dāng)前使用的是哪個 socket。

  1. 查看 kubelet 進(jìn)程的啟動命令
  2.  tr \\0 ' ' < /proc/"$(pgrep kubelet)"/cmdline
    

    如有節(jié)點(diǎn)上沒有 ?tr ?或者 ?pgrep?,就需要手動檢查 kubelet 的啟動命令

  3. 在命令的輸出中,查找 ?--container-runtime? 和 ?--container-runtime-endpoint? 標(biāo)志。
    • 如果 Kubernetes 集群版本是 v1.23 或者更早的版本,并且這兩個參數(shù)不存在, 或者 ?container-runtime? 標(biāo)志值不是 ?remote?,則你在通過 dockershim 套接字使用 Docker Engine。 或者如果集群使用的 Docker engine 和 dockershim socket,則輸出結(jié)果中 ?--container-runtime? 不是 ?remote?,
    • 如果設(shè)置了 ?--container-runtime-endpoint? 參數(shù),查看套接字名稱即可得知當(dāng)前使用的運(yùn)行時。 如若套接字 ?unix:///run/containerd/containerd.sock? 是 containerd 的端點(diǎn)。

如果你通過 dockershim 來使用 Docker Engine,可在 遷移到不同的運(yùn)行時 找到更多信息?;蛘?,如果你想在 Kubernetes v1.24 及以后的版本仍使用 Docker Engine, 可以安裝 CRI 兼容的適配器實(shí)現(xiàn),如 ?cri-dockerd?。


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號