8

是否有必要用 K8S

 3 years ago
source link: https://www.v2ex.com/t/780960
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  Kubernetes

是否有必要用 K8S

  beryl · 20 小时 32 分钟前 · 4581 次点击

公司是做 ToB 私有化部署,预估每个月有 5-10 个项目,产品加上中间件 大约十几个进程,有专门的交付同学,需要交付部署。现在方案是采用 docker 容器方式,准备上 K8S 。

但是老板今天质疑为什么要上 K8S,主要是两点:

  1. 多了 K8S, 部署的时候服务资源就要多占用,毕竟 K8S 本身也需要资源
  2. K8S 能够带来哪些显著收益

这两个问题也是自己在纠结的,同时也在想 K8S 能够带来什么,交付更快?

第 1 条附言  ·  6 小时 5 分钟前

补充一点:

也不一定非要说服老板用 K8S
站在自己的角度也是哪个对产品对公司更实际用,就用哪个
76 条回复    2021-06-03 14:58:46 +08:00

chenqh

chenqh   20 小时 28 分钟前

这种私有化部署的 docker, registry 哪里来的? registry 也是自己搭建吗?

whileFalse

whileFalse   20 小时 28 分钟前 via iPhone

docker-compose/swarm 也不是不能用…

Itanium

Itanium   20 小时 27 分钟前

先上 k3s 试个点,k8s 水太深不一定把握的住

beryl

beryl   20 小时 23 分钟前

@chenqh 公司内部私有仓库,打包镜像

@Itanium K8S 目前都没找到合适的人,K3S 更难吧,另外 K3S 有哪些优势呢

cz5424

cz5424   20 小时 15 分钟前

我司目前为了省事直接用阿里云的 k8s 了

beryl

beryl   19 小时 43 分钟前

@cz5424 我们目前是需要私有化

plko345

plko345   19 小时 41 分钟前 via Android

我觉得小规模没必要,k8s 那么多组件,那么多细节要了解,需要的配套基础设施也不少,不过还是很稳定的,能 hold 住也能上,但没必要

beryl

beryl   19 小时 33 分钟前

@plko345 但是如果不上 K8S, 服务部署交付的时候成本挺大的吧,每天机器都要执行脚本部署不同的进程,还要设置资源分配

andstack

andstack   19 小时 28 分钟前

这点项目上 K8S 还早了点

cz5424

cz5424   19 小时 27 分钟前

@beryl 目前感觉 k8s 交付更麻烦,docker-compose 不香吗

napsterwu

napsterwu   19 小时 22 分钟前 via iPhone

k8s+helm 模版部署呀,一般 ci/cd 都支持的吧。而且私有 registry 也不是很难,我司一个只有内网的公司都可以正常开发,用的是 Harbor 。

beryl

beryl   19 小时 21 分钟前

@napsterwu 模板部署带来的优势有哪些呀

还有就是这样多了 K8S 还是会多占用资源的吧

napsterwu

napsterwu   19 小时 20 分钟前 via iPhone

反正运维老大说了算呗,看他愿不愿意每个环境每次部署都要找他跑一下 docker run

ysjiang4869

ysjiang4869   19 小时 20 分钟前 via Android

只针对一个公司,几台服务器,还是 docker-compose 吧,k8 不值得折腾的

12101111

12101111   19 小时 15 分钟前

k8s 并不会占用很多资源, 尤其是没有任何运维操作时

beryl

beryl   19 小时 14 分钟前

@ysjiang4869 但是需要频繁部署交付项目,大项目可能需要几十台,小项目需要几台
K8S 是不是交付起来更方便

beryl

beryl   19 小时 13 分钟前

@12101111 这个有具体的数据么,例如 64G 内存的机器,K8S 相关的服务在里面占多少呢

12101111

12101111   19 小时 8 分钟前

@beryl 单节点的内存占用不超过 1G, 主节点建议单独设立, 搞一个 4c+8G 内存的机器就行

calmzhu

calmzhu   19 小时 0 分钟前 via Android

有下面需求 建议上 k8s 。下面需求都可以自己二开实现,但是工作量不比维护 k8s 少。
k8s 的定义是云操作系统,不是基础硬件设施。操作系统上开发应用总比裸机方便。

1.CD 持续部署,k8s 自带机制可以省很多事情。比如蓝绿部署减少当机时间;测试开发过程中防止单个应用部署失败造成其他人工作中断。

2.多个环境的频繁创建维护,甚至动态部署一套全新的应用。

