Unable to set NetworkUnavailable to False error=nodes "iuap_25_77" not found 2021-05-14 03:22:38.865 [ERROR][8] startup.go 164: Unable to set node resource configuration error=error with field Metadata.Name = 'iuap_25_77' (name must consist of lower case alphanumeric characters, '-' or '.' (regex: [a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*))
1 个回复
nccloud
背景:新增加的一台主机,接入资源池后启动异常,排查后发现本机的 calico节点启动异常
1.根据报错发现如下内容
Unable to set NetworkUnavailable to False error=nodes "iuap_25_77" not found
2021-05-14 03:22:38.865 [ERROR][8] startup.go 164: Unable to set node resource configuration error=error with field Metadata.Name = 'iuap_25_77' (name must consist of lower case alphanumeric characters, '-' or '.' (regex: [a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*))
分析:该主机在接入时在服务器修改了主机名,但是calico的
Metadata.Name
本身不支持下划线,只能在上面的描述中的规范
2 解决:修改机器名/重建calico配置
首先通过 hostnamectl set-hostname xxxx修改一个支持的机器名。同时,由于现有calico已经在etcd注册了(原机器名+IP)故需要清除etcd中的节点信息
修改机器名后需要reboot重启节点服务器
3 查看etcd中的calico信息
etcdctl get / --prefix --keys-only | grep iuap_25_77
执行没有输出结果,通过
etcdctl --help 根据提示要根据etcd版本设置接口环境变量
查看本地ectd版本
etcdctl version
设置环境变量
export ETCDCTL_API=3
再执行命令查看涉及当前主机在etcd中的缓存信息
etcdctl get / --prefix --keys-only | grep iuap_25_77
4 删除本机在etcd中的缓存信息,避免修改主机名后的信息因IP冲突等无法正常写入
etcdctl get / --prefix --keys-only | grep iuap_25_77 | xargs -I {} etcdctl del {}
再次确认本机在etcd中的缓存信息
无结果,说明缓存信息已清除
5 此时可以确认calico的启动状态,或者手工删除当前的pod实现重启
kubectl describe pod calico节点名 -n developer-center
6 确认calico启动状态
kubectl logs pod/calico-node-92zvm -n kube-system
7 calico启动成功后,该节点上其他依赖服务,如monitor也可以正常启动了
kubectl get pod -A -o wide|grep 10.10.25.77
总结:本次calico启动异常,导致监控服务异常,同时由此引发的分配到这个节点上的服务获取不到ip而无法初始化启动的问题。是因为安装主机后,人工调整了机器名,而机器名包含的下划线“_”是系统不支持的导致。