阿里巴巴-Kubernetes-应用管理实践中的经验与教训

导读:云原生时代,Kubernetes 的重要性日益凸显。然而,大多数互联网公司在 Kubernetes 上的探索并非想象中顺利,Kubernetes 自带的复杂性足以让一批开发者望而却步。本文中,阿里巴巴技术专家孙健波在接受采访时基于阿里巴巴 Kubernetes 应用管理实践过程提供了一些经验与建议,以期对开发者有所帮助。在互联网时代,开发者更多是通过顶层架构设计,比如多集群部署和分布式架构的方式来实现出现资源相关问题时的快速切换,做了很多事情来让弹性变得更加简单,并通过混部计算任务来提高资源利用率,云计算的出现则解决了从 CAPEX 到 OPEX 的转变问题。 云计算时代让开发可以聚焦在应用价值本身,相较于以前开发者除了业务模块还要投入大量精力在存储、网络等基础设施,如今这些基础设施都已经像水电煤一样便捷易用。云计算的基础设施具有稳定、高可用、弹性伸缩等一系列能力,除此之外还配套解决了一系列应用开发“最佳实践”的问题,比如监控、审计、日志分析、灰度发布等。原来,一个工程师需要非常全面才能做好一个高可靠的应用,现在只要了解足够多的基础设施产品,这些最佳实践就可以信手拈来了。但是,在面对天然复杂的 Kubernetes 时,很多开发者都无能为力。 作为 Jira 和代码库 Bitbucket 背后的公司,Atlassian 的 Kubernetes 团队首席工程师 Nick Young 在采访中表示: 虽然当初选择 Kubernetes 的战略是正确的(至少到现在也没有发现其他可能的选择),解决了现阶段遇到的许多问题,但部署过程异常艰辛。那么,有好的解决办法吗? 太过复杂的 Kubernetes“如果让我说 Kubernetes 存在的问题,当然是‘太复杂了’”,孙健波在采访中说道,“不过,这其实是由于 Kubernetes 本身的定位导致的。” 孙健波补充道,Kubernetes 的定位是“platform for platform”。它的直接用户,既不是应用开发者,也不是应用运维,而是“platform builder”,也就是基础设施或者平台级工程师。但是,长期以来,我们对 Kubernetes 项目很多时候都在错位使用,大量的应用运维人员、甚至应用研发都在直接围绕 Kubernetes 很底层的 API 进行协作,这是导致很多人抱怨 “Kubernetes 实在是太复杂了”的根本原因之一。 这就好比一名 Java Web 工程师必须直接使用 Linux Kernel 系统调用来部署和管理业务代码,自然会觉得 Linux “太反人类了”。所以,目前 Kubernetes 项目实际上欠缺一层更高层次的封装,来使得这个项目能够对上层的软件研发和运维人员更加友好。 如果可以理解上述的定位,那么 Kubernetes 将 API 对象设计成 all-in-one 是合理的,这就好比 Linux Kernel 的 API,也不需要区分使用者是谁。但是,当开发者真正要基于 K8s 管理应用、并对接研发、运维工程师时,就必然要考虑这个问题,也必然要考虑如何做到像另一层 Linux Kernel API 那样以标准、统一的方式解决这个问题,这也是阿里云和微软联合开放云原生应用模型 Open Application Model (OAM)的原因。 ...

November 5, 2019 · 2 min · jiezi

大盘点-KubeCon-EU-2019-应用管理领域的新看点

摘要: KubeCon EU 2019 刚刚在巴塞罗那拉下帷幕,来自阿里巴巴经济体的讲师团,在大会上分享了互联网场景下规模化 Kubernetes 集群的各项落地经验和教训。所谓“独行速而众行远”,从不断发展壮大的社区中,我们看到越来越多的人拥抱开源,往标准演进,搭上了这趟开往云原生的高速列车。众所周知,云原生架构的中心项目是 Kubernetes,而 Kubernetes 则围绕着“应用”来展开。让应用部署得更好,让开发者更高效,才能给团队和组织带来切实的利益,才能让云原生技术变革发挥更大的作用。变革的势头既如洪水般吞没着老旧封闭的内部系统,又如春雨般孕育出更多的新开发者工具。在本次 KubeCon 中,就出现了许多有关应用管理与部署的新知识。这些知识中有哪些想法和思路值得借鉴,让我们少走弯路?在它们背后,又预示着什么样的技术演进方向? 在本文中,我们邀请到了阿里云容器平台技术专家、原 CoreOS 公司工程师、 K8s Operator 项目的核心作者之一邓洪超,为读者精选了此次会议“应用管理”领域的精华内容来一一进行分析与点评。 The Config ChangedKubernetes 上部署的应用一般会把配置存放到 ConfigMap 里,然后挂载到 Pod 文件系统中去。当 ConfigMap 发生更改时,只有 Pod 里挂载的文件会被自动更新。这种做法对某些会自动做热更新的应用(比如 nginx)来说是 OK 的。但是,对于大多数应用开发者来说,他们更倾向于认为更改配置要做一次新的灰度发布、跟 ConfigMap 相关联的容器应该做一次灰度升级。 灰度升级不仅简化了用户代码,增强了安全稳定性,更是体现了不可变基础架构的思想。应用一旦部署,就不再做变更。需要升级时,只要部署一个新版系统,验证 OK 后再摧毁旧版就好了;验证不通过时也容易回滚到旧版。正是基于这样的思路,来自 Pusher 的工程师们研发了 Wave,一款自动监听 Deployment 相关联的 ConfigMap/Secret 并随之改动而触发 Deployment 升级的工具。这款工具的独特之处在于它会自动搜索该 Deployment PodTemplate 里面的 ConfigMap/Secret,然后把里面所有数据计算一次 hash 放到 PodTemplate annotations 里面;当有变动时,会重新计算一次 hash 并更新 PodTemplate annotations,从而触发 Deployment 升级。无独有偶,开源社区里还有另一款工具 Reloader 也做了类似的功能——不同的是,Reloader 还能让用户自己选择填写监听哪几个 ConfigMap/Secret。 ...

June 3, 2019 · 2 min · jiezi