写点什么

三年血泪史:工程师亲述 Kubernetes 实在太难

  • 2019 年 1 月 23 日
  • 本文字数:0 字

    阅读完需:约 1 分钟

三年血泪史:工程师亲述Kubernetes实在太难

虽然 Kubernetes 很火,但这家公司却用三年时间亲证:部署 Kubernetes 太难了,且很可能不建议其他人尝试。


事件经过

Atlassian 是一家总部位于澳大利亚悉尼的软件企业,这家企业最初没有销售团队,不靠融资就做到了市值百亿美元,两位创始者本来也是开发者出身,这家企业的技术实力起初就不弱,但却在尝试了 Kubernetes 三年后公开表示:“过去三年,部署 Kubernetes 的过程非常艰难,并且不推荐大家尝试”


众所周知,Kubernetes 是谷歌开源的容器编排引擎,支持自动化部署、大规模可伸缩、应用容器化管理,很多细节不需要运维人员进行复杂的手工配置和处理,这是现在非常流行的容器管理和编排工具,几乎好评如潮。这样一款让部署容器化应用更加简单高效的工具,为什么会让这家企业给出如此评价呢?


这一切要从 Atlassian 的 Kubernetes 团队首席工程师 Nick Young 近日接受媒体采访说起。


不久前,Nick Young 曾在采访中表示,虽然当初选择 Kubernetes 的战略是正确的(至少到现在也没有发现其他可能的选择),解决了现阶段遇到的许多问题,但部署过程异常艰辛。


三年前,Kubernetes 还是一种非常新的技术,Atlassian 希望在 PaaS 平台做一些工作,重点在于让开发人员不必关心底层应用部署细节,只需想好要什么即可,比如要一个 Docker 镜像和 PostgreSQL,PaaS 团队将所有内容通过翻译转换为 Kubernetes 事务,编写内容并生成 PostgreSQL,确保 Postgres 字符串和详细信息都连接到 Kubernetes 的 pod,最终达到使用体验尽可能接近笔记本电脑上运行内容的体验。


准备阶段

在决定使用 Kubernetes 之后,这家公司就开始进入准备阶段,包括基础知识储备和团队建设等。


子集管理

团队建设工作并没有耗费太多精力,由于整个团队之前具备容器化经验,因此在基础知识学习方面相对轻松。在设计 Kubernetes 时,整个团队首先将关注点放在基础设施之上,考虑到未来业务增长的可能,整个团队建议如果希望管理一个完整堆栈,那么子集管理是非常重要的,这可以确保在某些需求出现时,只针对局部进行修改即可。


隔离

如果希望各层之间的修改和运行互不干扰,就需要保证层之间具有非常明确的边界,也就是通常所说的隔离性,这也被列入整个团队的准备工作之中。


过程受阻

在实际搭建中,Atlassian 遇到了各种问题。目前,该公司运行了大约 20 个 Kubernetes 集群,最大集群约有 14,000 个 vCPU 和 50TB 左右 RAM,运行了一大堆内部 CI 工具 。


问题 1:etcd 限制

etcd 是 Kubernetes 提供的默认存储系统,保存所有集群数据,使用时需要为 etcd 数据提供备份计划。在这个过程中,Atlassian 首先遇到了 etcd 大小限制问题,etcd 存储了每个 Kubernetes 集群配置和其他数据关键组件。如果 etcd 数据库大小达到 2.1GB,那么集群将转为只读模式。基本上,8 万命名空间 100%将占用 2.1GB 内存。


事实上,当命名空间达到 5 万时,etcd 就开始放慢速度。最终,整个团队的解决方法是将流量转移到另一个集群,好在转移过程相对比较顺利。


问题 2:安全

Kubernetes 就像多年前的数据库,如果没有几年最佳实践经验,恐怕难以部署到位。Nick Young 表示,解决安全问题非常重要且非常难,虽然 Kubernetes 有很多功能可供选择,但默认设置不是很安全。


事实上,Kubernetes 系统提供三种认证方式:CA 认证、Token 认证和 Base 认证。双向认证配置是最为严格和安全的集群安全配置方式,但这种方式在保证系统不受攻击的情况下会带来额外的性能损耗,因此一般都建议用非安全方式访问 API Server,这种方式效率更高。所以,企业通常需要在安全和性能之间找到一个很好的平衡点。


建议

不要完全 DIY

