解决k8s UI界面进不去

一、引言

这两天迁移网络,直接重新部署docker还有k8,结果全部搞定之后,一开始的K8UI界面可以浏览的,结果就刷新了一下发现直接掉了。

去到服务器,发现一直在报错:

二、原因

对于服务器输出的:IPVS no destination available

一般是因为有 Service 用了 externalTrafficPolicy:Local,当 Node 上没有该 Service 对应 Pod 时,Node 上的该 Service 对应 NodePort 的 IPVS 规则里,RS 列表为空。当有流量打到这个 Node 的对应 NodePort 上时,由于 RS 列表为空,内核就会报这个 warning 日志。

在云厂商托管的 K8S 服务里,通常是 LB 会去主动探测 NodePort,发到没有这个 Service 对应 Pod 实例的 Node 时,报文被正常丢弃,从而内核报 warning 日志。

这个日志不会对服务造成影响,可以忽略不管。如果是在腾讯云 TKE 环境里,并且用的 TencentOS,可以设置一个内核参数来抑制这个 warning 日志输出:

bash 复制代码
sysctl -w net.ipv4.vs.ignore_no_rs_error=1

以上排错来自:IPVS no destination available | Kubernetes 排障指南

ok,人家说了,这个玩意不影响功能,为啥我的还是有问题,继续看。

三、pod

我发现虽然我的 k8s 的UI界面起不来,但是我依赖于其中的 jekins 却可以启动,包括nacos啥的都没有问题,那就说明肯定其中的 pod 组件出了问题,对于 pod ,如果有小伙伴不理解的可以看这边文章:K8s 核心概念深度解析:Pod 是什么?-CSDN博客

ok,开始排查

bash 复制代码
 kubectl get pods -n kubesphere-system

回:

这里可以看到,apiserver,console,controller-manager 这三个镜像都 ImagePullBackOff (拉取失败)

现在我们来检查一下看看我们的 docker 源是否有问题。

bash 复制代码
root@k8s-master:~# docker pull kubesphere/ks-console:v3.4.1

Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

amazing!拉不到我要的镜像,哥们加速器也是配好的。

一番搜查,看到这篇文章:kubesphere/ks-controller-manager:v3.4.1镜像无法拉取的问题 - KubeSphere 开发者社区

这个哥们说镜像被清理了?

咱也不知道,那就直接拉取他的东西到我们的docker源里面去。

bash 复制代码
docker pull harrymore/ks-controller-manager:v3.4.1

docker tag harrymore/ks-controller-manager:v3.4.1 kubesphere/ks-controller-manager:v3.4.1

接着修改一下拉取策略

bash 复制代码
# 编辑 ks-console Deployment 配置
kubectl edit deployment ks-console -n kubesphere-system

# 找到 spec.template.spec.containers[0] 段落
containers:
- name: ks-console
  image: kubesphere/ks-console:v3.4.1
  imagePullPolicy: IfNotPresent  # 关键配置:仅本地无镜像时才拉取
  # 其他配置保持不变

接着

bash 复制代码
# 1. 删除异常 Pod(Deployment 会自动重建,使用本地镜像)
kubectl delete pod -n kubesphere-system -l app=ks-console,tier=frontend

# 2. 实时查看 Pod 状态(等待变为 Running/1/1)
kubectl get pods -n kubesphere-system -l app=ks-console,tier=frontend -w

ok,启动好了没有问题了。

四、如果还是不行

我的情况是因为突然去拉了官方的源,可能是我重装的时候没有修改策略,正常来说我都是直接拉我自己的私有仓库里的东西,包括我的docker源应该都是包含我的镜像的。

查看本地所有镜像

docker images

哥们后面才发现原来我有的,重复拉取了,后面把 Harrymore 的删掉了,大家如果没有就拉取Harrymore的。

如果你也有了以上的这些 ks-controller-manager 等镜像,可以直接用以下命令,就不需要一个个去修改策略了。

bash 复制代码
# 1. 批量设置镜像拉取策略:强制使用本地 Docker 镜像
kubectl -n kubesphere-system patch deployment ks-console --type='json' -p='[{"op":"replace","path":"/spec/template/spec/containers/0/imagePullPolicy","value":"IfNotPresent"}]'
kubectl -n kubesphere-system patch deployment ks-apiserver --type='json' -p='[{"op":"replace","path":"/spec/template/spec/containers/0/imagePullPolicy","value":"IfNotPresent"}]'
kubectl -n kubesphere-system patch deployment ks-controller-manager --type='json' -p='[{"op":"replace","path":"/spec/template/spec/containers/0/imagePullPolicy","value":"IfNotPresent"}]'

# 2. 重启 kubelet:让 kubelet 重新对接 Docker,识别本地镜像
systemctl restart kubelet

# 3. 滚动重启 KubeSphere 核心 Deployment,触发 Pod 重建
kubectl -n kubesphere-system rollout restart deployment ks-console ks-apiserver ks-controller-manager

# 4. 实时查看 Pod 状态(等待全部变为 Running/1/1)
kubectl get pods -n kubesphere-system -l app in (ks-apiserver,ks-console,ks-controller-manager) -w

验证:

bash 复制代码
# 1. 查看 ks-console Service 的 Endpoints(非空即为成功)
kubectl describe service ks-console -n kubesphere-system | grep Endpoints

# 2. 测试 KubeSphere 控制台访问(返回 200/302 即为正常)
curl -I http://192.168.100.27:30880

END

如果觉得这份基础知识点总结清晰,别忘了动动小手点个赞👍,再关注一下呀~ 后续还会分享更多有关面试问题的干货技巧,同时一起解锁更多好用的功能,少踩坑多提效!🥰 你的支持就是我更新的最大动力,咱们下次分享再见呀~🌟

相关推荐
last demo2 小时前
docker基础
运维·docker·容器·eureka
孤岛悬城2 小时前
59 k8s集群调度
云原生·kubernetes
独自归家的兔2 小时前
K8s 核心概念深度解析:Pod 是什么?
云原生·容器·kubernetes
咕叽咕叽的汪3 小时前
Es/Kibana7.17.9中数据迁移到openSearch3.4.0【DockerDesktop模拟】
运维·spring boot·elasticsearch·docker·容器·devops
Mr. Cao code3 小时前
Docker文件数据卷实战:挂载与优化
运维·docker·容器
智能化咨询3 小时前
(122页PPT)数字化架构演进和治理(附下载方式)
微服务·云原生·架构
释怀不想释怀3 小时前
Zabbix(安装模式)
运维·云原生·zabbix
大佐不会说日语~3 小时前
Docker部署旧版本系统MySQL5.7+乱码问题解决方案
运维·docker·容器
陈陈CHENCHEN3 小时前
【Kubernetes】现有 K8s 集群上部署 Kuboard v4
kubernetes