news 2026/8/28 17:23:37

K8s服务器由于机房维护,关机后启动问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
K8s服务器由于机房维护,关机后启动问题

一、背景

服务器由于升级原因,临时断电,断电前手动停止程序并手动关机(k8s环境没有理会)。恢复供电后,问题处理.
环境: centos7 docker k8s
[root@wdy01 ~]# kubectl get node
E0727 13:54:51.638488 160568 memcache.go:265] couldn’t get current server API group list: Get “https://10.1.1.1:6443/api?timeout=32s”: dial tcp 10.1.1.1:6443: connect: connection refused
E0727 13:54:51.638859 160568 memcache.go:265] couldn’t get current server API group list: Get “https://10.1.1.1:6443/api?timeout=32s”: dial tcp 10.1.1.1:6443: connect: connection refused
E0727 13:54:51.640220 160568 memcache.go:265] couldn’t get current server API group list: Get “https://10.1.1.1:6443/api?timeout=32s”: dial tcp 10.1.1.1:6443: connect: connection refused
E0727 13:54:51.641583 160568 memcache.go:265] couldn’t get current server API group list: Get “https://10.1.1.1:6443/api?timeout=32s”: dial tcp 10.1.1.1:6443: connect: connection refused
E0727 13:54:51.642889 160568 memcache.go:265] couldn’t get current server API group list: Get “https://10.1.1.1:6443/api?timeout=32s”: dial tcp 10.1.1.1:6443: connect: connection refused
The connection to the server 10.1.1.1:6443 was refused - did you specify the right host or port?
[root@wdy01 ~]#

二、解决过程

2.1 先检查集群有效期,发现正常

[root@wdy01 ~]# kubeadm certs check-expiration[check-expiration]Reading configurationfromthe cluster...[check-expiration]FYI: You can look at this config file with'kubectl -n kube-system get cm kubeadm-config -o yaml'[check-expiration]Error reading configurationfromthe Cluster.Falling back to default configuration CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED admin.conf Jul 07,2027 00:21 UTC 344d ca no apiserver Jul 07,2027 00:21 UTC 344d ca no apiserver-etcd-client Jul 07,2027 00:21 UTC 344d etcd-ca no apiserver-kubelet-client Jul 07,2027 00:21 UTC 344d ca no controller-manager.conf Jul 07,2027 00:21 UTC 344d ca no etcd-healthcheck-client Jul 07,2027 00:21 UTC 344d etcd-ca no etcd-peer Jul 07,2027 00:21 UTC 344d etcd-ca no etcd-server Jul 07,2027 00:21 UTC 344d etcd-ca no front-proxy-client Jul 07,2027 00:21 UTC 344d front-proxy-ca no scheduler.conf Jul 07,2027 00:21 UTC 344d ca no CERTIFICATE AUTHORITY EXPIRES RESIDUAL TIME EXTERNALLY MANAGED ca Jul 02,2035 01:45 UTC 8y no etcd-ca Jul 02,2035 01:45 UTC 8y no front-proxy-ca Jul 02,2035 01:45 UTC 8y no

2.2 查看kubelet日志

