如何检测 Kubernetes 集群中的 CNI 类型/版本?

问题描述 投票:0回答:2

集群中是否有 Kubectl 命令或配置映射可以帮助我找到正在使用的 CNI?

kubernetes devops kubectl microk8s cni
2个回答
2
投票

首先检查

/etc/cni/net.d
中是否存在一个配置文件是一个好的开始:

$ ls /etc/cni/net.d
10-flannel.conflist

ip a s
ifconfig
有助于检查网络接口是否存在。例如
flannel
CNI 应设置
flannel.1
界面:

$ ip a s flannel.1
3: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default 
    link/ether de:cb:d1:d6:e3:e7 brd ff:ff:ff:ff:ff:ff
    inet 10.244.1.0/32 scope global flannel.1
       valid_lft forever preferred_lft forever
    inet6 fe80::dccb:d1ff:fed6:e3e7/64 scope link 
       valid_lft forever preferred_lft forever

创建集群时,CNI 安装通常使用以下方式安装:

kubectl apply -f <add-on.yaml>

因此网络 Pod 将被称为

kube-flannel*
kube-calico*
等,具体取决于您的 网络配置

然后

crictl
将帮助您检查正在运行的 Pod 和容器。

crictl pods ls

在健康集群中的控制器节点上,您应该让所有 Pod 处于

Ready
状态。

crictl pods ls
POD ID              CREATED             STATE               NAME                                          NAMESPACE           ATTEMPT             RUNTIME
dc90dd87e18cf       3 minutes ago       Ready               coredns-6d4b75cb6d-r2j9s                      kube-system         0                   (default)
d1ab9d0aa815a       3 minutes ago       Ready               kubernetes-dashboard-cd4778d69-xmtkz          kube-system         0                   (default)
0c151fdd92e71       3 minutes ago       Ready               coredns-6d4b75cb6d-bn8hr                      kube-system         0                   (default)
40f18ce56f776       4 minutes ago       Ready               kube-flannel-ds-d4fd7                         kube-flannel        0                   (default)
0e390a68380a5       4 minutes ago       Ready               kube-proxy-r6cq2                              kube-system         0                   (default)
cd93e58d3bf70       4 minutes ago       Ready               kube-scheduler-c01            kube-system         0                   (default)
266a33aa5c241       4 minutes ago       Ready               kube-apiserver-c01            kube-system         0                   (default)
0910a7a73f5aa       4 minutes ago       Ready               kube-controller-manager-c01   kube-system         0                   (default)

如果您的集群配置正确,您应该能够使用

kubectl
:

列出容器
kubectl get pods -n kube-system

如果

kubectl
不起作用(
kube-apiserver
未运行),您可以退回到
crictl

在不健康的集群上

kubectl
将显示处于
CrashLoopBackOff
状态的 pod。
crictl pods ls
命令将为您提供类似的图片,仅显示来自单个节点的 Pod。另请检查常见 CNI 错误的文档

$ kubectl get pods -n kube-system
NAME                                          READY   STATUS              RESTARTS         AGE
coredns-6d4b75cb6d-brb9d                      0/1     ContainerCreating   0                25m
coredns-6d4b75cb6d-pcrcp                      0/1     ContainerCreating   0                25m
kube-apiserver-cm01            1/1     Running             27 (18m ago)     26m
kube-apiserver-cm02            0/1     Running             31 (8m11s ago)   23m
kube-apiserver-cm03            0/1     CrashLoopBackOff    33 (2m22s ago)   26m
kube-controller-manager-cm01   0/1     CrashLoopBackOff    13 (50s ago)     24m
kube-controller-manager-cm02   0/1     CrashLoopBackOff    7 (15s ago)      24m
kube-controller-manager-cm03   0/1     CrashLoopBackOff    15 (3m45s ago)   26m
kube-proxy-2dvfg                              0/1     CrashLoopBackOff    8 (97s ago)      25m
kube-proxy-7gnnr                              0/1     CrashLoopBackOff    8 (39s ago)      25m
kube-proxy-cqmvz                              0/1     CrashLoopBackOff    8 (19s ago)      25m
kube-scheduler-cm01            1/1     Running             28 (7m15s ago)   12m
kube-scheduler-cm02            0/1     CrashLoopBackOff    28 (4m45s ago)   18m
kube-scheduler-cm03            1/1     Running             36 (107s ago)    26m
kubernetes-dashboard-cd4778d69-g8jmf          0/1     ContainerCreating   0                2m27s

crictl ps
会给你容器(如
docker ps
),注意大量的尝试:

CONTAINER           IMAGE               CREATED             STATE               NAME                      ATTEMPT             POD ID              POD
d54c6f1e45dea       2ae1ba6417cbc       2 seconds ago       Running             kube-proxy                1                   347fef3ae1e98       kube-proxy-7gnnr
d6048ef9e30c7       d521dd763e2e3       41 seconds ago      Running             kube-apiserver            27                  640658b58d1ae       kube-apiserver-cm03
b6b8c7a24914e       3a5aa3a515f5d       41 seconds ago      Running             kube-scheduler            28                  c7b710a0acf30       kube-scheduler-cm03
b0a480d2c1baf       586c112956dfc       42 seconds ago      Running             kube-controller-manager   8                   69504853ab81b       kube-controller-manager-cm03

并使用

检查日志
crictl logs d54c6f1e45dea

最后并非最不重要的

/opt/cni/bin/
路径通常包含网络所需的二进制文件。另一个
PATH
可能会在附加设置或 CNI 配置中定义。

$ ls /opt/cni/bin/
bandwidth  bridge  dhcp  firewall  flannel  host-device  host-local  ipvlan  loopback  macvlan  portmap  ptp  sbr  static  tuning  vlan

最后

crictl
读取
/etc/crictl.yaml
配置,您应该设置正确的运行时和图像端点以匹配您容器运行时

runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 10

0
投票

添加@Tombart 的回复: 如果目录中有多个 CNI 配置文件,kubelet 将使用按字典顺序排列在前面的配置文件。

© www.soinside.com 2019 - 2024. All rights reserved.