3. 配置以及密码的集中管理和密码的定期轮换

4. 可视化展示交互需求。比如获取应用状态信息。k8s 本身 api 交互就比 docker compose 方便

beryl

beryl   18 小时 52 分钟前

@calmzhu 这些感觉我们这个可能都用不到,因为现在主要是私有化部署。
我能想到的一点是,如果不用 K8S 部署,我们需要规划每台机器的需要 部署什么类型服务,然后再分别在每天机器上去启动部署脚本

然后机器之间还需要更改配置去调试,以及每次代码还需要改动中间件的配置

不知道这个算不算我们当前场景,依赖 K8S 的优势

beryl

beryl   18 小时 41 分钟前

@12101111 单个节点的概念一般是多大配置呢

另外节点一般几个 pod 呢

谢谢

calmzhu

calmzhu   18 小时 27 分钟前 via Android

@beryl 存粹 toB 不高频私有化部署的话。个人觉得 docker-compose pxe/系统自定义镜像+hook 脚本更好 。k8s 优势在于可以把各种变更的成本降低到极致之后,做一些高抽象层级的事更方便

calmzhu

calmzhu   18 小时 26 分钟前 via Android

@calmzhu 用 ansible 吧

12101111

12101111   18 小时 21 分钟前

@beryl 单节点建议改用 k3s, k8s 至少 3 节点吧
Pod 数量一般两位数, 一位数就高射炮打蚊子了,三位数没有 CPU 带的动, 至于是十几个还是几十个,那就看 CPU 和内存配置了

lucays

lucays   18 小时 8 分钟前

k8s 细节太复杂了,,我前公司把握不住后来换回 docker-compose 了

djoiwhud

djoiwhud   17 小时 17 分钟前 via Android   ❤️ 5

面向练手编程。

应届生:什么新,什么高大上,怎么搞。毕竟只看一下博客写高大上的技术心里没底。搞黄了企业可以再找工作 double 一下。
老员工:什么简单稳定用什么,毕竟瞎搞公司黄了要找工作。

mazyi

mazyi   16 小时 59 分钟前 via iPhone

k8s 比几十个进程复杂几十倍。。。

beryl

beryl   16 小时 52 分钟前

@djoiwhud 我的目标是哪个可以帮助公司

zqcolor

zqcolor   16 小时 47 分钟前

应该要上,之后跳槽简历好看很多
用上 helm chart 后,ci cd 很方便

mooyo

mooyo   16 小时 43 分钟前

你们现有的服务会需要经常进行调整么?
目前的发版流程方便么?
常规发布是无损的么?

上了 k8s 以后还能比较方便的对不同服务进行扩缩容,也可以考虑下这些是不是你们现在的痛点。

mooyo

mooyo   16 小时 41 分钟前

上 k8s 不一定会导致复杂性的增加,常规使用并不需要用到高级特性,只需要有一个能 cover 住的人搞定环境其他人上去点点点就行。 但是服务多起来以后会有其他额外的问题需要考虑....以及你现有的服务是不是可以比较方便的改造成适合 k8s 部署的状态。

dayeye2006199

dayeye2006199   15 小时 30 分钟前

给你老板看看这个:F16 战斗机里面跑 k8s - https://www.cncf.io/blog/2020/05/07/with-kubernetes-the-u-s-department-of-defense-is-enabling-devsecops-on-f-16s-and-battleships/

如果你们交付都在一台机器上,只是想用容器,推荐 docker-compose ;
如果你们需要在私有网络内多机部署,推荐轻量级 k3s
如果你们在公有云上部署,推荐云厂商提供的 managed k8s

k8s 的一些好处:
* 持续交付速度比较快,原生支持 zero downtime 部署
* 原生支持配置中心
* 周边生态比较丰富,如果需要动态服务伸缩,监控,日志等服务,都有比较成熟的周边产品


但推荐至少团队里面得有一个老司机对这块比较熟悉,否则至少得做一下 POC,一下直接上生产环境,在 deadline 的逼迫下会比较挣扎。

ReferenceE

ReferenceE   14 小时 11 分钟前 via Android

K8S 这业务量没必要,框架学习成本远大于收益

kennylam777

kennylam777   12 小时 9 分钟前

證明你公司的東西太簡單.....有時候用簡單的 docker-compose 做 deployment,health-check 麻煩點太多而且不好 scale,果斷換回 k8s 。

