Kubernetes - Calico-Nodes 0/1 就绪
Kubernetes - Calico-Nodes 0/1 Ready
我们正在 K8s env 上部署 Jenkins,使用 calico 网络插件有 1 个主节点和 4 个工作节点,pods 是在 Jenkins 运行 作业时创建的,但是问题主机名未解析,Jenkins 中没有错误日志,在检查 pods 时,主节点上的 calico pod 已关闭,不确定是否是上述问题的原因。
[root@kmaster-1 ~]# kubectl get pod calico-node-lvvx4 -n kube-system -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
calico-node-lvvx4 0/1 Running 9 9d x0.x1.x5.x6 kmaster-1.b.x.x.com <none> <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning Unhealthy 107s (x34333 over 3d23h) kubelet, kmaster-1.b.x.x.com (combined from similar events): Readiness probe failed: calico/node is not ready: BIRD is not ready: BGP not established with 10.x1.2x.x23,10.x1.x7.x53,10.x1.1x.1x5,10.x1.2x.1x22020-04-12 08:40:48.567 [INFO][27813] health.go 156: Number of node(s) with BGP peering established = 0
10.x1.2x.x23,10.x1.x7.x53,10.x1.1x.1x5,10.x1.2x.1x2是worker的IPpods,他们是netstat 显示 BGP 已建立,但未与主站建立连接。
179端口在master上开放,不知道为什么BGP对等不建立,请指教。
将以下几行添加到 calico yaml 中产生了神奇效果。
指定接口
- name: IP_AUTODETECTION_METHOD
value: "interface=ens."
通过firewall-cmd激活calico使用的网络接口。
最近在使用虚拟机操作节点时,虚拟机的界面被停用,导致同样的现象。
此外,除了 Sanjay M. P.,我还要说我必须关闭防火墙。
systemctl disable --now firewalld
也许你可以以某种方式调整它,但我还没有测试过,所以我不会建议
Sanjay M.P. 分享的内容对我有用,但是我想澄清导致问题的原因,以及为什么该解决方案更详细。
首先,我正在 运行 设置一个 ubuntu 环境,所以 Piknik 共享的东西不起作用,firewalld 只在 centos / rhel 系统上。尽管如此,ufw 在所有节点上都被禁用了。
通过执行 kubectl describe pod calico-node-*****
,我能够缩小我收到的导致此问题的确切错误。我发现 calico BIRD 服务无法连接到对等点。还显示了 calico 节点试图用来与其 BGP 对等方配对的 IP 地址。它使用了错误的接口,因此错误的 ips。
为了自己定义问题,我所有的节点主机虚拟机都有多个接口。如果您没有明确指定要使用的接口,calico 会“自动”选择一个,无论您是否需要该接口。
解决方案是在 calico.yaml 文件中构建 calico 覆盖网络时指定特定接口。 Sanjay M. P. 使用正则表达式,如果您有不同的命名接口,它可能会起作用,但是,由于我是 运行ning Ubuntu 服务器,所有接口都以字符串“ens”开头,因此会发生同样的问题。
我已经删除了大部分 calico.yaml 文件以显示此设置应该在哪里的确切位置(~第 675 行)在那里添加设置,我也留下了 CALICO_IPV4POOL_CIDR因为需要将此设置适当地设置为在 kubeadm 初始化时指定的相同子网范围:
spec:
template:
spec:
containers:
- name: calico-node
image: calico/node:v3.14.2
env:
- name: CALICO_IPV4POOL_CIDR
value: "192.168.0.0/22"
- name: IP_AUTODETECTION_METHOD
value: "interface=ens224"
不幸的是,我没有找到回滚旧配置的方法,所以我只是重建了整个集群,并重新部署了 calico overlay(感谢上帝提供 VM 快照)。
kubeadm 初始化您的集群。
然后 运行 kubectl create -f calico.yaml
添加设置以构建覆盖网络。
确认覆盖网络正常工作
- 运行
watch -n1 kube-system get pods -o wide
,然后添加您的节点。确保在新添加的 kube 节点上构建的所有 calico 节点都显示为“1/1 运行”。
- 下载并安装 calicoctl,然后 运行
calicoctl node status
,确保 BGP 使用正确的网络。
您可以阅读更多关于 IP_AUTODETECTION_METHOD here。
我们正在 K8s env 上部署 Jenkins,使用 calico 网络插件有 1 个主节点和 4 个工作节点,pods 是在 Jenkins 运行 作业时创建的,但是问题主机名未解析,Jenkins 中没有错误日志,在检查 pods 时,主节点上的 calico pod 已关闭,不确定是否是上述问题的原因。
[root@kmaster-1 ~]# kubectl get pod calico-node-lvvx4 -n kube-system -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
calico-node-lvvx4 0/1 Running 9 9d x0.x1.x5.x6 kmaster-1.b.x.x.com <none> <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning Unhealthy 107s (x34333 over 3d23h) kubelet, kmaster-1.b.x.x.com (combined from similar events): Readiness probe failed: calico/node is not ready: BIRD is not ready: BGP not established with 10.x1.2x.x23,10.x1.x7.x53,10.x1.1x.1x5,10.x1.2x.1x22020-04-12 08:40:48.567 [INFO][27813] health.go 156: Number of node(s) with BGP peering established = 0
10.x1.2x.x23,10.x1.x7.x53,10.x1.1x.1x5,10.x1.2x.1x2是worker的IPpods,他们是netstat 显示 BGP 已建立,但未与主站建立连接。 179端口在master上开放,不知道为什么BGP对等不建立,请指教。
将以下几行添加到 calico yaml 中产生了神奇效果。
指定接口
- name: IP_AUTODETECTION_METHOD
value: "interface=ens."
通过firewall-cmd激活calico使用的网络接口。
最近在使用虚拟机操作节点时,虚拟机的界面被停用,导致同样的现象。
此外,除了 Sanjay M. P.,我还要说我必须关闭防火墙。
systemctl disable --now firewalld
也许你可以以某种方式调整它,但我还没有测试过,所以我不会建议
Sanjay M.P. 分享的内容对我有用,但是我想澄清导致问题的原因,以及为什么该解决方案更详细。
首先,我正在 运行 设置一个 ubuntu 环境,所以 Piknik 共享的东西不起作用,firewalld 只在 centos / rhel 系统上。尽管如此,ufw 在所有节点上都被禁用了。
通过执行 kubectl describe pod calico-node-*****
,我能够缩小我收到的导致此问题的确切错误。我发现 calico BIRD 服务无法连接到对等点。还显示了 calico 节点试图用来与其 BGP 对等方配对的 IP 地址。它使用了错误的接口,因此错误的 ips。
为了自己定义问题,我所有的节点主机虚拟机都有多个接口。如果您没有明确指定要使用的接口,calico 会“自动”选择一个,无论您是否需要该接口。
解决方案是在 calico.yaml 文件中构建 calico 覆盖网络时指定特定接口。 Sanjay M. P. 使用正则表达式,如果您有不同的命名接口,它可能会起作用,但是,由于我是 运行ning Ubuntu 服务器,所有接口都以字符串“ens”开头,因此会发生同样的问题。
我已经删除了大部分 calico.yaml 文件以显示此设置应该在哪里的确切位置(~第 675 行)在那里添加设置,我也留下了 CALICO_IPV4POOL_CIDR因为需要将此设置适当地设置为在 kubeadm 初始化时指定的相同子网范围:
spec:
template:
spec:
containers:
- name: calico-node
image: calico/node:v3.14.2
env:
- name: CALICO_IPV4POOL_CIDR
value: "192.168.0.0/22"
- name: IP_AUTODETECTION_METHOD
value: "interface=ens224"
不幸的是,我没有找到回滚旧配置的方法,所以我只是重建了整个集群,并重新部署了 calico overlay(感谢上帝提供 VM 快照)。
kubeadm 初始化您的集群。
然后 运行 kubectl create -f calico.yaml
添加设置以构建覆盖网络。
确认覆盖网络正常工作
- 运行
watch -n1 kube-system get pods -o wide
,然后添加您的节点。确保在新添加的 kube 节点上构建的所有 calico 节点都显示为“1/1 运行”。 - 下载并安装 calicoctl,然后 运行
calicoctl node status
,确保 BGP 使用正确的网络。
您可以阅读更多关于 IP_AUTODETECTION_METHOD here。