我就纳了闷了,为啥总是看见 n 个一个环境就是一个 K8S 集群 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sampeng
V2EX    Kubernetes

我就纳了闷了,为啥总是看见 n 个一个环境就是一个 K8S 集群

  •  
  •   sampeng 2023-03-30 09:17:20 +08:00 6847 次点击
    这是一个创建于 930 天前的主题,其中的信息可能已经有所发展或是发生改变。
    做运维到现在 5 年多了。去一个公司以看就一个环境一个 k8s 集群。再进去看看,一个业务 namespace+一个 kube-system 。
    上一个东家。20 个集群。每个集群 20-30 个 pod ,线下物理机
    现在这一家。我进来的时候 15 个集群。每个集群不到 10 个 pod 。而且是云上。最近被我干掉只剩 6 个了,一个产品一个环境一个。线上和 staging 的不是太好动,得找时间找机会做迁移。

    应该不是我运气背,感觉是个普遍线上。难道学 k8s 得都是不知道亲和性和节点选择器的?这是偷懒还是就是懒得学?我说我一面是基本都是 yaml enginer 。也就会写个 deployment ,svc 之类的。再问细点就一问三不知了。比如 requests 和 limit 的区别,问 10 个 9 个答不出来。。

    不是,k8s 的官方文档就在那放着啊。好歹看看最基础的字段是干嘛用的吧?
    第 1 条附言    2023-03-30 12:53:28 +08:00
    哦。补充一下。以免引起争论。staging 和 prod 还有开发测试环境在资源允许得情况下,确实是 3 个不同得集群比较稳妥。

    但我想说得多环境是,你们只有这 3 个环境么?一个公司最少 2-3 个产品线吧。每个产品线有自己得研发测试分支吧?这些总不能在一个环境下吧?最多得是这个最离谱。假设是 3 个产品线。并线开发和测试 2 个版本.就是 3*2*2=12 个环境。。我整个人都裂开了
    54 条回复    2023-04-02 10:48:38 +08:00
    saka0609
        1
    saka0609  
       2023-03-30 09:21:10 +08:00
    没看懂在说什么。。一个业务一个 namespace 我觉得很正常啊,和亲和性有什么关系。。
    julyclyde
        2
    julyclyde  
       2023-03-30 09:25:14 +08:00
    可能是为了隔离吧,dev/prod 如果混用同一个集群,万一互相访问了就糟糕了
    ql562482472
        3
    ql562482472  
       2023-03-30 09:32:58 +08:00
    确实感觉很多东西都是半懂不懂的人弄出来的 先弄出来用 用着用着就成了事实状态了 改也不好改
    lff0305
        4
    lff0305  
       2023-03-30 09:33:38 +08:00
    1. 懒;
    2. 不同的业务或者产品线用不同的账号来控制权限或者账单,自然就不能用一个集群
    3. 某些客户有数据安全性的要求

    感觉至少 80%是 1
    james2013
        5
    james2013  
       2023-03-30 09:43:15 +08:00
    开发环境或者测试环境你迁移也算了
    线上环境你还准备找机会迁移,迁移成功了是分内的事情,没有什么好处,一旦线上环境出大问题,严重的话就直接把你开除了
    gvdlmjwje
        6
    gvdlmjwje  
       2023-03-30 09:48:12 +08:00
    同意 LS ,你问过你领导么 说迁就迁。。。这不好吧
    cstj0505
        7
    cstj0505  
       2023-03-30 09:48:32 +08:00
    @james2013 工作量啊,那你我把原来混乱的局面改变了,是不是得升职加薪了了,哈哈
    统一化是一门大学问
    ElmerZhang
        8
    ElmerZhang  
       2023-03-30 09:51:06 +08:00
    不懂就问,这样搞好多集群的缺点是什么?
    geekyouth
        9
    geekyouth  
       2023-03-30 09:51:35 +08:00 via Android   19
    我觉得你的表达能力有待提升
    wqzjk393
        10
    wqzjk393  
       2023-03-30 09:55:37 +08:00 via iPhone
    感觉很多时候都是老板要求强上的…
    swulling
        11
    swulling  
       2023-03-30 09:56:56 +08:00
    Kubernetes 的多租户本身就有两种方案:多命名空间和多集群。

    其中因为 K8s 自身在多租户和权限控制方面做的其实不是很好,普通公司没有办法自己搞一套管理面,所以不如多集群方便。

    而多集群方案又分为:

    - 共享控制面方案:apiserver/scheduler/controller-manager 统一部署,每个集群只有 node 是单独部署的,node 可以直接购买 VM 。好处是节约控制节点资源,计算节点资源隔离

    - VirtualNode 方案:为了解决 node 独占带来的资源浪费,使用共享控制面 + VirtualNode 。这种方案也是我认为在云上最好的方案。同时也可以结合独占 Node ,特别灵活。

    - ClusterInCluster:搞一个母集群,然后虚拟出多个子集群(每个 namespace 虚拟出一个子集群),好处是子集群之间可以共享节点,提高资源利用率。


    如果一年前,我支持多 namespace 方案,但是现在,我支持多集群方案。
    swulling
        12
    swulling  
       2023-03-30 09:58:31 +08:00
    另外补充下,K8s 的部分资源其实是全局的,多 namespace 方案很麻烦。
    rrfeng
        13
    rrfeng  
       2023-03-30 10:00:57 +08:00
    想要物理隔离呗,故障区域减小。

    话说 node 要是可以绑定 namespace 就好了。
    coderxy
        14
    coderxy  
       2023-03-30 10:12:05 +08:00
    @rrfeng node 不能绑定 ns ,但是 node 可以设置亲和性,然后给某个 ns 的 pod 都设置某个亲和性标签,就能实现这个 ns 的 pod 都在某几个 Node 上了
    rrfeng
        15
    rrfeng  
       2023-03-30 10:23:29 +08:00
    @coderxy 我们就是这么干的,但是如果 ns 能够自动完成这个事情不是更好么。
    lqy2575395
        16
    lqy2575395  
       2023-03-30 10:29:28 +08:00
    隔离啊,至少测试 /线上肯定要分开啊,光节点隔离又不完全,测试环境给你整点活,把集群负载搞卡了也不是不可能发生,版本升级也能拿小集群先升级看看。
    coolcoffee
        17
    coolcoffee  
       2023-03-30 10:30:15 +08:00
    如果不根据环境拆集群,测试环境想要升级 K8S 版本难道要把生产环境的节点组也一同升级? 万一因为验证测试新特性,然后出现 CoreDNS 或者 CNI Network 故障,也是一并把生产环境带崩?
    coderxy
        18
    coderxy  
       2023-03-30 10:35:54 +08:00
    @rrfeng 你可以给 k8s 提 PR 哈哈。 不过一般来说有亲和性已经够了,而且亲和性更灵活。
    dolphintwo
        19
    dolphintwo  
       2023-03-30 10:36:08 +08:00
    你就说能不能用吧
    fengye0509
        20
    fengye0509  
       2023-03-30 10:57:16 +08:00
    requests 和 limit 有什么好说的,资源请求与限制,多环境多集群不是很正常吗? ns 区分项目
    节点亲和性可以用大节点跑重服务,反亲和性可以用来限制多个 pod 跑在同一节点
    dreamramon
        21
    dreamramon  
       2023-03-30 10:57:18 +08:00
    肯定要隔离啊,测试环境如果给你搞点活,一下把生产的资源都给你占满了,如果造成了损失,谁来买单。。。
    sampeng
        22
    sampeng  
    OP
       2023-03-30 12:49:16 +08:00 via iPhone
    @rrfeng 对啊…我也是这么干的…一个配置而已…再不济辛苦点,每个服务写一下亲和性
    sampeng
        23
    sampeng  
    OP
       2023-03-30 12:50:05 +08:00 via iPhone
    @coderxy 不要拿无知质疑别人的做法。这是官方插件只是再低版本下没启用
    sampeng
        24
    sampeng  
    OP
       2023-03-30 12:56:26 +08:00
    @swulling 您解释得挺好得,我也比较同意在你这个语境下得情况。

    只是大多数就一个团队,研发也就十来个人。谈不上管理控制面。而且现在大把得开源 or 收费得 dashboard 解决方案。接入 ad 或者账号系统就解决了。namespace 方案对于运维而言是友好得。多一个集群多一个维护成本。而且资源利用率低得发指
    sampeng
        25
    sampeng  
    OP
       2023-03-30 12:58:34 +08:00
    @rrfeng 云端可能没启用这个插件。我机房得是启用了得。。那是相当得舒适。其实就是自动修改 pod 得亲和性。自己得空写个注入得 webhook 也能实现
    sampeng
        26
    sampeng  
    OP
       2023-03-30 13:02:42 +08:00
    @fengye0509 还真有好说得。仅仅是资源请求和限制?多少请求是合适得,多少限制是合适得。怎么通过数据来体现。request 和 limit 转换成 docker 在宿主机看起来是怎么一个限制逻辑? request 为什么不能超过 100%。limit 反而可以?数值大小是否影响调度。

    当然我一开始也是不懂得。。。后来我们做了一个功能,要晚上重建环境。删除所有的 pod 。白天再启动起来。因为对 request 和 limit 得理解不到位。100 来个 java 得 pod 启动瞬间直接干死几台物理机。狠狠得补了一下课
    sampeng
        27
    sampeng  
    OP
       2023-03-30 13:10:45 +08:00
    @rrfeng

    是上家公司得时候配得,就没找到配置了。是根据这个上面提到得插件。开启一下就好了。。。

    https://stackoverflow.com/questions/52487333/how-to-assign-a-namespace-to-certain-nodes

    哦。阿里云得也有,我想起来了。一时半会找不到了
    sampeng
        28
    sampeng  
    OP
       2023-03-30 13:14:25 +08:00
    @dolphintwo 也是。。又不是不能用
    pepesii
        29
    pepesii  
       2023-03-30 13:24:32 +08:00
    如果没有专门的人来运维 k8s 集群,不把鸡蛋放一个篮子也是一种选择。如果 k8s 本身的某些组件挂了,在这种情况下,影响能降低到最低。
    老板不要求降本增效,研发团队用的舒服就行,合适的,就是最好的。
    sampeng
        30
    sampeng  
    OP
       2023-03-30 13:59:02 +08:00 via iPhone
    @pepesii 同意你的观点,从这个角度出发时 ok 的
    iloveayu
        31
    iloveayu  
       2023-03-30 14:05:40 +08:00
    是这样的能跑就行,需要请专业运维来做事时,一定是他们的 infra 已经一坨屎,开发自己搞不定了。
    rrfeng
        32
    rrfeng  
       2023-03-30 14:54:21 +08:00
    @sampeng 看起来是原生支持的
    swulling
        33
    swulling  
       2023-03-30 15:44:28 +08:00
    @sampeng 嗯,租户=Team

    一个 Team 在同一个 Region 的同一个 Stage (比如生产)最好只有一套环境
    chronos
        34
    chronos  
       2023-03-30 15:45:13 +08:00
    我一般生产环境的强隔离上单独的集群。至于开发和测试环境嘛,能省则省,资源共用,用 namespace 做逻辑隔离,配合亲和性和 request 、limit 处理就行。
    xuanbg
        35
    xuanbg  
       2023-03-30 15:53:51 +08:00
    生产环境肯定是要独立的吧?测试和开发我们是一个环境。所以,我们就两个集群。不管什么业务,都往一个集群里面怼。要辣么多集群做什么,平白无故占用资源,而且管理起来也麻烦。
    optional
        36
    optional  
       2023-03-30 16:51:18 +08:00 via iPhone
    按照一台物理服务器 10w ,10 台也就 100w 的预算,还要按照三年或者五年折算。现在一个高级的开发,一年至少 100w 的预算,10 个就是 1000w 。 数据的价值更难以衡量,你觉得统一大集群的好处是什么
    optional
        37
    optional  
       2023-03-30 16:53:07 +08:00 via iPhone
    至于运维的成本,维护最好自动化脚本,发布做好 cicd ,再加上监控,多几个集群,运维没多少工作量的。
    57L49t45Jo9IJvge
        38
    57L49t45Jo9IJvge  
       2023-03-30 17:06:05 +08:00
    纠结这些干啥 线上稳了 其他都是浮云
    salmon5
        39
    salmon5  
       2023-03-30 17:42:18 +08:00
    一个大产品线,严格的,dev,qa,stag,prod 4 套集群
    宽松的,dev-qa-stag,prod ,2 套集群
    也有业务维度分,某些团队专用集群,这个都是合理的,
    当然 RBAC 可以控制,但是 RBAC 沟通成本高
    salmon5
        40
    salmon5  
       2023-03-30 17:44:15 +08:00
    成本的维度,集群本身成本还好,node 成本高
    salmon5
        41
    salmon5  
       2023-03-30 17:45:47 +08:00
    当然也看有没有容器 infra 的人力投入,没有容器 infra 人力投入,怎么省事沟通成本低怎么来
    Nnq
        42
    Nnq  
       2023-03-30 19:43:58 +08:00
    看你的描述,感觉之前是通过不同集群部署不同服务,降低运维风险; 集群可以按需升级,很传统,很 vm 的感觉
    sampeng
        43
    sampeng  
    OP
       2023-03-30 20:48:15 +08:00
    @Nnq yes..这是正解。这两个都是之前是 vm 的机器跑服务。迁移到 k8s 还是按这个逻辑去搞
    cctv6
        44
    cctv6  
       2023-03-30 22:03:51 +08:00
    想知道你们的集群一般几个机器,机器的配置是怎么样的,pod 的内存和 cpu 一般是根据什么原则分配的? 资源的利用率能达到多少?
    xabcstack
        45
    xabcstack  
       2023-03-30 22:19:27 +08:00
    什么能力的人搭配什么公司的技术,没毛病
    saltbo
        46
    saltbo  
       2023-03-30 23:06:14 +08:00
    你这都不算啥,我司 100+个集群你敢信?
    zhuantouer
        47
    zhuantouer  
       2023-03-30 23:13:18 +08:00 via Android
    借楼请教下,rd 想转运维,大佬们指导下路径?
    LaurelHarmon
        48
    LaurelHarmon  
       2023-03-30 23:29:51 +08:00 via Android
    下次发长文前找 ChatGPT 润色一下
    Nnq
        49
    Nnq  
       2023-03-31 04:25:42 +08:00
    @sampeng 那你做的很对啊,这明显的降本增效,大哥们没给发奖金么
    sampeng
        50
    sampeng  
    OP
       2023-03-31 07:48:58 +08:00 via iPhone
    @Nnq 有啊,中午吃饭加个鸡腿


    @LaurelHarmon 确实是随性而写,我自己都没读通顺…


    @saltbo 我草…除非有完善的运维平台,控制面和遥测体系。运维噩梦
    sampeng
        51
    sampeng  
    OP
       2023-03-31 07:51:10 +08:00 via iPhone
    @zhuantouer 借楼回复,别了。大环境并不好。
    Aumujun
        52
    Aumujun  
       2023-03-31 11:01:00 +08:00
    最近也因为 requests 和 limits 吃了个大亏,一个开源的区块节点,资源推荐 16C 16G ,然而我 requests 和 limits 按照这个配置后,导致整个服务器 load 直接飙到 600 多(物理机 64C ,256G ),机器直接 hang 住卡死。后面放开 CPU 的 limits 和 requests 就没事了。
    leopod1995
        53
    leopod1995  
       2023-03-31 18:02:33 +08:00
    @Aumujun 为什么放开就能没事? 能详细讲讲吗
    Aumujun
        54
    Aumujun  
       2023-04-02 10:48:38 +08:00 via Android
    @leopod1995 我怀疑是程序需要大量使用 CPU ,但被限制导致等待 CPU 的任务越来越多,然后 load 越来越大,最后 hang 死服务器;当然这只是我的猜测,但放开 cpu 后确实没有再出现,已经观察有四天了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     964 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 22:46 PVG 06:46 LAX 15:46 JFK 18:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86