我的 k8s 集群又双叒叕挂了😅

2023-08-14 15:10:50 +08:00
 BeautifulSoap

不知道自己的集群是第几次挂了😪而且每次总有不同的原因导致集群挂掉

这次是自己一台 2T 的服务器(主节点之一)剩余空间在低于 200G 的时候,触发了节点的 disk pressure ( k8s 默认剩余 10%就触发。。。。。)。然后这台服务器上所有 pods 状态都变为 Eviction 全部被驱逐,然后就成了 pod 被驱逐,又创建的循环。等注意到的时候,集群已经出现了 5000 多个 Eviction 的 pods 。( PS:这时候我的集群都还有反应

更改 kubelet 参数,将触发的限制从磁盘剩余 10%改成 10GiB 后本以为就恢复了,但是不知为什么更改之后集群直接就挂了( kubectl 提示服务未运行)。因为我是多主节点,于是连上另一台主节点想看看什么情况,另一台主节点上输入 kubectl get nodes 后直接卡死,没法获得信息,并且这台主节点机器还 cpu 占用 100%(得亏我这台主节点 vps 是跑在 OVH 上的,要是其他提供商这样占用 cpu 估计直接就把我机器封了)。说好的 k8s 多主节点高可用呢?怎么你一台主节点炸了整个集群都炸了?

然后看看 2T 的主节点执行 log ,似乎是 etcd 不明原因启动错误,折腾半天才好。自建 k8s 集群后这一年多最大感觉就是累感不爱,k8s 这东西的复杂真不是人类可以掌握,不是专心运维的话坑太多,这玩意存在在世上真的能让更多人变得幸福吗

6306 次点击
所在节点    程序员
46 条回复
BeautifulSoap
2023-08-14 21:59:10 +08:00
@flyqie 这贴主要是我的集群第 N 次挂了之后发个帖吐槽下,也不是想提问求助干嘛的。所以一些细节之类的就没说太严谨和清楚。如果是求助之类的话就会把 k3s 之类的明说了

@mogging 看了下 k8e 官网,原来就是基于 k3s 的,太好了,不用学新的工具了 oh yeah😇
charslee013
2023-08-14 23:53:16 +08:00
想起以前的一个冷笑话:”一个问题可以用多线程来解决,现在我们有两个问题了“ 🤪
Illusionary
2023-08-15 00:31:10 +08:00
跨公网部署 k8s 集群? etcd 对延迟敏感
cheng6563
2023-08-15 00:34:19 +08:00
k3s 用外部 MySQL 数据库,稳得一笔,对 MySQL 的备份手段都可以用来备份 k8s 。
vmlinz
2023-08-15 04:11:19 +08:00
你这个问题是因为你把 master nodes 拿来跑 workload 了。你至少应该让 master nodes 不要跑 app worlload 。不然就会出现 work node 遇到问题把 master nodes 拉垮的情况。😂。
vmlinz
2023-08-15 04:13:09 +08:00
就像 cloud k8s service ,都要分开运维 control plane 和 worker nodes 。
way2explore2
2023-08-15 07:03:13 +08:00
我的 k3s 平平稳稳跑了两年了

除了中间一次升级,下线了两个小时

SLI 99.98%
Hanggi
2023-08-15 09:23:10 +08:00
还是买个托管吧,花不了几个钱
maigebaoer
2023-08-15 09:43:16 +08:00
@charslee013 哈哈哈,够黑
gabon
2023-08-15 11:31:49 +08:00
我是把 k8s node 放到 esxi 中运行,然后用群晖 abb 定期快照,有问题直接 rollback 虚拟机。
nuII
2023-08-15 12:14:39 +08:00
k8s 的 master 高可用,必须 3 台以上才有意义,因为 2 台和 1 台的情况下,1 台都不能挂,3 台的情况下只能挂一台,4 台的时候也只能挂一台,所以外部 ETCD 是很必要的,但是这个难度就提高了。https://etcd.io/docs/v3.3/faq/#what-is-failure-tolerance ,总结就是没专业运维,只能写脚本定期导出自己的配置和定义 yaml ,出了问题铲掉集群直接 kubectl apply 一键重新应用,没专业运维别指望备份 etcd 能有用,出问题时更崩溃。
ccde8259
2023-08-15 12:52:03 +08:00
架构搞成双主确实有点问题……不过做 K8S 运维没有手撕过 etcd 是不完整的……
ch2
2023-08-15 13:27:39 +08:00
etcd 是 k8s 最薄弱的一环
huangliu
2023-08-15 15:07:58 +08:00
如果节点不是特别多,可以考虑用 docker swarm ,老是老了点,但是简单。楼上说的 k3s 也是可以的
shellcodecow
2023-08-15 15:37:12 +08:00
etcd 坏道后 每次会卡 ApiServer, 这东西 呸
vivisidea
2023-08-15 17:23:11 +08:00
@OceanBreeze +1 我们用的阿里云的专业版,一个月才 300 多,方便又好用,要啥运维。。

高可用是 master 至少 3 台,我们线上挂过一台,没啥问题,另外 cpu 、磁盘、内存、网络这些基础监控要搞起来
ysicing
2023-08-15 17:24:41 +08:00
我是组的 k3s 集群,存储在外部的 mysql 上就没这样的烦恼呢
BeautifulSoap
2023-08-15 19:01:36 +08:00
@Illusionary 其实没有跨公网,虽然不是同一个 vpc 但是 OVH 同一数据中心的机子,互相之间延迟只有 0.5ms

@vmlinz 我另一台主节点其实是没有跑工作负载的,但是跑负载的主节点挂了之后没跑负载的那个主节点也挂了

@nuII
@ccde8259
@vivisidea
多谢建议。我再加一两台主节点看看今后集群会不会更稳定。
不过就事论事,我觉得加主节对于这次集群挂了应该是没任何帮助的。
因为这次直到出现 5000 多个被驱逐的 pods 为止我的集群都是有反应而且能正常运作的。集群是我在修改有问题的节点配置,让节点恢复正常后才炸了的( etcd 错误)。我估计是有问题的主节点恢复后,etcd 里那残留的上千个 pods 直接拖垮了整个集群。这时候令一台主节点因为也同步了 etcd 也导致那台主节点也挂了。所以我感觉哪怕群里有超过 3 台主节点,只要所有主节点是同步了那个有问题的 etcd 的话集群还是要挂的。我后来是从正常时期的 etcd 的 snapshot 中恢复 etcd 才解决了问题。
BeautifulSoap
2023-08-15 19:09:32 +08:00
@vivisidea
@Hanggi
我 2L 就说了,个人的集群买托管真的太贵了。公司的话肯定上云服务的托管。
我帖子里说的那台服务器( 4c/8t-32G-2TSSD )一个月也才$15 ,集群托管再便宜一个月总没有$10 以下的吧,而且我也就十几台 vps 和服务器。。。。真有很便宜白托管的话我倒是愿意试试
juzisang
2023-08-15 19:26:22 +08:00
我反复入坑 k8s ,也是用 k3s 建的集群,也出现过 pod 挂了,重启建了几千个 pod ,删了重建过好多次...
最好发现个人还是 docker swarm 好使,轻量的配置文件用 docker secrets 或 config 也够用了,配置文件比 k8s 简单直观

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/965138

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX