附着集群接入失败怎么办?
问题描述
本文为集群接入的异常排查思路以及解决方案。集群接入UCS可能出现的异常情况如下:
排查思路
集群处于异常状态的排查思路大致可根据报错信息进行定位,如表1所示。
报错信息 |
说明 |
推荐排查项 |
---|---|---|
“currently no agents available, please make sure the agents are correctly registered” |
出现该错误的原因大概率为接入集群中的proxy-agent运行状态异常或网络异常。 |
|
“please check the health status of kube apiserver: ...” |
出现该错误的原因大概率为集群内部kube-apiserver无法访问。 |
|
“cluster responded with non-successful status code: ...” |
出现该错误的原因可能是多样的,请根据实际状态码进行排查。 例如状态码401表示用户没有访问权限,可能的原因是集群认证信息过期。 |
|
“cluster responded with non-successful message: ...” |
出现该错误的原因可能是多样的,请根据实际信息进行排查。 例如“Get "https://172.16.0.143:6443/readyz?timeout=32s\": context deadline exceeded”显示访问apiserver超时,可能是因为集群apiserver发生故障。 |
- |
“Current cluster version is not supported in UCS service.” |
出现该错误的原因是集群版本不符合要求:接入UCS服务的Kubernetes集群版本必须为1.19及以上。 |
- |
排查项一:proxy-agent的运行状态
集群从UCS注销后,原有proxy-agent配置文件中包含的认证信息将会失效,请同时删除集群中已部署的proxy-agent实例。如需再次接入UCS,必须重新从UCS控制台下载proxy-agent配置文件进行部署。
- 登录目标集群Master节点。
- 查看集群代理部署状态。
kubectl -n kube-system get pod | grep proxy-agent
如果部署成功,预期输出如下:
proxy-agent-*** 1/1 Running 0 9s
说明proxy-agent部署正常,如proxy-agent没有处于正常Running状态,可以使用kubectl -n kube-system describe pod proxy-agent-***查看Pod的告警信息,详细排查思路可参考proxy-agent部署失败怎么办?。
proxy-agent默认部署两个Pod实例,存在一个Pod正常Running即可使用基本功能,但是高可用性无法保证。
- 打印proxy-agent的Pod日志,查看代理程序是否可以连接到UCS。
kubectl -n kube-system logs proxy-agent-*** | grep "Start serving"
如没有“Start serving”的日志打印但是proxy-agent实例状态正常,则需要继续检查其他排查项。
排查项二:集群与UCS网络连接状态
公网接入:
- 检查集群是否绑定公网IP或配置公网NAT网关。
- 检查集群安全组的出方向是否放通。如需对出方向做访问控制,请联系技术支持获取目的地址和端口号。
- 解决网络问题后,删掉已有的proxy-agent Pod使其重新生成Pod资源,查看新建Pod的日志中是否存在“Start serving”的日志打印。
kubectl -n kube-system logs proxy-agent-*** | grep "Start serving"
- 日志正常打印后,刷新UCS控制台页面,查看集群是否正常连接。
私网接入:
- 检查集群安全组的出方向是否放通。如需对出方向做访问控制,请联系技术支持获取目的地址和端口号。
- 排除集群与UCS和IDC/第三方云之间的网络连接故障。
- 排除集群私网接入的VPCEP故障,VPCEP状态需为“已接受”。如VPCEP被误删除,则需重新创建,请参见私网接入的集群误删除VPCEP后如何恢复。
图1 VPCEP状态
- 解决网络问题后,删掉已有的proxy-agent Pod使其重新生成Pod资源,查看新建Pod的日志中是否存在“Start serving”的日志打印。
kubectl -n kube-system logs proxy-agent-*** | grep "Start serving"
- 日志正常打印后,刷新UCS控制台页面,查看集群是否正常连接。
排查项三:集群kube-apiserver状态
集群接入UCS时,可能出现如图2所示的异常信息,错误显示“please check the health status of kube apiserver: ...”。
如出现以上信息,说明proxy-agent无法和集群apiserver进行正常通信,由于不同用户待接入集群的网络环境配置不同,这里无法提供统一的解决方案,需要您自行解决集群网络问题后进行重试。
- 登录UCS控制台,在左侧导航栏选择“容器舰队”页面。
- 登录目标集群Master节点,查看apiserver地址。
kubectl get po `kubectl get po -nkube-system | grep kube-apiserver | awk {'print $1'}` -nkube-system -oyaml | grep advertise-address.endpoint
- 查看集群的KubeConfig文件中“clusters.cluster.server”字段是否与2中查询的集群apiserver地址一致。
如不一致,可能是集群提供商做了apiserver的地址转换,请替换KubeConfig文件中的集群apiserver地址后,在UCS控制台重新注册集群,并重新部署proxy-agent。
若KubeConfig文件中“clusters.cluster.server”字段为“https://kubernetes.default.svc.cluster.local:443”可无需替换,该域名为kubernetes服务(即apiserver的ClusterIP)的本地域名。
- 检查proxy-agent的Pod是否可以访问待接入集群的apiserver。
参考命令:
kubectl exec -ti proxy-agent-*** -n kube-system /bin/bash # 访问集群的kube-apiserver curl -kv https://*.*.*.*:*/readyz
如无法正常访问,请解决集群网络问题后,在UCS控制台重新注册集群,并重新部署proxy-agent。