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

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

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

    腾讯云最新优惠活动来了:云产品限时1折,云服务器低至88元/年 ,点击这里立即抢购:9i0i.cn/qcloud,更有2860元代金券免费领取,付款直接抵现金用,点击这里立即领取:9i0i.cn/qcloudquan

    (福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

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

    这次是自己一台 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  
       273 天前
    不是专业运维,用云服务的版本不好么
    BeautifulSoap
        2
    BeautifulSoap  
    OP
       273 天前
    @OceanBreeze 这是我个人的 n 台服务器/vps 组的集群,用来跑各种 bt/梯子/自建网盘的。云服务的 k8s 托管费用太高不至于上
    choury
        3
    choury  
       273 天前
    etcd 挂了,请求肯定卡死了,cpu 满了要看是那个进程占用的,如果是 apiserver 的话,应该要限制下 qps ,防止这种情况下各种请求无脑重试
    yulgang
        4
    yulgang  
       273 天前   ?? 1



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

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

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

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

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

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

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

    高可用是 master 至少 3 台,我们线上挂过一台,没啥问题,另外 cpu 、磁盘、内存、网络这些基础监控要搞起来
    ysicing
        37
    ysicing  
       272 天前
    我是组的 k3s 集群,存储在外部的 mysql 上就没这样的烦恼呢
    BeautifulSoap
        38
    BeautifulSoap  
    OP
       272 天前 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
       272 天前 via Android
    @vivisidea
    @Hanggi
    我 2L 就说了,个人的集群买托管真的太贵了。公司的话肯定上云服务的托管。
    我帖子里说的那台服务器( 4c/8t-32G-2TSSD )一个月也才$15 ,集群托管再便宜一个月总没有$10 以下的吧,而且我也就十几台 vps 和服务器。。。。真有很便宜白托管的话我倒是愿意试试
    juzisang
        40
    juzisang  
       272 天前
    我反复入坑 k8s ,也是用 k3s 建的集群,也出现过 pod 挂了,重启建了几千个 pod ,删了重建过好多次...
    最好发现个人还是 docker swarm 好使,轻量的配置文件用 docker secrets 或 config 也够用了,配置文件比 k8s 简单直观
    juzisang
        41
    juzisang  
       272 天前
    docker 主要是很轻量可控,不像 K8S 的 helm chart ,单单配置文件就出奇的复杂,而且用 k8s ,很多库都默认你要高可用,提供的配置极度占资源,各种概念也层出不穷,版本也眼花缭乱。最主要的还是很难把控,部署个外部应用很简单啊,一行代码搞定,鬼知道后面的 yaml 成千上百行,出问题根本不知道啥导致的,只能删了重建。
    flyqie
        42
    flyqie  
       272 天前 via Android
    @juzisang #41

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

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

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


    http://www.vxiaotou.com