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

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

  •  
  •   sampeng · 2023-03-30 09:17:20 +08:00 · 6340 次点击
    这是一个创建于 608 天前的主题,其中的信息可能已经有所发展或是发生改变。
    做运维到现在 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 ,再加上监控,多几个集群,运维没多少工作量的。
    youzi0516
        38
    youzi0516  
       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 还是按这个逻辑去搞
    cdlnls
        44
    cdlnls  
       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   ·   实用小工具   ·   3016 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 14:50 · PVG 22:50 · LAX 06:50 · JFK 09:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.