找出节点上使用的容器运行时

本页面概述了查找集群中节点使用的 容器运行时 的步骤。

根据您运行集群的方式,节点的容器运行时可能已预先配置,或者您需要对其进行配置。如果您使用的是托管 Kubernetes 服务,则可能存在特定于供应商的方法来检查为节点配置了哪些容器运行时。只要允许执行 kubectl,本页面中描述的方法就应该有效。

准备工作

安装并配置 kubectl。有关详细信息,请参阅 安装工具 部分。

查找节点上使用的容器运行时

使用 kubectl 获取并显示节点信息

kubectl get nodes -o wide

输出类似于以下内容。CONTAINER-RUNTIME 列输出运行时及其版本。

对于 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

如果您的运行时显示为 Docker Engine,您仍然可能不会受到 Kubernetes v1.24 中移除 dockershim 的影响。检查运行时端点 以查看您是否使用了 dockershim。如果您没有使用 dockershim,则不会受到影响。

对于 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

有关容器运行时的更多信息,请参阅 容器运行时 页面。

查找您使用的容器运行时端点

容器运行时使用基于 gRPC 框架的 CRI 协议 通过 Unix 套接字与 kubelet 通信。kubelet 充当客户端,运行时充当服务器。在某些情况下,您可能会发现了解节点使用哪个套接字很有用。例如,随着 Kubernetes v1.24 及更高版本中 dockershim 的移除,您可能想知道您是否将 Docker Engine 与 dockershim 一起使用。

您可以通过检查节点上的 kubelet 配置来检查您使用哪个套接字。

  1. 读取 kubelet 进程的启动命令

    tr \\0 ' ' < /proc/"$(pgrep kubelet)"/cmdline
    

    如果您没有 trpgrep,请手动检查 kubelet 进程的命令行。

  2. 在输出中,查找 --container-runtime 标志和 --container-runtime-endpoint 标志。

    • 如果您的节点使用的是 Kubernetes v1.23 及更早版本,并且这些标志不存在,或者 --container-runtime 标志不是 remote,则表示您将 dockershim 套接字与 Docker Engine 一起使用。--container-runtime 命令行参数在 Kubernetes v1.27 及更高版本中不可用。
    • 如果存在 --container-runtime-endpoint 标志,请检查套接字名称以找出您使用的运行时。例如,unix:///run/containerd/containerd.sock 是 containerd 端点。

如果您想将节点上的容器运行时从 Docker Engine 更改为 containerd,可以在 从 Docker Engine 迁移到 containerd 中找到更多信息,或者,如果您想在 Kubernetes v1.24 及更高版本中继续使用 Docker Engine,请迁移到 CRI 兼容的适配器,例如 cri-dockerd

上次修改时间:2023 年 6 月 5 日下午 4:22 PST:更新 find-out-runtime-you-use.md (f74c780731)