kubenates启动calico-node时,有节点总是报错CrashLoopBackOff

本文介绍了解决Kubernetes集群中Calico节点出现CrashLoopBackOff状态的方法,通过删除冲突的虚拟网桥,成功使所有calico-node恢复正常运行。
[root@vm511 ~]# kubectl get pods --all-namespaces -o wide
NAMESPACE     NAME                            READY   STATUS             RESTARTS   AGE    IP              NODE    NOMINATED NODE   READINESS GATES
kube-system   calico-node-f4228               2/2     Running            7          79m    192.168.2.106   vm511   <none>           <none>
kube-system   calico-node-gbqpd               2/2     Running            0          56m    192.168.2.109   vm514   <none>           <none>
kube-system   calico-node-mqr5x               1/2     CrashLoopBackOff   8          17m    192.168.2.107   vm512   <none>           <none>
kube-system   calico-node-nsj6q               2/2     Running            0          62m    192.168.2.108   vm513   <none>           <none>
kube-system   calico-node-vf2tn               1/2     CrashLoopBackOff   8          17m    192.168.2.110   vm515   <none>           <none>
kube-system   calico-typha-666749994b-hrxsx   1/1     Running            0          79m    192.168.2.107   vm512   <none>           <none>
kube-system   coredns-8567978547-5xm6x        1/1     Running            0          96m    172.22.0.2      vm511   <none>           <none>

有两个节点总是报错 CrashLoopBackOff,跟踪日志如下:

root@vm511 ~]# kubectl log -f -n kube-system calico-node-mqr5x  -c calico-node
log is DEPRECATED and will be removed in a future version. Use logs instead.
2020-07-03 03:31:48.926 [INFO][8] startup.go 251: Early log level set to info
2020-07-03 03:31:48.927 [INFO][8] startup.go 267: Using NODENAME environment for node name
2020-07-03 03:31:48.927 [INFO][8] startup.go 279: Determined node name: vm512
2020-07-03 03:31:48.931 [INFO][8] startup.go 302: Checking datastore connection
2020-07-03 03:31:48.945 [INFO][8] startup.go 326: Datastore connection verified
2020-07-03 03:31:48.945 [INFO][8] startup.go 99: Datastore is ready
2020-07-03 03:31:48.961 [INFO][8] startup.go 564: Using autodetected IPv4 address on interface br-2433bb129402: 172.18.0.1/16
2020-07-03 03:31:48.961 [INFO][8] startup.go 432: Node IPv4 changed, will check for conflicts
2020-07-03 03:31:48.966 [WARNING][8] startup.go 861: Calico node 'vm511' is already using the IPv4 address 172.18.0.1.
2020-07-03 03:31:48.966 [INFO][8] startup.go 205: Clearing out-of-date IPv4 address from this node IP="172.18.0.1/16"
2020-07-03 03:31:48.978 [WARNING][8] startup.go 1058: Terminating
Calico node failed to start

分析原因,是因为该节点上的网卡有问题,出现 br-xxxx网卡,如下:

[root@vm512 kubernetes-ha-kubeadm]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:d5:08:21 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.107/24 brd 192.168.2.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::6151:3703:6be0:de94/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: br-2433bb129402: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:fe:8f:e0:bd brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-2433bb129402
       valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:67:49:b3:8d brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
5: docker_gwbridge: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:2e:f1:9e:30 brd ff:ff:ff:ff:ff:ff
    inet 172.19.0.1/16 brd 172.19.255.255 scope global docker_gwbridge
       valid_lft forever preferred_lft forever

删除该网卡

 1、查看网桥状态

brctl show

root@vm512 kubernetes-ha-kubeadm]# brctl show
bridge name	bridge id		STP enabled	interfaces
br-2433bb129402		8000.0242fe8fe0bd	no		
docker0		8000.02426749b38d	no		
docker_gwbridge		8000.02422ef19e30	no

 2,关闭br-2433bb129402网桥

ifconfig br-2433bb129402 down 

3,删除网桥

brctl delbr br-2433bb129402

同理,清理其他节点的网卡。再次查看集群状态,如果还有CrashLoopBackOff的pod,参考如下命令删掉

kubectl delete pod calico-node-xxxxx -n kube-system

再次检查集群状态:

[root@vm511 ~]# kubectl get pods --all-namespaces -o wide
NAMESPACE     NAME                            READY   STATUS    RESTARTS   AGE    IP              NODE    NOMINATED NODE   READINESS GATES
kube-system   calico-node-f4228               2/2     Running   7          103m   192.168.2.106   vm511   <none>           <none>
kube-system   calico-node-gbqpd               2/2     Running   0          80m    192.168.2.109   vm514   <none>           <none>
kube-system   calico-node-mqr5x               2/2     Running   11         42m    192.168.2.107   vm512   <none>           <none>
kube-system   calico-node-n96tl               1/2     Running   0          6s     192.168.2.110   vm515   <none>           <none>
kube-system   calico-node-nsj6q               2/2     Running   0          87m    192.168.2.108   vm513   <none>           <none>
kube-system   calico-typha-666749994b-hrxsx   1/1     Running   0          103m   192.168.2.107   vm512   <none>           <none>
kube-system   coredns-8567978547-5xm6x        1/1     Running   0          121m   172.22.0.2      vm511   <none>           <none>

