公司是做 ToB 私有化部署,预估每个月有 5-10 个项目,产品加上中间件 大约十几个进程,有专门的交付同学,需要交付部署。现在方案是采用 docker 容器方式,准备上 K8S 。
但是老板今天质疑为什么要上 K8S,主要是两点:
这两个问题也是自己在纠结的,同时也在想 K8S 能够带来什么,交付更快?
有下面需求 建议上 k8s 。下面需求都可以自己二开实现,但是工作量不比维护 k8s 少。
k8s 的定义是云操作系统,不是基础硬件设施。操作系统上开发应用总比裸机方便。
1.CD 持续部署,k8s 自带机制可以省很多事情。比如蓝绿部署减少当机时间;测试开发过程中防止单个应用部署失败造成其他人工作中断。
2.多个环境的频繁创建维护,甚至动态部署一套全新的应用。
给你老板看看这个: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 的一些好处:
但推荐至少团队里面得有一个老司机对这块比较熟悉,否则至少得做一下 POC,一下直接上生产环境,在 deadline 的逼迫下会比较挣扎。
巧了, 我也是做交付的 (可以加个好友). 目前在用 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 了
ToB 交付老油条(4 年经验)来回答:
就你目前所说的信息,完全没有必要上 k8s.
k8s 的优势在私有化部署中并不明显,因为运维成本高,而且不可控,不是所有客户都玩得转 k8s, 而且你评估下一个客户一个 k8s 的维护量?
私有化部署最重要的两点:
在这两点上,k8s 私有化都只有缺点。
k8s 的优势在于应用的 zero downtime,扩容,发布,cicd, 这些私有化都不需要,私有化更新的频率,可能是一个月,基于半年,一年一次。
你这种场景,我之前也设计过部署方案,就是一套 docker-compose 搞定(我司当时是 12 个左右的 image)。定义好 docker entrypoint, 配置变量放在 env 文件里,初始化时脚本替换一下,加下 docker 自带的容器发现,很容易几分钟之内就部署好一套标准的环境出来。
配合上 ansible, 自己二开的 compose 配置平台, 能轻松实现部署,监控,预警,自动发布的效果。
另外,k8s 私有化是什么场景? 都是针对金融,银行机构,做容器平台私有化,像 daocloud, 青云这种,都有相关的业务,一个项目就是上亿,这种都需要客户自己有专业的运维,开发团队的。