Jul2714:22:56 wdy01 systemd[1]: kubelet.service holdofftimeover, scheduling restart. Jul2714:22:56 wdy01 systemd[1]: Stopped kubelet: The Kubernetes Node Agent. Jul2714:22:56 wdy01 systemd[1]: Started kubelet: The Kubernetes Node Agent. Jul2714:22:56 wdy01 kubelet[237447]: Flag --container-runtime-endpoint has been deprecated, This parameter should besetvia the configfilespecified by the Kubelet's--configflag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/formoreinformation. Jul2714:22:56 wdy01 kubelet[237447]: Flag --pod-infra-container-image has been deprecated, will be removedina future release. Image garbage collector will get sandbox image information from CRI. Jul2714:22:56 wdy01 kubelet[237447]: I072714:22:56.600080237447server.go:203]"--pod-infra-container-image will not be pruned by the image garbage collector in kubelet and should also be set in the remote runtime"Jul2714:22:56 wdy01 kubelet[237447]: I072714:22:56.605137237447server.go:467]"Kubelet version"kubeletVersion="v1.2x.2"Jul2714:22:56 wdy01 kubelet[237447]: I072714:22:56.605175237447server.go:469]"Golang settings"GOGC=""GOMAXPROCS=""GOTRACEBACK=""Jul2714:22:56 wdy01 kubelet[237447]: I072714:22:56.606111237447server.go:895]"Client rotation is on, will bootstrap in background"Jul2714:22:56 wdy01 kubelet[237447]: I072714:22:56.607831237447certificate_store.go:130]Loading cert/key pair from"/var/lib/kubelet/pki/kubelet-client-current.pem".Jul2714:22:56 wdy01 kubelet[237447]: I072714:22:56.608791237447dynamic_cafile_content.go:157]"Starting controller"name="client-ca-bundle::/etc/kubernetes/pki/ca.crt"Jul2714:22:56 wdy01 kubelet[237447]: W072714:22:56.609247237447logging.go:59][core][Channel#1 SubChannel #2] grpc: addrConn.createTransport failed to connect to {Jul2714:22:56 wdy01 kubelet[237447]:"Addr":"/var/run/cri-dockerd.sock", Jul2714:22:56 wdy01 kubelet[237447]:"ServerName":"/var/run/cri-dockerd.sock", Jul2714:22:56 wdy01 kubelet[237447]:"Attributes":null, Jul2714:22:56 wdy01 kubelet[237447]:"BalancerAttributes":null, Jul2714:22:56 wdy01 kubelet[237447]:"Type":0, Jul2714:22:56 wdy01 kubelet[237447]:"Metadata":null Jul2714:22:56 wdy01 kubelet[237447]:}. Err: connection error: desc="transport: Error while dialing: dial unix /var/run/cri-dockerd.sock: connect: connection refused"Jul2714:22:56 wdy01 kubelet[237447]: E072714:22:56.610057237447run.go:74]"command failed"err="failed to run Kubelet: validate service connection: validate CRI v1 runtime API for endpoint\"unix:///var/run/cri-dockerd.sock\": rpc error: code = Unavailable desc = connection error: desc =\"transport: Error while dialing: dial unix /var/run/cri-dockerd.sock: connect: connection refused\""Jul2714:22:56 wdy01 systemd[1]: kubelet.service: main process exited,code=exited,status=1/FAILURE Jul2714:22:56 wdy01 systemd[1]: Unit kubelet.service entered failed state. Jul2714:22:56 wdy01 systemd[1]: kubelet.service failed.

如上日志:发现kubelet 启动失败核心原因:
dial unix /var/run/cri-dockerd.sock: connect: connection refused
cri-dockerd 服务没启动 / 未安装,kubelet 无法对接 Docker 的 CRI 接口,直接崩溃退出

2.3 解决

1)查看服务状态

systemctl status cri-dockerd

2)查看套接字文件是否存在

ls -l /var/run/cri-dockerd.sock

3)发现断电重启后,cri-dockerd服务丢失了

我下载过 cri-dockerd-0.3.14-3.el7.x86_64.rpm,执行rpm -ivh cri-dockerd-0.3.14-3.el7.x86_64.rpm安装。

4)重启并确认

systemctl daemon-reload# 开机自启并启动systemctlenable--nowcri-docker# 查看状态确认runningsystemctl status cri-docker# 检查socket文件是否生成ls/var/run/cri-dockerd.sock[root@wdy02 ~]# ls /var/run/cri-dockerd.sock/var/run/cri-dockerd.sock
[root@wdy02 ~]# systemctl status cri-docker● cri-docker.service - CRI InterfaceforDocker Application Container Engine Loaded: loaded(/usr/lib/systemd/system/cri-docker.service;enabled;vendor preset: disabled)Active: active(running)since Thu2026-08-2711:14:06 CST;1h 26min ago Docs: https://docs.mirantis.com Main PID:231334(cri-dockerd)Tasks:38Memory:46.6M CGroup: /system.slice/cri-docker.service └─231334 /usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/... Aug2711:31:06 wdy02 cri-dockerd[231334]: delegateAdd: netconf sent to delegate plugin: Aug2711:32:02 wdy02 cri-dockerd[231334]:{"cniVersion":"0.3.1","hairpinMode":true,"ipMasq":false,"ipam":{"ranges":[[{"subnet":"10.244... msg="Wi Aug2711:32:03 wdy02 cri-dockerd[231334]: map[string]interface{}{"cniVersion":"0.3.1","hairpinMode":true,"ipMasq":false,"ipam":map...IP{0xa, Aug2711:32:03 wdy02 cri-dockerd[231334]: delegateAdd: netconf sent to delegate plugin: Aug2712:17:16 wdy02 cri-dockerd[231334]:{"cniVersion":"0.3.1","hairpinMode":true,"ipMasq":false,"ipam":{"ranges":[[{"subnet":"10.244... msg="Wi Aug2712:17:16 wdy02 cri-dockerd[231334]: map[string]interface{}{"cniVersion":"0.3.1","hairpinMode":true,"ipMasq":false,"ipam":map...IP{0xa, Aug2712:17:16 wdy02 cri-dockerd[231334]: delegateAdd: netconf sent to delegate plugin: Aug2712:17:17 wdy02 cri-dockerd[231334]:{"cniVersion":"0.3.1","hairpinMode":true,"ipMasq":false,"ipam":{"ranges":[[{"subnet":"10.244... msg="Wi Aug2712:17:17 wdy02 cri-dockerd[231334]: map[string]interface{}{"cniVersion":"0.3.1","hairpinMode":true,"ipMasq":false,"ipam":map...IP{0xa, Aug2712:17:17 wdy02 cri-dockerd[231334]: delegateAdd: netconf sent to delegate plugin: Hint: Some lines were ellipsized, use-lto showinfull.

5)重启并确认

修复 kubelet 配置,消除 cri-dockerd.sock 连接拒绝报错

vi/var/lib/kubelet/config.yaml

追加一行(没有就加,有就确认一致):

containerRuntimeEndpoint: unix:///var/run/cri-dockerd.sock

6) 重启kubelet

  1. 重启kubelet
systemctl daemon-reload systemctl restart kubelet# 实时观察日志journalctl-ukubelet-f
  1. 如有必要,重启kube-apiserver、kube-controller-manage、kube-scheduler
# 如果是docker作为容器的话,可执行如下命令。其余容器方法类似dockerps|grepkube-apiserver|grep-vpause|awk'{print $1}'|xargs-idockerrestart{}dockerps|grepkube-controller-manage|grep-vpause|awk'{print $1}'|xargs-idockerrestart{}dockerps|grepkube-scheduler|grep-vpause|awk'{print $1}'|xargs-idockerrestart{}

三、补充

补充1:根据实际情况,docker必须保障正常。

systemctl restart docker
systemctl enable docker

补充2:如启动后发现,worker节点也没有正常ready,则worker节点也需要排查并安装cri-dockerd。

四、结果

如下图,执行kubectl get nodes查看集群状态已正常。

五、新问题

后端程序链接nacos报错:java.net.NoRouteToHostException: No route to host (Host unreachable)
测试发现,宿主机worker是可以连通01部署的nacos的。但程序pod内不通。关闭防火墙也不行。
最后发现:02 节点上 docker/flannel 残留 iptables nat 规则 拦截了 Pod 访问宿主机网段的回包,清空 iptables 后立刻恢复连通。
最后是在02 清空所有 iptables 规则(nat+filter) 解决的。

# 清空过滤链iptables-F# 清空nat转发链(关键)iptables-tnat-F# 设置默认转发允许iptables-PFORWARD ACCEPT

## 补充1:过了一段时间,不知什么原因又出现NoRouteToHostException了

最后是这样解决的:
首先是docker配置文件添加编辑/etc/docker/daemon.json,增加"ip-forward":false

## 修改 docker 配置,防止重启又生成 DOCKER 链不让docker乱改 filter 表 FORWARD 链、不注入 DOCKER 隔离防火墙规则;内核 IP 转发仍然开启,calico/kube‑proxy 全权接管集群网络。 ```bash{"exec-opts":["native.cgroupdriver=systemd"],"data-root":"/UData/docker","insecure-registries":["ip:81"],"registry-mirrors":["https://docker.1panel.live"],"log-driver":"json-file","log-opts":{"max-size":"100m","max-file":"5"},"ip-forward":false}

重启 docker 与 cri‑dockerd

systemctl daemon-reload systemctl restartdockercri-docker

删除旧的规则
1)先删除 FORWARD 链中跳转的引用(关键,解决 Too many links)

# 删除FORWARD里跳转到DOCKER‑USERiptables-DFORWARD-jDOCKER-USER# 删除FORWARD里跳转到DOCKER‑ISOLATION‑STAGE‑1iptables-DFORWARD-jDOCKER-ISOLATION-STAGE-1# 删除FORWARD里跳转到FLANNEL‑FWDiptables-DFORWARD-jFLANNEL-FWD# 删除firewalld残留跳转iptables-DFORWARD-jFORWARD_direct iptables-DFORWARD-jFORWARD_IN_ZONES_SOURCE iptables-DFORWARD-jFORWARD_IN_ZONES iptables-DFORWARD-jFORWARD_OUT_ZONES_SOURCE iptables-DFORWARD-jFORWARD_OUT_ZONES

2)现在就可以清空并删除这些链

