查找节点上使用的容器运行时
本页面介绍查找集群中节点使用的容器运行时的步骤。
根据你运行集群的方式,节点的容器运行时可能已经预先配置好,或者你需要进行配置。如果你使用的是托管的 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
在容器运行时页面上查找有关容器运行时的更多信息。
查找你使用的容器运行时端点
容器运行时通过 Unix 套接字使用基于 gRPC 框架的 CRI 协议与 kubelet 通信。kubelet 充当客户端,运行时充当服务器。在某些情况下,你可能会发现了解你的节点使用哪个套接字很有用。例如,随着 Kubernetes v1.24 及更高版本中 dockershim 的移除,你可能想知道你是否使用了带 dockershim 的 Docker Engine。
注意
如果你当前在节点上使用带cri-dockerd
的 Docker Engine,则不受 dockershim 移除的影响。你可以通过检查节点上的 kubelet 配置来查看你使用哪个套接字。
读取 kubelet 进程的启动命令
tr \\0 ' ' < /proc/"$(pgrep kubelet)"/cmdline
如果你没有
tr
或pgrep
,请手动检查 kubelet 进程的命令行。在输出中,查找
--container-runtime
标志和--container-runtime-endpoint
标志。- 如果你的节点使用 Kubernetes v1.23 及更早版本,并且这些标志不存在,或者
--container-runtime
标志不是remote
,则你使用带 Docker Engine 的 dockershim 套接字。--container-runtime
命令行参数在 Kubernetes v1.27 及更高版本中不可用。 - 如果
--container-runtime-endpoint
标志存在,请检查套接字名称以查找你使用的运行时。例如,unix:///run/containerd/containerd.sock
是 containerd 端点。
- 如果你的节点使用 Kubernetes v1.23 及更早版本,并且这些标志不存在,或者
如果你想将节点上的容器运行时从 Docker Engine 更改为 containerd,你可以在从 Docker Engine 迁移到 containerd 中找到更多信息,或者,如果你想在 Kubernetes v1.24 及更高版本中继续使用 Docker Engine,请迁移到 CRI 兼容的适配器,如 cri-dockerd
。