k8s集群部署成功后某个节点突然出现notready状态的问题原因分析和解决办法

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: k8s集群部署成功后某个节点突然出现notready状态的问题原因分析和解决办法

1、问题描述

k8s集群配置为 一主+三个节点;刚开始运行一直正常;某天突然node03主机状态变为notready,问题如下:

在master节点使用:

#master节点查看节点工作状态
kubectl get nodes

出现node03节点的状态为NotReady。

2、查看node03的日志

在node03节点中使用一下命令查看报错信息,代码:

#node03节点查看日志
journalctl -f -u kubelet.service 

报错意思是不能加载kubelet配置文件!
报错意思是不能加载kubelet配置文件!
报错意思是不能加载kubelet配置文件!

-- Logs begin at 四 2023-12-21 15:25:07 CST. --
12月 22 01:01:00 tigerhhzz-node03-43 systemd[1]: Unit kubelet.service entered failed state.
12月 22 01:01:00 tigerhhzz-node03-43 systemd[1]: kubelet.service failed.
12月 22 01:01:10 tigerhhzz-node03-43 systemd[1]: kubelet.service holdoff time over, scheduling restart.
12月 22 01:01:10 tigerhhzz-node03-43 systemd[1]: Stopped kubelet: The Kubernetes Node Agent.
12月 22 01:01:10 tigerhhzz-node03-43 systemd[1]: Started kubelet: The Kubernetes Node Agent.
12月 22 01:01:10 tigerhhzz-node03-43 kubelet[121391]: Flag --cgroup-driver has been deprecated, This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.
12月 22 01:01:10 tigerhhzz-node03-43 kubelet[121391]: F1222 01:01:10.301771  121391 server.go:198] failed to load Kubelet config file /var/lib/kubelet/config.yaml, error failed to read kubelet config file "/var/lib/kubelet/config.yaml", error: open /var/lib/kubelet/config.yaml: no such file or directory
12月 22 01:01:10 tigerhhzz-node03-43 systemd[1]: kubelet.service: main process exited, code=exited, status=255/n/a
12月 22 01:01:10 tigerhhzz-node03-43 systemd[1]: Unit kubelet.service entered failed state.
12月 22 01:01:10 tigerhhzz-node03-43 systemd[1]: kubelet.service failed.
12月 22 01:01:20 tigerhhzz-node03-43 systemd[1]: kubelet.service holdoff time over, scheduling restart.
12月 22 01:01:20 tigerhhzz-node03-43 systemd[1]: Stopped kubelet: The Kubernetes Node Agent.
12月 22 01:01:20 tigerhhzz-node03-43 systemd[1]: Started kubelet: The Kubernetes Node Agent.
12月 22 01:01:20 tigerhhzz-node03-43 kubelet[121400]: Flag --cgroup-driver has been deprecated, This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.
12月 22 01:01:20 tigerhhzz-node03-43 kubelet[121400]: F1222 01:01:20.508883  121400 server.go:198] failed to load Kubelet config file /var/lib/kubelet/config.yaml, error failed to read kubelet config file "/var/lib/kubelet/config.yaml", error: open /var/lib/kubelet/config.yaml: no such file or directory
12月 22 01:01:20 tigerhhzz-node03-43 systemd[1]: kubelet.service: main process exited, code=exited, status=255/n/a
12月 22 01:01:20 tigerhhzz-node03-43 systemd[1]: Unit kubelet.service entered failed state.
12月 22 01:01:20 tigerhhzz-node03-43 systemd[1]: kubelet.service failed.
12月 22 01:01:30 tigerhhzz-node03-43 systemd[1]: kubelet.service holdoff time over, scheduling restart.
12月 22 01:01:30 tigerhhzz-node03-43 systemd[1]: Stopped kubelet: The Kubernetes Node Agent.
12月 22 01:01:30 tigerhhzz-node03-43 systemd[1]: Started kubelet: The Kubernetes Node Agent.
12月 22 01:01:30 tigerhhzz-node03-43 kubelet[121407]: Flag --cgroup-driver has been deprecated, This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.
12月 22 01:01:30 tigerhhzz-node03-43 kubelet[121407]: F1222 01:01:30.820217  121407 server.go:198] failed to load Kubelet config file /var/lib/kubelet/config.yaml, error failed to read kubelet config file "/var/lib/kubelet/config.yaml", error: open /var/lib/kubelet/config.yaml: no such file or directory
12月 22 01:01:30 tigerhhzz-node03-43 systemd[1]: kubelet.service: main process exited, code=exited, status=255/n/a
12月 22 01:01:30 tigerhhzz-node03-43 systemd[1]: Unit kubelet.service entered failed state.
12月 22 01:01:30 tigerhhzz-node03-43 systemd[1]: kubelet.service failed.

由日志信息可知,报错原因是不能从/var/llib/kubelet/config.yaml下载到kubelet的配置。

3、错误原因分析

可能node03主机自身某种原因,出现宕机后重启,然后在 kubeadm init初始化后没有加入node03节点到集群中,不能加载kubelet的配置文件/var/lib/kubelet/config.yaml,导致读取/var/llib/kubelet/config.yaml文件失败。

另外估计是我之前没有做 kubeadm init就运行了systemctl start kubelet。

4、解决办法

在master节点,重新生成token,然后尝试在node03问题节点上重新更新token。

## master节点操作
kubeadm token create --print-join-command

kubeadm join 192.168.162.31:6443 --token 6u1q3a.qxhb1wyjztsp34ty --discovery-token-ca-cert-hash sha256:967bbc3b30871241bbfd61e42ae5fa836e08111a5a43d63b319f028fdbc2241a

在node03节点运行一下代码:(尝试重新加入集群)

## node03节点操作
kubeadm join 192.168.162.31:6443 --token 6u1q3a.qxhb1wyjztsp34ty     --discovery-token-ca-cert-hash sha256:967bbc3b30871241bbfd61e42ae5fa836e08111a5a43d63b319f028fdbc2241a

出现以下情况表明成功加入:

此时查看node03 kubelet的状态

systemctl status kubelet

kubelet在node03节点成功运行,node03重新加入集群之后查看所有节点状态,。

继续返回master节点主机查看所有节点状态:

kubectl get nodes

所有节点状态为ready,问题解决!!!

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
Kubernetes API 调度
k8s中节点无法启动Pod
【10月更文挑战第3天】
82 6
|
1月前
|
Kubernetes 持续交付 Docker
利用 Docker 和 Kubernetes 实现微服务部署
【10月更文挑战第2天】利用 Docker 和 Kubernetes 实现微服务部署
|
1月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
121 60
|
1月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
210 62
|
7天前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
26 1
|
1月前
|
NoSQL 关系型数据库 Redis
高可用和性能:基于ACK部署Dify的最佳实践
本文介绍了基于阿里云容器服务ACK,部署高可用、可伸缩且具备高SLA的生产可用的Dify服务的详细解决方案。
|
1月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
73 0
|
1月前
|
Kubernetes 网络协议 安全
[kubernetes]二进制方式部署单机k8s-v1.30.5
[kubernetes]二进制方式部署单机k8s-v1.30.5
|
23天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
24天前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。