雖然 k8s master 節點也是資源,但三台 4GB RAM+的機器面對業務來說不是錢吧。要不就上 EKS 一類的 managed k8s 。

zenwong

zenwong   10 小时 44 分钟前

老板想用,所以有必要。

holulu

holulu   10 小时 0 分钟前

看实际情况,如果没几十上百个微服务要管理就没必要。服务数量少,维护 k8s 的成本比管理服务还要高。

xuanbg

xuanbg   9 小时 58 分钟前

私有化部署不是发布到客户的服务器上面吗?服务器资源不是客户提供?不知道你们老板为啥要纠结资源的问题。

如果是动态范围不是很大的,需要随时自动横向扩展 /收缩的,k8s 就完全没有必要了。增加无谓的复杂度,提高运维的工作量。直接 docker run 也不是不行。反正我的经验是,只要脚本写好,就是一个命令的事情,要什么 k8s 。

plko345

plko345   8 小时 31 分钟前 via Android

@beryl ansible salt 有太多方案能解决交付,完全能做到一键搞定

Rwing

Rwing   7 小时 59 分钟前

我觉得可以用,不要被吓到,其实没那么难,你又不进行二次开发,只是使用而已,找一个专门的人专门运维这一块就可以了

jorneyr

jorneyr   7 小时 58 分钟前

只说优点: 对于无状态的 Web 服务,k8s 可以保证服务的高可用,例如进程挂了 k8s 自动给拉起来,否则需要管理员发现进程挂了去手动启动程序。只需要用 yaml 文件在 master 上部署,不需要自己去手动一个一个的到目标机器上部署,部署简单。

fannas

fannas   7 小时 52 分钟前 via iPhone

面向老板和薪水实施哈

star7th

star7th   7 小时 46 分钟前

私有化部署不是很有必要一定上 k8s 太重了。如果是你们提供公有服务的话,使用 k8s 就十分合适。

defunct9

defunct9   7 小时 37 分钟前

zone10

zone10   7 小时 12 分钟前

k8s 节省的是程序员成本, 你在心疼机器成本那就没必要

sangs

sangs   7 小时 6 分钟前   ❤️ 2

巧了, 我也是做交付的 (可以加个好友). 目前在用 k8s. 呃, 一直都是 k8s, 就没用过别的.

k8s 的优势:
[1] 使用 helm chart 一键拉起整套环境 (我们有 30 多个应用)
[2] 可以使用 helm chart 应用商店, 可以
[3] 公私有云下, 都可以直接购买 k8s
[4] k8s 带界面, 可以使用 k8s-dashboard, rancher 或者云服务控制台的界面, 对于研发来说, 更新代码非常迅速
[5] CI/CD 方便, 写完代码, 直接提交到 gitlab, 驱动 jenkins 打包, 直接推送到 k8s 集群

k8s 的劣势:
[1] 维护成本高, 门槛高. 想象一下, master 节点报错了, 你们运维不知道怎么处理, 老板慌不慌. 我们是配有 k8s 专家的, 所以这个问题不是很大
[2] 本身需要资源 至少需要 2 台 4c8g 的. 这个每年得多花 1 万块钱吧. 我们 toB 的都是大客户, 对价格不敏感, 这点钱不算啥

我认为, 10 个应用以内用 docker-compose 吧, 反正简单, 随便搞都行. 10+ (像我们 30+) 应用的, 只能用 k8s 了

dunhanson

dunhanson   6 小时 45 分钟前

懂 k8s 的人应该还好吧,我们公司我自己搭建的,生产环境部分用了 k8s
k8s 的优势就是人家有一整套的流程和规范,扩容回滚什么超级方便

dunhanson

dunhanson   6 小时 44 分钟前

之前我用过 docker compse 真的是难用,自己还要写很多辅助脚本来控制

rrfeng

rrfeng   6 小时 33 分钟前

十几个进程还是算了吧,全部用 docker,(资源隔离和方便部署),稍微整理一下脚本就行了。

如果没有经验的话 k8s 还是很难调教的。

windghoul

windghoul   6 小时 32 分钟前

docker-compose 那一套文件的维护就很费事,而且多节点之间的网络这些的都是需要考虑的成本

julyclyde

julyclyde   6 小时 32 分钟前

toB 项目,负载量一般没什么波动,弹性伸缩的功能基本上用不到的
不过部署灵活的好处始终存在

我的建议是:只学习不使用

AlexEzio

AlexEzio   6 小时 29 分钟前   ❤️ 3

