k8s无法正常启动使用,排查:etcd损坏

这篇具有很好参考价值的文章主要介绍了k8s无法正常启动使用,排查:etcd损坏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

k8s无法正常启动使用,排查:etcd损坏

问题:

在跑项目的时候,机器意外断电了,重启后发现kubectl无法使用,报错如下:

[root@k8s-master01 wal]# kubectl get pod
The connection to the server 192.168.18.101:6443 was refused - did you specify the right host or port?

排查:

1、

[root@k8s-master01 ~]# journalctl -fu kubelet

5月 06 12:05:34 k8s-master01 kubelet[18467]: I0506 12:05:34.798387   18467 kubelet.go:461] "Kubelet nodes not sync"
5月 06 12:05:35 k8s-master01 kubelet[18467]: I0506 12:05:35.120046   18467 kubelet.go:461] "Kubelet nodes not sync"
5月 06 12:05:35 k8s-master01 kubelet[18467]: I0506 12:05:35.368482   18467 kubelet.go:461] "Kubelet nodes not sync"
5月 06 12:05:35 k8s-master01 kubelet[18467]: I0506 12:05:35.432439   18467 kubelet.go:461] "Kubelet nodes not sync"
5月 06 12:05:35 k8s-master01 kubelet[18467]: I0506 12:05:35.626419   18467 kubelet_node_status.go:71] "Attempting to register node" node="k8s-master01"
5月 06 12:05:35 k8s-master01 kubelet[18467]: E0506 12:05:35.626808   18467 kubelet_node_status.go:93] "Unable to register node with API server" err="Post \"https://192.168.18.101:6443/api/v1/nodes\": dial tcp 192.168.18.101:6443: connect: connection refused" node="k8s-master01"
5月 06 12:05:35 k8s-master01 kubelet[18467]: I0506 12:05:35.797123   18467 kubelet.go:461] "Kubelet nodes not sync"
5月 06 12:05:35 k8s-master01 kubelet[18467]: I0506 12:05:35.797226   18467 kubelet.go:461] "Kubelet nodes not sync"
5月 06 12:05:35 k8s-master01 kubelet[18467]: E0506 12:05:35.797249   18467 kubelet.go:2298] "Error getting node" err="nodes have not yet been read at least once, cannot construct node object"

Unable to register node with API server" err=“Post “https://192.168.18.101:6443/api/v1/nodes”: dial tcp 192.168.18.101:6443: connect: connection refused” node="k8s-master01

发现连接不到apiserver

2、然后我到docker容器里,发现etcd和api都处于exitd状态

kubelet nodes not sync,k8s,docker,linux,运维,容器,kubernetes

查看了apiserver相关的容器log

报错如下:

[root@k8s-master01 ~]# docker logs k8s_kube-apiserver_kube-apiserver-k8s-master01_kube-system_2dd80c82feea0886cf3a8a74b4b80db1_26

I0506 04:08:32.598696       1 client.go:360] parsed scheme: "endpoint"
I0506 04:08:32.598776       1 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://127.0.0.1:2379  <nil> 0 <nil>}]
W0506 04:08:32.599383       1 clientconn.go:1223] grpc: addrConn.createTransport failed to connect to {https://127.0.0.1:2379  <nil> 0 <nil>}. Err :connection error: desc = "transport: Error while dialing dial tcp 127.0.0.1:2379: connect: connection refused". Reconnecting...
I0506 04:08:33.594958       1 client.go:360] parsed scheme: "endpoint"
I0506 04:08:33.595009       1 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://127.0.0.1:2379  <nil> 0 <nil>}]
W0506 04:08:33.596996       1 clientconn.go:1223] grpc: addrConn.createTransport failed to connect to {https://127.0.0.1:2379  <nil> 0 <nil>}. Err :connection error: desc = "transport: Error while dialing dial tcp 127.0.0.1:2379: connect: connection refused". Reconnecting...

transport: Error while dialing dial tcp 127.0.0.1:2379: connect: connection refused

好你个拒绝连接,来看看2379端口是干嘛的

[root@k8s-master01 ~]# cat /etc/kubernetes/manifests/kube-apiserver.yaml

kubelet nodes not sync,k8s,docker,linux,运维,容器,kubernetes

原来是etcd连接失败,怪不得容器状态也是exitd。

3、查看etcd容器的log,发现报错如下:

[root@k8s-master01 ~]# docker logs k8s_etcd_etcd-k8s-master01_kube-system_7a98aec14f1d812921d8b2f6c35fbbcc_24

[WARNING] Deprecated '--logger=capnslog' flag is set; use '--logger=zap' flag instead
2023-05-06 04:10:42.638389 I | etcdmain: etcd Version: 3.4.13
2023-05-06 04:10:42.638426 I | etcdmain: Git SHA: ae9734ed2
2023-05-06 04:10:42.638429 I | etcdmain: Go Version: go1.12.17
2023-05-06 04:10:42.638431 I | etcdmain: Go OS/Arch: linux/amd64
2023-05-06 04:10:42.638434 I | etcdmain: setting maximum number of CPUs to 4, total number of available CPUs is 4
2023-05-06 04:10:42.638485 N | etcdmain: the server is already initialized as member before, starting as etcd member...
[WARNING] Deprecated '--logger=capnslog' flag is set; use '--logger=zap' flag instead
2023-05-06 04:10:42.638516 I | embed: peerTLS: cert = /etc/kubernetes/pki/etcd/peer.crt, key = /etc/kubernetes/pki/etcd/peer.key, trusted-ca = /etc/kubernetes/pki/etcd/ca.crt, client-cert-auth = true, crl-file = 
2023-05-06 04:10:42.639017 I | embed: name = k8s-master01
2023-05-06 04:10:42.639042 I | embed: data dir = /var/lib/etcd
2023-05-06 04:10:42.639047 I | embed: member dir = /var/lib/etcd/member
2023-05-06 04:10:42.639050 I | embed: heartbeat = 100ms
2023-05-06 04:10:42.639053 I | embed: election = 1000ms
2023-05-06 04:10:42.639056 I | embed: snapshot count = 10000
2023-05-06 04:10:42.639079 I | embed: advertise client URLs = https://192.168.18.101:2379
2023-05-06 04:10:42.639084 I | embed: initial advertise peer URLs = https://192.168.18.101:2380
2023-05-06 04:10:42.639087 I | embed: initial cluster = 
2023-05-06 04:10:42.641786 W | wal: ignored file 0000000000000000-0000000000000000.wal.broken in wal
2023-05-06 04:10:42.641832 W | wal: ignored file 0000000000000004-000000000005dd9e.wal.broken in wal
2023-05-06 04:10:43.208339 I | etcdserver: recovered store from snapshot at index 600062
2023-05-06 04:10:43.212163 C | etcdserver: recovering backend from snapshot error: failed to find database snapshot file (snap: snapshot file doesn't exist)
panic: recovering backend from snapshot error: failed to find database snapshot file (snap: snapshot file doesn't exist)
        panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0xc0587e]

goroutine 1 [running]:
go.etcd.io/etcd/etcdserver.NewServer.func1(0xc0002cae30, 0xc0002c8d80)
        /tmp/etcd-release-3.4.13/etcd/release/etcd/etcdserver/server.go:334 +0x3e
panic(0xee6840, 0xc0001120a0)
        /usr/local/go/src/runtime/panic.go:522 +0x1b5
github.com/coreos/pkg/capnslog.(*PackageLogger).Panicf(0xc000203a60, 0x10c13b2, 0x2a, 0xc0002c8e50, 0x1, 0x1)
        /home/ANT.AMAZON.COM/leegyuho/go/pkg/mod/github.com/coreos/pkg@v0.0.0-20160727233714-3ac0863d7acf/capnslog/pkg_logger.go:75 +0x135
go.etcd.io/etcd/etcdserver.NewServer(0x7ffead4fde41, 0xc, 0x0, 0x0, 0x0, 0x0, 0xc0001bb080, 0x1, 0x1, 0xc0001bb200, ...)
        /tmp/etcd-release-3.4.13/etcd/release/etcd/etcdserver/server.go:464 +0x433c
go.etcd.io/etcd/embed.StartEtcd(0xc000292000, 0xc000197080, 0x0, 0x0)
        /tmp/etcd-release-3.4.13/etcd/release/etcd/embed/etcd.go:214 +0x988
go.etcd.io/etcd/etcdmain.startEtcd(0xc000292000, 0x10963d6, 0x6, 0x1, 0xc000221140)
        /tmp/etcd-release-3.4.13/etcd/release/etcd/etcdmain/etcd.go:302 +0x40
go.etcd.io/etcd/etcdmain.startEtcdOrProxyV2()
        /tmp/etcd-release-3.4.13/etcd/release/etcd/etcdmain/etcd.go:144 +0x2ef9
go.etcd.io/etcd/etcdmain.Main()
        /tmp/etcd-release-3.4.13/etcd/release/etcd/etcdmain/main.go:46 +0x38
main.main()
        /tmp/etcd-release-3.4.13/etcd/release/etcd/main.go:28 +0x20

snap: snapshot file doesn’t exist
发现snap文件不存在,估计是意外断电导致的文件系统损坏或者遗失了

将备份的文件覆盖该目录文件即可,因为我没有备份,是在学习测试阶段,没啥重要东西,就直接删除了

删除后其他etcd节点会自动同步数据过来
单节点请谨慎

所有数据文件相关操作前请备份!!!

[root@k8s-master01 ~]# rm -rf /var/lib/etcd/member/snap/.*

重启kubelet服务,发现还是报错

[root@k8s-master01 wal]# systemctl restart kubelet.service 
[root@k8s-master01 wal]# kubectl get pod
The connection to the server 192.168.18.101:6443 was refused - did you specify the right host or port?

4、继续查看etcd容器日志,发现又有报错:

[root@k8s-master01 ~]# docker logs k8s_etcd_etcd-k8s-master01_kube-system_7a98aec14f1d812921d8b2f6c35fbbcc_27

[WARNING] Deprecated '--logger=capnslog' flag is set; use '--logger=zap' flag instead
2023-05-06 04:20:51.236303 I | etcdmain: etcd Version: 3.4.13
2023-05-06 04:20:51.236348 I | etcdmain: Git SHA: ae9734ed2
2023-05-06 04:20:51.236351 I | etcdmain: Go Version: go1.12.17
2023-05-06 04:20:51.236354 I | etcdmain: Go OS/Arch: linux/amd64
2023-05-06 04:20:51.236358 I | etcdmain: setting maximum number of CPUs to 4, total number of available CPUs is 4
2023-05-06 04:20:51.236409 N | etcdmain: the server is already initialized as member before, starting as etcd member...
[WARNING] Deprecated '--logger=capnslog' flag is set; use '--logger=zap' flag instead
2023-05-06 04:20:51.236456 I | embed: peerTLS: cert = /etc/kubernetes/pki/etcd/peer.crt, key = /etc/kubernetes/pki/etcd/peer.key, trusted-ca = /etc/kubernetes/pki/etcd/ca.crt, client-cert-auth = true, crl-file = 
2023-05-06 04:20:51.236926 I | embed: name = k8s-master01
2023-05-06 04:20:51.236947 I | embed: data dir = /var/lib/etcd
2023-05-06 04:20:51.236951 I | embed: member dir = /var/lib/etcd/member
2023-05-06 04:20:51.236953 I | embed: heartbeat = 100ms
2023-05-06 04:20:51.236954 I | embed: election = 1000ms
2023-05-06 04:20:51.236956 I | embed: snapshot count = 10000
2023-05-06 04:20:51.236962 I | embed: advertise client URLs = https://192.168.18.101:2379
2023-05-06 04:20:51.236964 I | embed: initial advertise peer URLs = https://192.168.18.101:2380
2023-05-06 04:20:51.236967 I | embed: initial cluster = 
2023-05-06 04:20:51.238833 W | wal: ignored file 0000000000000000-0000000000000000.wal.broken in wal
2023-05-06 04:20:51.238879 W | wal: ignored file 0000000000000004-000000000005dd9e.wal.broken in wal
2023-05-06 04:20:51.801126 W | wal: ignored file 0000000000000000-0000000000000000.wal.broken in wal
2023-05-06 04:20:51.801201 W | wal: ignored file 0000000000000004-000000000005dd9e.wal.broken in wal
2023-05-06 04:20:51.801254 C | etcdserver: open wal error: wal: file not found

etcdserver: open wal error: wal: file not found
发现找不到该文件walr

建议将备份的文件覆盖该目录文件,我就直接删除了

删除后其他etcd节点会自动同步数据过来
单节点请谨慎

所有数据文件相关操作前请备份!!!

[root@k8s-master01 ~]# rm -rf /var/lib/etcd/member/wal/*

5、重启kubelet,过一会发现可以正常使用了,容器服务也正常启动了

kubelet nodes not sync,k8s,docker,linux,运维,容器,kubernetes文章来源地址https://www.toymoban.com/news/detail-729070.html

到了这里,关于k8s无法正常启动使用,排查:etcd损坏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 验证K8S集群pod之间传输速度过慢,导致pod之间业务无法正常交互

    原因: K8S部署完成后,但是pod之间无法进行交互访问,导致pod异常 定位思路: 通过启动两个busybox容器,之间进行scp传输文件,验证pod之间tcp连接是否正常 解决方法: 运行第一个busybox 拷贝文件至busybox1 进入第一个busybox1 进入第二个busybox1 结论: 发现1K的文件可以相互拷贝

    2024年03月19日
    浏览(13)
  • K8S集群中Node节点资源不足导致Pod无法运行的故障排查思路

    故障一:Pod数量太多超出物理节点的限制 每一台Node节点中默认限制最多运行110个Pod资源,当一个应用程序有成百上千的Pod资源时,如果不扩容Node节点或者修改最大Pod数量限制,那么就会导致部分Pod资源无法正常运行,因为节点已经没有资源可以被调度了。 解决思路就是扩容

    2024年02月02日
    浏览(15)
  • k8s pod 无法启动一直ContainerCreating

    k8s pod 无法启动一直ContainerCreating

    查看详细信息如下 Failed to create pod sandbox: rpc error: code = Unknown desc = [failed to set up sandbox container “334d991a478b9640c66c67b46305122d7f0eefc98b2b4e671301f1981d9b9bc6” network for pod “yupay-vip-5c4bb7db5c-s6m52”: networkPlugin cni failed to set up pod “yupay-vip-5c4bb7db5c-s6m52_yupay” network: error getting ClusterInforma

    2024年04月28日
    浏览(7)
  • 0xc000007b应用程序无法正常启动,dll损坏

    这种有可能是运行库的问题,可能是有些dll损坏,也有可能是没注册(32位dll和64位有区别大家知道吧) 下载vc++运行库重装就行 我这里推荐个地址:VC运行库下载|最完整的微软VC运行库[VC++合集包]v2022.9下载-Win7系统之家 我之所以知道是因为我也经历过,我前几天打apex打不了,

    2024年02月15日
    浏览(9)
  • 【故障排查】VMware挂起后恢复,k8s集群无法ping/curl通pod/svc/ingress

    【故障排查】VMware挂起后恢复,k8s集群无法ping/curl通pod/svc/ingress

    一、master/node节点,去curl pod IP,一直卡着,没反应。timeout。 二、挂起恢复后,harbor服务无法正常访问503 ,需要重启harbor服务。 进容器curl localhost,是正常的。 而网络CNI 、flannel 、 coreDNS等都是running状态。 (发现restarts的次数有点多) .这里的metrics-server一直失败的。 可参考

    2023年04月17日
    浏览(8)
  • 华为手机不开机怎么办华为恢复出厂开机激活设备启动不了.提示您的设备芯片已损坏,无法正常使用维修相关服务解决方法

    华为手机不开机怎么办华为恢复出厂开机激活设备启动不了.提示您的设备芯片已损坏,无法正常使用维修相关服务解决方法

    您的设备芯片已损坏,无法正常使用.请前往华为官方服务门店获取维修相关服务恢复了出厂后,没手机验证进不了系统手机激活锁怎么注销.手机号不用了,华为手机恢复出厂设置,需要华为账号密码,怎么办.教你刷机解锁学会忘记密码后解锁成功开机用.芯片损坏怎么弄好恢复

    2024年02月04日
    浏览(13)
  • 主机重启后k8s kubelet无法自动启动问题解决梳理

    OS Version:CentOS Linux release 7.9.2009 (Core) K8S Version:Kubernetes v1.20.4 K8S安装配置完成后,重启服务器发现,kubelet没有正常启动(systemctl status kubelet) 命令: systemctl status kubelet 输入kubectl -n kube-system get pods命令,有如下报错: 命令: kubectl -n kube-system get pods 由于K8S的要求,在部署K8S的服

    2024年02月03日
    浏览(8)
  • k8s之etcd

    k8s之etcd

            etcd 是云原生架构中重要的基础组件。有如下特点: 简单:安装配置简单,而且提供了 HTTP API 进行交互,使用也很简单 键值对存储:将数据存储在分层组织的目录中,如同在标准文件系统中 监测变更:监测特定的键或目录以进行更改,并对值的更改做出反应 安

    2024年04月24日
    浏览(8)
  • k8s etcd 简介

    k8s etcd 简介

    Etcd是CoreOS基于Raft协议开发的分布式key-value存储,可用于服务发现、共享配置以及一致性保障(如数据库选主、分布式锁等)。 如,Etcd也可以作为微服务的注册中心,比如SpringCloud也基于ETCD实现了注册中心功能,可以替代earka,具体参考:Spring Cloud Etcd 在分布式系统中,如何

    2024年02月10日
    浏览(9)
  • Kubernetes(K8s)从入门到精通系列之十:使用 kubeadm 创建一个高可用 etcd 集群

    Kubernetes(K8s)从入门到精通系列之十:使用 kubeadm 创建一个高可用 etcd 集群

    默认情况下,kubeadm 在每个控制平面节点上运行一个本地 etcd 实例。也可以使用外部的 etcd 集群,并在不同的主机上提供 etcd 实例。 可以设置HA集群: 使用堆叠控制控制平面节点,其中 etcd 节点与控制平面节点共存 使用外部 etcd 节点,其中 etcd 在与控制平面不同的节点上运行

    2024年02月14日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包