# docker链iptables-FDOCKER-USERiptables-XDOCKER-USERiptables-FDOCKER-ISOLATION-STAGE-1 iptables-XDOCKER-ISOLATION-STAGE-1 iptables-FDOCKER iptables-XDOCKER# flanneliptables-FFLANNEL-FWD iptables-XFLANNEL-FWD# firewalld残留iptables-FFORWARD_direct iptables-XFORWARD_direct iptables-FFORWARD_IN_ZONES iptables-XFORWARD_IN_ZONES iptables-FFORWARD_IN_ZONES_SOURCE iptables-XFORWARD_IN_ZONES_SOURCE iptables-FFORWARD_OUT_ZONES iptables-XFORWARD_OUT_ZONES iptables-FFORWARD_OUT_ZONES_SOURCE iptables-XFORWARD_OUT_ZONES_SOURCE

3)删除那两条致命 REJECT 规则(不用‑m reject,按行序号删除)
先查看行号:

iptables-LFORWARD-n--line-numbers

输出会显示每一行的 num 编号,找到两条 REJECT 行的行号,例如假设行号是 20、24:

# 替换为你实际看到的行号,先删大序号,再删小序号iptables-DFORWARD24iptables-DFORWARD20

注意:删除行号的时候,先删数字大的行,因为删掉前面行,后面行号会变化

4)清理完核对结果

[root@woker02 ~]# iptables -L FORWARD -n --line-numbers Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 KUBE-PROXY-FIREWALL all -- 0.0.0.0/0 0.0.0.0/0 ctstate NEW /* kubernetes load balancer firewall */ 5 KUBE-FORWARD all -- 0.0.0.0/0 0.0.0.0/0 /* kubernetes forwarding rules */ 6 KUBE-SERVICES all -- 0.0.0.0/0 0.0.0.0/0 ctstate NEW /* kubernetes service portals */ 7 KUBE-EXTERNAL-SERVICES all -- 0.0.0.0/0 0.0.0.0/0 ctstate NEW /* kubernetes externally-visible service portals */ 8 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 9 ACCEPT all -- 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED 10 ACCEPT all -- 192.168.122.0/24 0.0.0.0/0 11 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 12 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 13 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 14 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 15 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 16 FLANNEL-FWD all -- 0.0.0.0/0 0.0.0.0/0 /* flanneld forward */

END

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/28 17:22:27

太阳能收集IC如何解决IoT供电难题:MPPT与低功耗设计实战

做物联网硬件这几年,我踩过最大的坑不是通信、不是传感器,而是供电。一批温湿度节点部署在机房吊顶里,三个月后电池没电,偏偏这时候客户着急要数据,你说尴尬不尴尬。后来把目光放在太阳能收集IC(Solar Harv…

作者头像 李华
网站建设 2026/8/28 17:21:18

Pixel Watch 2芯片与传感器深度解析:骁龙W5+与cEDA实战

Pixel Watch 2发布之后,热度其实不低,但有意思的是,大家讨论的点大多停留在表带、表盘和Fitbit订阅上,真正值得研究的是它内部那点“看不见的变化”——芯片从三星Exynos 9110换成了高通骁龙W5 Gen 1,传感器矩阵也多了…

作者头像 李华
网站建设 2026/8/28 17:21:02

从“取外号”到可控输出:DeepSeek上下文漂移与工程实践

最近 DeepSeek 讨论度最高的不是跑分,也不是上下文长度,而是一个看起来很离谱的梗:有用户反馈,在连续多轮对话里,模型会偷偷给用户起外号,表面上一口一个“用户”,后台日志里却出现了一些奇怪的…

作者头像 李华
网站建设 2026/8/28 17:19:37

Memory Read / Write TLP 示例(不看协议也能懂)

目录 六、Memory Read / Write TLP 示例(不看协议也能懂) 一、先统一一个前提(非常重要) 二、Memory Write TLP(CPU 写设备) 1️⃣ 驱动里发生了什么? 2️⃣ RC 生成的 TLP(人话版) 3️⃣ 逐字段解释 4️⃣ 协议分析仪里你看到的是什么? 三、Memory Read TLP…

作者头像 李华
网站建设 2026/8/28 17:16:19

YOLOv8安全帽检测实战:从数据集解析到模型部署全流程指南

简介:目标检测是计算机视觉的核心任务之一,旨在识别图像中特定目标的位置与类别。其原理通常基于深度学习模型,通过卷积神经网络提取特征,并利用回归或锚框机制预测边界框。这项技术在工业自动化、智能安防等领域具有重要价值&…

作者头像 李华
网站建设 2026/8/28 17:15:38

Python StatsModels线性回归实战:从统计推断到业务洞察

1. 项目概述:为什么是StatsModels?如果你正在用Python处理数据,无论是做市场分析、量化研究还是业务报表,最终大概率会面临一个灵魂拷问:“这些变量之间到底有什么关系?” 比如,广告投入增加10万…

作者头像 李华