Kubernetes教程

Kubernetes容器运行时查询

在运行 Kubernetes 集群时,节点所使用的容器运行时可能是预先配置好的,也可能需要手动进行配置。如果使用的是托管的 Kubernetes 服务,可能还需要使用特定于厂商的方法来检查节点上配置的容器运行时。无论使用何种方式运行 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,仍然可能不会被 v1.24 中 dockershim 的移除所影响。 通过检查运行时端点,可以查看是否在使用 dockershim。 如果没有使用 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

三、检查当前的运行时端点

容器运行时使用 Unix Socket 与 kubelet 通信,这一通信使用基于 gRPC 框架的 CRI 协议。kubelet 扮演客户端,运行时扮演服务器端。 在某些情况下,可能想知道节点使用的是哪个 socket。 如若集群是 Kubernetes v1.24 及以后的版本, 或许想知道当前运行时是否是使用 dockershim 的 Docker Engine。

注意:如果节点在通过 cri-dockerd 使用 Docker Engine, 那么集群不会受到 Kubernetes 移除 dockershim 的影响。

可以通过检查 kubelet 的参数得知当前使用的是哪个 socket。

1、查看 kubelet 进程的启动命令

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

如有节点上没有 tr 或者 pgrep,就需要手动检查 kubelet 的启动命令

2、在命令的输出中,查找 --container-runtime 和 --container-runtime-endpoint 标志。

如果节点使用 Kubernetes v1.23 或更早的版本,这两个参数不存在, 或者 --container-runtime 标志值不是 remote,则在通过 dockershim 套接字使用 Docker Engine。 在 Kubernetes v1.27 及以后的版本中,--container-runtime 命令行参数不再可用。

如果设置了 --container-runtime-endpoint 参数,查看套接字名称即可得知当前使用的运行时。 如若套接字 unix:///run/containerd/containerd.sock 是 containerd 的端点。

如果想在 Kubernetes v1.24 及以后的版本仍使用 Docker Engine, 可以安装 CRI 兼容的适配器实现,如 cri-dockerd。

广告合作
QQ群号:707632017

温馨提示:

1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com。(#改为@)

2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。

目录