如何解决Ubuntu节点加入RHEL Kubernetes集群时kube-proxy容器创建停滞问题?
解决Ubuntu节点加入RHEL Kubernetes集群后kube-proxy停滞的问题
从错误信息来看,核心问题是Ubuntu节点无法访问registry.k8s.io,导致拉取pause镜像超时,进而无法创建pod sandbox,最终导致kube-proxy停滞。以下是针对性的解决步骤:
1. 排查Ubuntu节点的网络连通性
- 测试与registry.k8s.io的网络连通性:
如果出现超时,说明节点网络存在以下问题之一:curl -v https://registry.k8s.io/v2/- DNS解析失败:执行
nslookup registry.k8s.io,若无法解析IP,修改/etc/resolv.conf添加可靠DNS(如8.8.8.8),或重启systemd-resolved服务:systemctl restart systemd-resolved - 防火墙/iptables拦截:关闭Ubuntu的ufw防火墙测试:
或检查iptables规则,确保允许出站443端口流量。ufw disable
- DNS解析失败:执行
2. 配置CRI-O镜像加速
如果节点无法直接访问registry.k8s.io,给CRI-O配置国内镜像源:
- 编辑CRI-O配置文件(路径通常为
/etc/crio/crio.conf或/etc/crio/conf.d/00-default.conf):- 在
[registries.search]段添加国内镜像仓库:registries = ["registry.k8s.io", "docker.io", "registry.cn-hangzhou.aliyuncs.com"] - 添加registry.k8s.io的镜像镜像映射:
[registries.mirrors.registry.k8s.io] endpoint = ["https://registry.cn-hangzhou.aliyuncs.com/google_containers"]
- 在
- 重启CRI-O服务:
systemctl restart crio - 删除停滞的kube-proxy pod,触发重新创建:
(将kubectl delete pod kube-proxy-s56kp -n kube-systemkube-proxy-s56kp替换为实际的pod名称)
3. 手动拉取并标记pause镜像
若配置镜像加速仍无效,手动从国内镜像站拉取pause镜像并标记:
- 拉取镜像:
crio pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6 - 标记为集群所需的镜像名称:
crio tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6 registry.k8s.io/pause:3.6 - 再次删除kube-proxy pod,验证是否正常启动。
4. 调整kube-proxy的镜像拉取策略
确保kube-proxy的DaemonSet使用IfNotPresent拉取策略,避免每次启动都强制拉取镜像:
- 编辑kube-proxy的DaemonSet:
kubectl edit daemonset kube-proxy -n kube-system - 找到
spec.template.spec.containers[0].imagePullPolicy,将其修改为IfNotPresent,保存退出。
内容的提问来源于stack exchange,提问作者Prems
相关产品推荐
相关产品推荐

