不知道自己的集群是第几次挂了😪而且每次总有不同的原因导致集群挂掉
这次是自己一台 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 这东西的复杂真不是人类可以掌握,不是专心运维的话坑太多,这玩意存在在世上真的能让更多人变得幸福吗
1
OceanBreeze 2023-08-14 15:13:26 +08:00
不是专业运维,用云服务的版本不好么
|
2
BeautifulSoap OP @OceanBreeze 这是我个人的 n 台服务器/vps 组的集群,用来跑各种 bt/梯子/自建网盘的。云服务的 k8s 托管费用太高不至于上
|
3
choury 2023-08-14 15:20:14 +08:00
etcd 挂了,请求肯定卡死了,cpu 满了要看是那个进程占用的,如果是 apiserver 的话,应该要限制下 qps ,防止这种情况下各种请求无脑重试
|
4
yulgang 2023-08-14 15:33:57 +08:00 1
|
5
BeautifulSoap OP @yulgang 😭
|
6
Abirdcfly 2023-08-14 16:08:49 +08:00 10
|
7
proxychains 2023-08-14 17:11:26 +08:00 4
@Abirdcfly but no 'H' found in 'kubernetes' :(
|
8
azusematsuri 2023-08-14 18:37:13 +08:00 via Android
自建 k8s 运维练手攒攒经验挺好的
不过你这个需求实在是杀鸡用牛刀了 |
9
ExplodingFKL 2023-08-14 19:15:14 +08:00
不上监控的吗? prometheus 、alertmanager 搞起来
|
10
doublemine 2023-08-14 19:36:07 +08:00 via Android
阁下可曾听过 k3s ?
|
11
jecvay 2023-08-14 19:40:09 +08:00
很有趣啊 lz, 感谢分享
|
12
arloor 2023-08-14 21:00:20 +08:00
@doublemine k3s 真的很香,文档也很好(英文文档)
|
13
BeautifulSoap OP @doublemine 我集群就是用 k3s 建的😈
|
14
zzl22100048 2023-08-14 21:12:25 +08:00
我这节点挂了就直接删掉重建。。。
用 autok3s 管理的 |
15
BeautifulSoap OP @azusematsuri 不是专心运维用 k8s 真的太多细节和坑了。自己是 n 台机子要建梯子,网站,挂 bt ,网盘之类的,最开始用的 docker 手动一台台跑,实在太麻烦了而且经常有机子失联并且涉及到证书管理都非常麻烦,就直接上了 k8s 。于是进了另一个坑
。。。 @ExplodingFKL 个人用来说我对监控的必要性还是有点怀疑的,主要是个人使用的时候很多问题不是监控就能解决的问题。比如这次发生问题的原因是我在 bt 里下了一个合计 1.7TB 的种子,下完后服务器硬盘只剩不到 200GB ,然后集群服务直接暴毙。 |
16
flyqie 2023-08-14 21:19:07 +08:00
所以你到底用的是 K8S 还是 K3S ?
|
17
BeautifulSoap OP @flyqie 用 k3s 建的 k8s 集群啊。而且"K3s - Lightweight Kubernetes" ,人家 k3s 官网自己就这么自居的
|
18
flyqie 2023-08-14 21:32:03 +08:00
|
19
mogging 2023-08-14 21:46:14 +08:00 via Android
K8E 也不错,之前一个讲师开发的
|
20
ysicing 2023-08-14 21:46:21 +08:00
k3s + mysql 就很稳哈哈哈
|
21
BeautifulSoap OP |
22
charslee013 2023-08-14 23:53:16 +08:00
想起以前的一个冷笑话:”一个问题可以用多线程来解决,现在我们有两个问题了“ 🤪
|
23
Illusionary 2023-08-15 00:31:10 +08:00 via iPhone
跨公网部署 k8s 集群? etcd 对延迟敏感
|
24
cheng6563 2023-08-15 00:34:19 +08:00
k3s 用外部 MySQL 数据库,稳得一笔,对 MySQL 的备份手段都可以用来备份 k8s 。
|
25
vmlinz 2023-08-15 04:11:19 +08:00 via iPhone
你这个问题是因为你把 master nodes 拿来跑 workload 了。你至少应该让 master nodes 不要跑 app worlload 。不然就会出现 work node 遇到问题把 master nodes 拉垮的情况。😂。
|
26
vmlinz 2023-08-15 04:13:09 +08:00 via iPhone
就像 cloud k8s service ,都要分开运维 control plane 和 worker nodes 。
|
27
way2explore2 2023-08-15 07:03:13 +08:00
我的 k3s 平平稳稳跑了两年了
除了中间一次升级,下线了两个小时 SLI 99.98% |
28
Hanggi 2023-08-15 09:23:10 +08:00
还是买个托管吧,花不了几个钱
|
29
maigebaoer 2023-08-15 09:43:16 +08:00 via Android
@charslee013 哈哈哈,够黑
|
30
gabon 2023-08-15 11:31:49 +08:00 via iPhone
我是把 k8s node 放到 esxi 中运行,然后用群晖 abb 定期快照,有问题直接 rollback 虚拟机。
|
31
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 能有用,出问题时更崩溃。
|
32
ccde8259 2023-08-15 12:52:03 +08:00 via iPhone
架构搞成双主确实有点问题……不过做 K8S 运维没有手撕过 etcd 是不完整的……
|
33
ch2 2023-08-15 13:27:39 +08:00
etcd 是 k8s 最薄弱的一环
|
34
huangliu 2023-08-15 15:07:58 +08:00
如果节点不是特别多,可以考虑用 docker swarm ,老是老了点,但是简单。楼上说的 k3s 也是可以的
|
35
shellcodecow 2023-08-15 15:37:12 +08:00
etcd 坏道后 每次会卡 ApiServer, 这东西 呸
|
36
vivisidea 2023-08-15 17:23:11 +08:00
@OceanBreeze +1 我们用的阿里云的专业版,一个月才 300 多,方便又好用,要啥运维。。
高可用是 master 至少 3 台,我们线上挂过一台,没啥问题,另外 cpu 、磁盘、内存、网络这些基础监控要搞起来 |
37
ysicing 2023-08-15 17:24:41 +08:00
我是组的 k3s 集群,存储在外部的 mysql 上就没这样的烦恼呢
|
38
BeautifulSoap OP @Illusionary 其实没有跨公网,虽然不是同一个 vpc 但是 OVH 同一数据中心的机子,互相之间延迟只有 0.5ms
@vmlinz 我另一台主节点其实是没有跑工作负载的,但是跑负载的主节点挂了之后没跑负载的那个主节点也挂了 @nuII @ccde8259 @vivisidea 多谢建议。我再加一两台主节点看看今后集群会不会更稳定。 不过就事论事,我觉得加主节对于这次集群挂了应该是没任何帮助的。 因为这次直到出现 5000 多个被驱逐的 pods 为止我的集群都是有反应而且能正常运作的。集群是我在修改有问题的节点配置,让节点恢复正常后才炸了的( etcd 错误)。我估计是有问题的主节点恢复后,etcd 里那残留的上千个 pods 直接拖垮了整个集群。这时候令一台主节点因为也同步了 etcd 也导致那台主节点也挂了。所以我感觉哪怕群里有超过 3 台主节点,只要所有主节点是同步了那个有问题的 etcd 的话集群还是要挂的。我后来是从正常时期的 etcd 的 snapshot 中恢复 etcd 才解决了问题。 |
39
BeautifulSoap OP |
40
juzisang 2023-08-15 19:26:22 +08:00
我反复入坑 k8s ,也是用 k3s 建的集群,也出现过 pod 挂了,重启建了几千个 pod ,删了重建过好多次...
最好发现个人还是 docker swarm 好使,轻量的配置文件用 docker secrets 或 config 也够用了,配置文件比 k8s 简单直观 |
41
juzisang 2023-08-15 19:33:10 +08:00
docker 主要是很轻量可控,不像 K8S 的 helm chart ,单单配置文件就出奇的复杂,而且用 k8s ,很多库都默认你要高可用,提供的配置极度占资源,各种概念也层出不穷,版本也眼花缭乱。最主要的还是很难把控,部署个外部应用很简单啊,一行代码搞定,鬼知道后面的 yaml 成千上百行,出问题根本不知道啥导致的,只能删了重建。
|
42
flyqie 2023-08-15 19:36:35 +08:00 via Android
|
43
rnyrnyrny 2023-08-15 19:44:52 +08:00
1. 关掉磁盘空间导致的驱逐
`/etc/rancher/k3s/config.yaml` ``` kubelet-arg: - "eviction-hard=" ``` 2. 多 master 其实不一定有用,一个出了问题,其他 master 的负载会变的很高,导致服务卡死。有时候一台稳定的机器可能更好。。 3. 最好用专门的 master 节点,不要跑别的服务了(成本也上去了) PS 自建的 k3s 集群目前有 20 台 VPS ,快乐是真的快乐 |
44
ExplodingFKL 2023-08-16 08:59:21 +08:00
@BeautifulSoap #15 监控的意义主要是预警,像楼主这种情况完全可以在 node 磁盘占用到 80 % 告警并通知手动处理,避免集群完全宕机后再去做灾难恢复
|
45
chf007 2023-08-16 13:50:39 +08:00
用 rk2 + rancher 在公司搭了个测试环境,由于是跑在虚拟机里的,公司断了 2 次电,etcd 必挂,rk2 起不来。由于没有专门的运维,心累,后来直接上阿里云 ACK 了,省心多了,就是成本有点高
|
46
BeautifulSoap OP @ExplodingFKL 你如果看了我主贴的话应该能注意到,我的集群并没有因为磁盘空间不够发生宕机,宕机是发生在我调整节点设置让被驱逐的节点正常上线之后。而且这次是我下了个 1.7T 多的种子,bt 软件直接预分配了 1.7T 磁盘空间,因为是 ssd 硬盘所以基本不给你反应时间,即便有剩余空间告警也是束手无策的。只能说有告警我能早点注意到,但问题发生依旧会发生
|