回顾整个搭建过程,这家公司发现有很多工具可以代替曾经那些痛苦的过程。如今,主流云供应商提供非常棒的管理和运维工具。在确保安全的前提下,企业可以考虑这些现成工具,这可以大大简化整个搭建过程。


如果技术实力尚可,也有很多开源工具可以选择,完全的 DIY 设计需要投入大量精力和资金,因此不建议完全自主搭建。


查验失败

除此之外,在 Kubernetes 的部署中,我们经常可以碰到容器镜像没有更新、集群资源不足、校验错误、持久化卷挂载失败等问题,开发人员可以使用一些简单命令进行快速定位,比如,kubectl describe deployment/;kubectl describe replicaset/;kubectl get pods;kubectl describe pod/;kubectl logs--previous 等命令可以被用来定位常见的大部分失败问题。


如果技术能力允许,也可以自己编写一些 bash 脚本,自动化查验失败原因,显示一些问题相关的 Kubernetes 信息,帮助开发者迅速定位问题原因。


总结

虽然 Kubernetes 部署很难,但只要开始就很难放弃,这家公司最终决定继续使用 Kubernetes,并持续优化建设。


参考链接:https://www.itnews.com.au/news/atlassian-admits-it-did-kubernetes-the-hard-way-517984


2019 年 1 月 23 日 08:5619172
用户头像
赵钰莹 InfoQ高级编辑

发布了 745 篇内容, 共 446.2 次阅读, 收获喜欢 2402 次。

关注

评论 1 条评论

发布
用户头像
哈哈,痛并快乐着
2019 年 02 月 15 日 15:34
回复
没有更多了
发现更多内容

Java笔记 —— Set集合的排序原理,附答案+考点

Java 程序员 后端

Java虚拟机(JVM)面试题(2020最新版),linux视频教程下载

Java 程序员 后端

Java静态代理和动态代理的使用及原理解析,java项目面试难点

Java 程序员 后端

Java面试屡碰壁,一气之下狂刷高分宝典,一月之后拿到字节offer

Java 程序员 后端

Flink 实践教程:入门(1):零基础用户实现简单 Flink 任务

腾讯云大数据

flink 流计算 Oceanus

Java程序员的工资为什么那么高,首先要先掌握这999页阿里P8笔记!

Java 程序员 后端

Flink 实践教程:入门(2):写入 Elasticsearch

腾讯云大数据

flink 流计算 Oceanus

Java程序员(阿里、京东,java系统架构设计详解

Java 程序员 后端

java继承和多态,Java开发岗笔试题

Java 程序员 后端

模块二作业

迪马

Java集合之ArrayList详解,大厂越来越注重基础了,建议收藏

Java 程序员 后端

Java面试之多线程:Java创建多线程为什么只有一种方式?

Java 程序员 后端

Java程序员极力推荐的springboot全家桶干货系列

Java 程序员 后端

java程序员的AI之路-大数据篇 hadoop安装,java基础知识点梳理

Java 程序员 后端

Java程序员经典面试题集大全(一),分享面试经历的网站

Java 程序员 后端

架构实战营第 1 期 - 毕业总结

Anyou Liu

「架构实战营」

Java进阶之梯,成长路线与学习资料,助力突破中间件领域

Java 程序员 后端

架构实战营模块2课后作业

天天向上

架构实战营

模块二:如何抓住架构设计关键点? -- 学习总结

小鹿

java程序员的AI之路-大数据篇 hadoop安装(1)

Java 程序员 后端

Java笔记 —— IO,java定时任务quartz面试

Java 程序员 后端

Java类的继承与组合经典实例,java自学教程百度云盘

Java 程序员 后端

040022-week2-design

InfoQ_70156470130f

Flink 实践教程:入门(3):读取 MySQL 数据

腾讯云大数据

flink 流计算 Oceanus

Java程序员裸辞两个月,面试阿里、美团,值得一读

Java 程序员 后端

Java系列高频面试题:序列化+注解,java基础入门第二版电子书

Java 程序员 后端

Java进阶之深入理解Java的接口和抽象类,剑指java面试百度云

Java 程序员 后端

Java程序员必须熟记的微服务面试题(含答案)

Java 程序员 后端

机器学习在基于源码的漏洞挖掘中的应用

maijun

机器学习 静态代码分析 源码漏洞挖掘 code embedding

腾讯数字生态大会|大数据与你相约武汉

腾讯云大数据

大数据

Java程序员:面试字节跳动被问算法 多亏我扛下来了

Java 程序员 后端

三年血泪史:工程师亲述Kubernetes实在太难-InfoQ