如何在Kubernetes集群中检测CNI的类型与版本
Kubernetes集群查询当前使用CNI插件类型及版本的实操方法
不存在适配所有集群环境的单条万能kubectl命令,但可以通过以下几类运维常用的操作快速定位信息,不需要登录节点也能完成查询:
- 方法1:查kube-system命名空间下的工作负载
绝大多数自建CNI插件都会以DaemonSet形式部署在kube-system命名空间,直接执行命令列出该命名空间下所有Pod:kubectl get pods -n kube-system
输出结果里如果出现带calico、flannel、cilium、canal、kube-ovn、terway这类关键词的Pod,前缀对应的就是当前使用的CNI类型。
要查具体版本的话,直接看对应Pod的镜像标签即可,比如执行kubectl describe pod <cni对应Pod名称> -n kube-system | grep Image:,镜像名冒号后面的tag就是插件版本。如果是Cilium这类自带CLI的插件,还可以直接执行kubectl exec -n kube-system <cilium-agent Pod名> -- cilium version拿到精确版本信息。 - 方法2:查CNI生效配置
Kubernetes节点默认会把生效的CNI配置存放在/etc/cni/net.d/目录下,该目录下文件名排序最靠前的.conf/.conflist文件就是当前加载的CNI配置。不想登录节点的话,可以先找集群中挂载了这个主机目录的Pod,进入Pod内部读取配置文件即可。
另外部分集群会把CNI配置存为kube-system下的ConfigMap,可以执行kubectl get configmap -n kube-system | grep -i cni搜索相关配置资源,找到后直接查看内容即可。 - 方法3:kubeadm部署集群的快速查询
如果集群是通过kubeadm初始化部署的,可以直接查询kubeadm的集群配置ConfigMap:kubectl get configmap kubeadm-config -n kube-system -o yaml
查看配置中networking字段的相关信息可以辅助判断CNI类型,比如默认Flannel的Pod网段是10.244.0.0/16,Calico默认网段是192.168.0.0/16,不过网段支持自定义,建议和前面查到的Pod信息交叉验证避免误判。
注意:如果是云厂商托管的Kubernetes集群,部分云厂商的托管CNI组件不会暴露在kube-system的Pod列表中,这种情况可以通过查询节点kubelet参数辅助判断,执行
kubectl get nodes -o yaml | grep network-plugin即可看到kubelet配置的网络插件类型,版本信息可以对应云厂商集群版本的默认组件配置匹配。
内容的提问来源于stack exchange,提问作者YoMar
相关产品推荐
相关产品推荐

