V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
BeautifulSoap
V2EX  ›  程序员

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

  •  1
     
  •   BeautifulSoap · 257 天前 · 5827 次点击
    这是一个创建于 257 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    这次是自己一台 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 这东西的复杂真不是人类可以掌握,不是专心运维的话坑太多,这玩意存在在世上真的能让更多人变得幸福吗

    46 条回复    2023-08-16 14:37:39 +08:00
    OceanBreeze
        1
    OceanBreeze  
       257 天前
    不是专业运维,用云服务的版本不好么
    BeautifulSoap
        2
    BeautifulSoap  
    OP
       257 天前
    @OceanBreeze 这是我个人的 n 台服务器/vps 组的集群,用来跑各种 bt/梯子/自建网盘的。云服务的 k8s 托管费用太高不至于上
    choury
        3
    choury  
       257 天前
    etcd 挂了,请求肯定卡死了,cpu 满了要看是那个进程占用的,如果是 apiserver 的话,应该要限制下 qps ,防止这种情况下各种请求无脑重试
    yulgang
        4
    yulgang  
       257 天前   ❤️ 1



    😁
    BeautifulSoap
        5
    BeautifulSoap  
    OP
       257 天前
    @yulgang 😭
    Abirdcfly
        6
    Abirdcfly  
       257 天前   ❤️ 10
    proxychains
        7
    proxychains  
       257 天前   ❤️ 4
    @Abirdcfly but no 'H' found in 'kubernetes' :(
    azusematsuri
        8
    azusematsuri  
       257 天前 via Android
    自建 k8s 运维练手攒攒经验挺好的
    不过你这个需求实在是杀鸡用牛刀了
    ExplodingFKL
        9
    ExplodingFKL  
       257 天前
    不上监控的吗? prometheus 、alertmanager 搞起来
    doublemine
        10
    doublemine  
       257 天前 via Android
    阁下可曾听过 k3s ?
    jecvay
        11
    jecvay  
       257 天前
    很有趣啊 lz, 感谢分享
    arloor
        12
    arloor  
       257 天前
    @doublemine k3s 真的很香,文档也很好(英文文档)
    BeautifulSoap
        13
    BeautifulSoap  
    OP
       257 天前 via Android
    @doublemine 我集群就是用 k3s 建的😈
    zzl22100048
        14
    zzl22100048  
       257 天前
    我这节点挂了就直接删掉重建。。。
    用 autok3s 管理的
    BeautifulSoap
        15
    BeautifulSoap  
    OP
       257 天前 via Android
    @azusematsuri 不是专心运维用 k8s 真的太多细节和坑了。自己是 n 台机子要建梯子,网站,挂 bt ,网盘之类的,最开始用的 docker 手动一台台跑,实在太麻烦了而且经常有机子失联并且涉及到证书管理都非常麻烦,就直接上了 k8s 。于是进了另一个坑
    。。。

    @ExplodingFKL 个人用来说我对监控的必要性还是有点怀疑的,主要是个人使用的时候很多问题不是监控就能解决的问题。比如这次发生问题的原因是我在 bt 里下了一个合计 1.7TB 的种子,下完后服务器硬盘只剩不到 200GB ,然后集群服务直接暴毙。
    flyqie
        16
    flyqie  
       257 天前
    所以你到底用的是 K8S 还是 K3S ?
    BeautifulSoap
        17
    BeautifulSoap  
    OP
       257 天前
    @flyqie 用 k3s 建的 k8s 集群啊。而且"K3s - Lightweight Kubernetes" ,人家 k3s 官网自己就这么自居的
    flyqie
        18
    flyqie  
       257 天前
    @BeautifulSoap #16

    懂了,个人很少接触到这种说法。。

    身边接触到的 K8S 基本指的都是单纯的 K8S 软件,并没指 K8S 体系。。
    mogging
        19
    mogging  
       257 天前 via Android
    K8E 也不错,之前一个讲师开发的
    ysicing
        20
    ysicing  
       257 天前
    k3s + mysql 就很稳哈哈哈
    BeautifulSoap
        21
    BeautifulSoap  
    OP
       257 天前
    @flyqie 这贴主要是我的集群第 N 次挂了之后发个帖吐槽下,也不是想提问求助干嘛的。所以一些细节之类的就没说太严谨和清楚。如果是求助之类的话就会把 k3s 之类的明说了

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

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

    SLI 99.98%
    Hanggi
        28
    Hanggi  
       256 天前
    还是买个托管吧,花不了几个钱
    maigebaoer
        29
    maigebaoer  
       256 天前 via Android
    @charslee013 哈哈哈,够黑
    gabon
        30
    gabon  
       256 天前 via iPhone
    我是把 k8s node 放到 esxi 中运行,然后用群晖 abb 定期快照,有问题直接 rollback 虚拟机。
    nuII
        31
    nuII  
       256 天前
    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
        32
    ccde8259  
       256 天前 via iPhone
    架构搞成双主确实有点问题……不过做 K8S 运维没有手撕过 etcd 是不完整的……
    ch2
        33
    ch2  
       256 天前
    etcd 是 k8s 最薄弱的一环
    huangliu
        34
    huangliu  
       256 天前
    如果节点不是特别多,可以考虑用 docker swarm ,老是老了点,但是简单。楼上说的 k3s 也是可以的
    shellcodecow
        35
    shellcodecow  
       256 天前
    etcd 坏道后 每次会卡 ApiServer, 这东西 呸
    vivisidea
        36
    vivisidea  
       256 天前
    @OceanBreeze +1 我们用的阿里云的专业版,一个月才 300 多,方便又好用,要啥运维。。

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

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

    @nuII
    @ccde8259
    @vivisidea
    多谢建议。我再加一两台主节点看看今后集群会不会更稳定。
    不过就事论事,我觉得加主节对于这次集群挂了应该是没任何帮助的。
    因为这次直到出现 5000 多个被驱逐的 pods 为止我的集群都是有反应而且能正常运作的。集群是我在修改有问题的节点配置,让节点恢复正常后才炸了的( etcd 错误)。我估计是有问题的主节点恢复后,etcd 里那残留的上千个 pods 直接拖垮了整个集群。这时候令一台主节点因为也同步了 etcd 也导致那台主节点也挂了。所以我感觉哪怕群里有超过 3 台主节点,只要所有主节点是同步了那个有问题的 etcd 的话集群还是要挂的。我后来是从正常时期的 etcd 的 snapshot 中恢复 etcd 才解决了问题。
    BeautifulSoap
        39
    BeautifulSoap  
    OP
       256 天前 via Android
    @vivisidea
    @Hanggi
    我 2L 就说了,个人的集群买托管真的太贵了。公司的话肯定上云服务的托管。
    我帖子里说的那台服务器( 4c/8t-32G-2TSSD )一个月也才$15 ,集群托管再便宜一个月总没有$10 以下的吧,而且我也就十几台 vps 和服务器。。。。真有很便宜白托管的话我倒是愿意试试
    juzisang
        40
    juzisang  
       256 天前
    我反复入坑 k8s ,也是用 k3s 建的集群,也出现过 pod 挂了,重启建了几千个 pod ,删了重建过好多次...
    最好发现个人还是 docker swarm 好使,轻量的配置文件用 docker secrets 或 config 也够用了,配置文件比 k8s 简单直观
    juzisang
        41
    juzisang  
       256 天前
    docker 主要是很轻量可控,不像 K8S 的 helm chart ,单单配置文件就出奇的复杂,而且用 k8s ,很多库都默认你要高可用,提供的配置极度占资源,各种概念也层出不穷,版本也眼花缭乱。最主要的还是很难把控,部署个外部应用很简单啊,一行代码搞定,鬼知道后面的 yaml 成千上百行,出问题根本不知道啥导致的,只能删了重建。
    flyqie
        42
    flyqie  
       256 天前 via Android
    @juzisang #41

    k8s 似乎最开始定位就是企业级吧。

    所以对高可用要求挺高,个人用的话,有些高可用确实没必要。。服务爆炸了也不会有啥特别大的问题。
    rnyrnyrny
        43
    rnyrnyrny  
       256 天前
    1. 关掉磁盘空间导致的驱逐
    `/etc/rancher/k3s/config.yaml`
    ```
    kubelet-arg:
    - "eviction-hard="
    ```
    2. 多 master 其实不一定有用,一个出了问题,其他 master 的负载会变的很高,导致服务卡死。有时候一台稳定的机器可能更好。。
    3. 最好用专门的 master 节点,不要跑别的服务了(成本也上去了)

    PS
    自建的 k3s 集群目前有 20 台 VPS ,快乐是真的快乐
    ExplodingFKL
        44
    ExplodingFKL  
       255 天前
    @BeautifulSoap #15 监控的意义主要是预警,像楼主这种情况完全可以在 node 磁盘占用到 80 % 告警并通知手动处理,避免集群完全宕机后再去做灾难恢复
    chf007
        45
    chf007  
       255 天前
    用 rk2 + rancher 在公司搭了个测试环境,由于是跑在虚拟机里的,公司断了 2 次电,etcd 必挂,rk2 起不来。由于没有专门的运维,心累,后来直接上阿里云 ACK 了,省心多了,就是成本有点高
    BeautifulSoap
        46
    BeautifulSoap  
    OP
       255 天前
    @ExplodingFKL 你如果看了我主贴的话应该能注意到,我的集群并没有因为磁盘空间不够发生宕机,宕机是发生在我调整节点设置让被驱逐的节点正常上线之后。而且这次是我下了个 1.7T 多的种子,bt 软件直接预分配了 1.7T 磁盘空间,因为是 ssd 硬盘所以基本不给你反应时间,即便有剩余空间告警也是束手无策的。只能说有告警我能早点注意到,但问题发生依旧会发生
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   887 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:29 · PVG 04:29 · LAX 13:29 · JFK 16:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.