ToB 交付老油条(4 年经验)来回答:
就你目前所说的信息,完全没有必要上 k8s.
k8s 的优势在私有化部署中并不明显,因为运维成本高,而且不可控,不是所有客户都玩得转 k8s, 而且你评估下一个客户一个 k8s 的维护量?
私有化部署最重要的两点:
1. 部署效率与标准化(决定了交付速度,现金流的稳定)
2. 可维护性(决定了后续的维护成本)
在这两点上,k8s 私有化都只有缺点。
k8s 的优势在于应用的 zero downtime,扩容,发布,cicd, 这些私有化都不需要,私有化更新的频率,可能是一个月,基于半年,一年一次。


你这种场景,我之前也设计过部署方案,就是一套 docker-compose 搞定(我司当时是 12 个左右的 image)。定义好 docker entrypoint, 配置变量放在 env 文件里,初始化时脚本替换一下,加下 docker 自带的容器发现,很容易几分钟之内就部署好一套标准的环境出来。

配合上 ansible, 自己二开的 compose 配置平台, 能轻松实现部署,监控,预警,自动发布的效果。

另外,k8s 私有化是什么场景? 都是针对金融,银行机构,做容器平台私有化,像 daocloud, 青云这种,都有相关的业务,一个项目就是上亿,这种都需要客户自己有专业的运维,开发团队的。

beryl

beryl   6 小时 27 分钟前

@rrfeng 可能描述有误,十几个进程是只有十几个模块,包括 Mysql ES Redis 这些。
但是最终交付是集群交付,做服务划分(编排),没台机器都要部署,也是非常费力的。

basefas

basefas   6 小时 26 分钟前

赞同 #52 的观点,运维 k8s 的成本远高于使用 k8s 带来的便利

beryl

beryl   6 小时 25 分钟前

