如何解决k8s集群calico节点一直处于 0/1 running的情况
这里专指使用:https://github.com/easzlab/kubeasz 安装的k8s集群,
怎么安装这里略过,已经很傻瓜式操作。
但是当使用它通过ezctl add node的操作的时候,会发现,节点成功添加了,但是对应添加的calico pod,却变为了0/1 running,始终起不来,这里记录一下原因和解决办法。
一、原因
calico要通过解析hosts文件,来确定节点的ip地址,kubeasz脚本ezctl add node,如果不指定node name,那么默认名称是default,这点可以通过kubectl get -A nodes确认
那么calico的节点名是什么呢?因为calico也是kubeasz ezctl对应命令装上的,所以也是这个node name,要检查可以前往:https://docs.tigera.io/calico/latest/reference/configure-calico-node
calico查找节点文件名的顺序如下
经过查故障节点的/var/lib/calico/nodename也可以发现,该nodename和预期不一致
二、解决办法
- 在所有步骤之前,先编辑各个节点的/etc/hosts文件,给每个节点各自的hostname,比如test.server1/test.server2,特别注意!也要写到/etc/hostname里面!
也可使用下面方式修改和验证 这样更保险
hostnamectl set-hostname {your-host-name}
hostnamectl
- 使用ezctl add-node的时候,指定/etc/hosts中记录的名称
ezctl add-node cluster01 1.1.1.1 k8s_nodename=clickhouse.zk # k8s_ndoename非常重要!一定要给,并且不能和其他节点重复,最好就是节点的host英文字符串
- calico pod启动后可以检测/var/lib/calico/nodename文件,存在于etc/hosts文件中,则说明正常
三、另一个小问题
nginx-ingress-controller安装在多节点的时候,确保它运行在master01,(或者说,运行在你要通过浏览器访问的那个节点上),并且确保它可以识别到资源,否则集群里面的svc导航不会生效