calico-node节点均恢复正常。

 

 

Kubernetes 集群中,节点状态为 `NotReady` 通常与网络插件未正确安装、组件异常或节点配置问题相关。结合 Calico 组件处于 `CrashLoopBackOff` 或 `Pending` 状态,以及 CoreDNS 异常的情况,以下是排查和解决这些问题的详细步骤。 ### 检查节点状态和事件信息 使用以下命令检查节点状态及事件信息: ```bash kubectl get nodes kubectl describe node <node-name> ``` 节点状态为 `NotReady` 通常表示 kubelet 无法正常运行或网络插件未就绪。事件信息可以提供关于节点异常的更多线索,例如磁盘空间不足、镜像拉取失败等 [^1]。 ### 检查 Calico 网络插件状态 CalicoKubernetes 中常用的 CNI 网络插件,其异常状态可能导致节点无法进入 `Ready` 状态。执行以下命令检查 Calico 组件状态: ```bash kubectl get pods -n kube-system ``` 如果发现 `calico-node` 或 `calico-kube-controllers` 处于 `CrashLoopBackOff` 状态,可以使用以下命令进一步排查: ```bash kubectl describe pod -n kube-system <calico-pod-name> kubectl logs -n kube-system <calico-pod-name> ``` 常见的问题包括: - **镜像拉取失败**:确保 Docker 或 containerd 能够访问所需的镜像。如果遇到网络问题,可能需要配置代理或手动拉取镜像 [^2]。 - **网络配置错误**:检查 Calico 的配置文件(如 `calico.yaml`)是否正确,特别是 IP 范围和网络接口配置。 - **权限问题**:确保 Calico 的 RBAC 配置正确,避免权限不足导致的组件崩溃。 ### 安装或修复 Calico 网络插件 如果尚未安装 Calico,可以通过以下命令安装: ```bash kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml ``` 如果 Calico 已安装但状态异常,可以尝试删除并重新安装: ```bash kubectl delete -f https://docs.projectcalico.org/manifests/calico.yaml kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml ``` ### 检查 CoreDNS 状态 CoreDNS 是 Kubernetes 集群中的核心组件之一,负责服务发现。如果 CoreDNS 处于 `Pending` 或 `NotReady` 状态,可以使用以下命令检查其状态和日志: ```bash kubectl get pods -n kube-system -l k8s-app=kube-dns kubectl describe pod -n kube-system <coredns-pod-name> kubectl logs -n kube-system <coredns-pod-name> ``` 常见的问题包括: - **CNI 网络插件未就绪**:CoreDNS 依赖于 CNI 网络插件,确保 Calico 或其他网络插件已正确安装并运行。 - **资源不足**:检查节点资源(如 CPU 和内存)是否充足,避免 CoreDNS 因资源不足而无法启动- **配置错误**:检查 CoreDNS 的配置文件(如 `Corefile`)是否正确,避免配置错误导致服务无法正常运行。 ### 检查 kubelet 状态 `kubelet` 是 Kubernetes 节点上的核心组件,负责与 API Server 通信并管理容器。如果 `kubelet` 异常,可能导致节点状态为 `NotReady`。检查 `kubelet` 状态并重启服务: ```bash systemctl status kubelet systemctl restart kubelet ``` 查看 `kubelet` 日志以获取更多信息: ```bash journalctl -u kubelet.service ``` ### 检查节点 IP 和网络连通性 确保节点之间的网络连通性正常,避免因网络问题导致节点无法通信。可以使用以下命令测试节点之间的网络连通性: ```bash ping <node-ip> telnet <node-ip> 6443 ``` ### 示例:修复镜像拉取失败问题 如果遇到镜像拉取失败的问题(如 `ErrImagePull`),可以手动拉取镜像并重新打标签: ```bash docker pull <mirror-registry>/metrics-server:v0.4.1 docker tag <mirror-registry>/metrics-server:v0.4.1 k8s.gcr.io/metrics-server/metrics-server:v0.4.1 docker rmi <mirror-registry>/metrics-server:v0.4.1 ``` ### 示例:检查 CoreDNS 配置 确保 CoreDNS 的配置文件 `Corefile` 正确无误: ```yaml apiVersion: v1 kind: ConfigMap metadata: name: coredns namespace: kube-system data: Corefile: | .:53 { errors health { lameduck 5s } ready kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa ttl 30 } prometheus :9153 forward . /etc/resolv.conf cache 30 loop reload loadbalance } ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值