@sangs 非常感谢,很有帮助, 可以一起聊聊
不过我不是交付,现在还没有找到合适的交付 (-_-

jack778

jack778   6 小时 24 分钟前

我想问下这种私有化部署后怎么做更新呢? 是推送更新吗?

basefas

basefas   6 小时 22 分钟前

@beryl Mysql 这类有状态项目部署到 k8s 中运维难度更大,没有专家的话完全不建议在生产环境的 k8s 上部署有状态项目,建议 ansible 配合 docker 使用

beryl

beryl   6 小时 21 分钟前

@AlexEzio
> 部署效率与标准化(决定了交付速度,现金流的稳定)
这点 K8S 不是优势么

场景和你说的类似,但不是容器平台私有化,而是我们服务依托于 K8S 进行交付,项目金额也没有这么大

securityCoding

securityCoding   6 小时 16 分钟前

k8s 的价值在于标准化,你围绕这点延伸出来说服老板吧

snail00

snail00   6 小时 15 分钟前

数据库这类持久化部署不建议在 docker 里跑, 数据恢复是个灾难.
本身服务就是 docker 部署, 上 k8s 业务上改动不大, 主要是 k8s 的集群如何部署, 裸机部署 k8s 集群, 必须得个能 hold 住的运维, 公有云部署的集群小问题比较多, 可以综合成本看看

securityCoding

securityCoding   6 小时 15 分钟前

@jack778 有专门的私有镜像仓库,配合 ci 做到推送更新很简单

AlexEzio

AlexEzio   6 小时 14 分钟前

@beryl 恩,我这里表述有点问题。实际我说的就是私有化中,用 k8s 交付服务这种场景。
据我个人经验,私有化如果有服务需要依托于 k8s 交付,客户最起码项目预算应该是百万以上,而且基本都是金融,银行,互联网公司这种不差钱的居多,有自已运维团队。
不过话说回来,如果是这种客户,那落地用什么架构,用什么技术,就不是你们说了算,而是客户说了算。
小项目,用 docker+ansible 轻装上阵, 快速部署加回款验收才是王道,整那些花里胡哨的没用, 对老板来说,项目成不成功,只看回款和金额, 不是看你用了多牛 b 的技术。
当然,想借项目来锻炼自己技术也是可以的, 我也试过 k8s 交付服务, 但是相信我,人总是趋利避害的,事少一点不好嘛~

rrfeng

rrfeng   6 小时 14 分钟前

@beryl 存储就放弃吧,小规模上 k8s 没意义反而带来更多麻烦。至于多台机器部署有很多现成的方案,ansible/saltstack 都很容易。甚至上了 docker 之后可以直接中控机上远程 docker api 去部署。

你这个场景 k8s 只有一种方案适合:你们所有客户共享一个 k8s 集群,统一在你们的中心管控,这样得到的效率提升确实高,只要给机器部署下 kubelet,其他都是一套了。

th00000

th00000   6 小时 13 分钟前   ❤️ 1

K8S 太重度了, 上 HashiCorp 的 Nomad 也是一样的, 复杂度一下就下来了, 需求还能实现
GitHub 也是用的这个组件

AlexEzio

AlexEzio   6 小时 11 分钟前

@beryl 私有化场景,k8s 和 docker 一把梭这种比起来,标准化一致(k8s 同样也是利用容器技术来实现运行时的标准化),效率天差地别。 部署一套 k8s,和部署 docker daemon,那就是一天和几分钟的区别。

beryl

beryl   6 小时 2 分钟前

@AlexEzio 不是为了锻炼技术,也不一定非要用 K8S, 出发点还是为了项目和产品更容易交付

beryl

beryl   5 小时 58 分钟前

@AlexEzio 另外自己的感觉也是 K8S 太重,我理解的重是:
K8S 环境搭建起来,学习成本较大

但是如果有专门的人做过这套,搭建起来之后,用这个去编排、交付产品是不是方便?

另外请教下,如果现在用 docker-compose, 后面有人力和动机后,再迁移到 K8S 成本大么

killerv

killerv   5 小时 56 分钟前

我感觉自己部署 k8s 完全没必要,直接使用云厂商成熟的 k8s 解决方案,工程师不应该关注底层系统维护,应该更关注自己的业务。
k8s 带来的收益是很明显的:容器技术带来的降低资源占用、简化项目部署、高可用、环境一致性等等。
不太建议中间件、数据库用容器跑,监控、容灾需要很大成本,这类最好还是使用云产品。

Illusionary

Illusionary   5 小时 42 分钟前

外包搞什么 K8S,Tomcat 就完事了。

tandaly

tandaly   5 小时 41 分钟前

纯 k8s 搞下来挺复杂,目前用 rancher 管理 k8s 集群

AlexEzio

AlexEzio   5 小时 5 分钟前

@beryl k8s 学习成本大,维护成本也高。如果有专人做 k8s,搭建,维护啥的,那肯定会方便一些,helm chat 加上写好的 yaml 梭就行了。 但是这个专人成本也会高,风险也很大,如果这个人走了,后续集群更新,漏洞修复,证书更新啥的,都是麻烦事。
docker 编排,和 k8s 编排,迁移成本就是在各类资源 yaml 或 helm chat 编写上, 对开发来讲是无感的。

说下我目前交付的场景:
1. POC 部署, 直接 docker-compose 一把梭,一台机器搞定,就是演示核心功能
2. 测试,UAT,生产部署: 用 ansible + 源码编译的形式, 中间件能复用客户的,就复用客户的,这样只需要专注于自己的业务这块。这种适用于有自己技术团队的客户,ansible 多机部署非常方便,设计好 playbook, 设计好 role 的复用就可以了。我目前都是这种方式为主,规模从几台,到几十台不等都 okay.
3. k8s 部署, 这种都是客户自己有上云需求,会要求你去对接他们 cicd, k8s, 成本就是前期的上云适配, 后续维护除了版本更新,其他都是客户自己负责。 这种方式比较小,客户很少有完善和成熟的云原生维护体系。
4. 小众的 paas 平台适配, 这种就更少了。基本前两种为主。

私有化这块,没有什么一成不变的交付方式,尤其是大客户这一块,会经常有定制,对接需要。
还是根据你们自己的情况,去制定一个效率和维护都兼顾的一种交付方式,先小步跑起来。

wandehul

wandehul   5 小时 2 分钟前   ❤️ 1

我是运维,我现在已经不想去没有 k8s 的公司了,累!

hijoker

hijoker   4 小时 57 分钟前

你们是做好软件卖给客户? k8s 环境也是你们软件一起提供?还是客户准备 k8s?

xingzhi

xingzhi   4 小时 56 分钟前

你老板反问的问题是对的,尤其是第二点,你自己都没有想清楚有什么显著收益,那为什么就要“准备上 k8s” 呢

ferock

ferock   4 小时 49 分钟前 via iPhone

大规模才有需要,小范围没必要

pckillers

pckillers   2 小时 3 分钟前

@napsterwu 我寻思能叫运维的人难道不会用 ansible 之类的批量部署工具来多机批量执行 docker run 么。。。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK