Kubermetes是谷歌开源的分布式容器编排和资源管理系统。因为它的英文术语字数太长,社区专门给它定义了一个缩写单词: K8s。从2014年发布至今,已经成为 GitHub社区中炙手可热的开源项目。因为以K8s为核心的云原生技术已经成为业界企业数字化转型的事实标准技术栈。
Kubernetes 集群架构与组件
- k8s与传统方法对比:
传统后端部署的方法:把程序包(包括可执行二进制文件、配置文件等)放到服务器上,接着运行启动脚本把程序跑起来,同时启动守护脚本定期检查程序运行状态、必要的话重新拉起程序。如果服务的请求量上来,已部署的服务响应不过来怎么办?传统的做法往往是,如果请求量、内存、CPu超过阈值做了告警,运维人员马上再加几台服务器,部署好服务之后,接入负载均衡来分担已有服务的压力。
K8S的优势:自动化运维管理容器化(Docker) 程序,使部署容器化应用简单高效
综上所述,其实直接的感受就是我们可以“轻装上阵”地开发复杂系统了,以前动不动就需要十几个人才能设计实现和运维的分布式系统,在采用k8s解决方案后,只需要一个小团队就能轻松应对。团队中,一名架构师负责系统中“服务组件”的提炼,几名开发工程师专注于业务代码的开发,一名系统兼运维工程师负责k8s的部署和运维,从此再也不用996了,这并不是因为我们少做了什么,而是因为k8s已经帮我们做了很多。
其次,使用k8s就是在全面拥抱微服务架构,微服务架构的核心是将一个巨大的单体应用分解为很多小的互相连接的微服务,一个微服务背后可能有多个实例副本在支撑,副本的数量可能会随着系统的负荷变化而进行调整,内嵌的负载均衡器发挥了重要作用。微服务架构使得每个服务都可以由专门的开发团队来开发,开发者可以自由选择开发技术,这对于大规模团队来说很有价值,另外每个微服务独立开发,升级,拓展,因此系统具备很高的稳定性和快速迭代进化能力。谷歌、亚马逊、eBay等都采用了微服务架构,此次谷歌更是将微服务架构的基础设施直接打包到k8s解决方案中,让我们有机会直接应用微服务架构解决复杂业务系统的架构问题。
然后我们系统可以随时随地整体搬迁到公有云上,k8s初的目标就是运行在谷歌自家的公有云GCE上,未来会支持更多的共有云以及基于OpenStack的私有云。同时,在k8s的架构方案中,底层网络的细节完全被屏蔽,基于服务的cluster ip甚至都无需我们改变运行期的配置文件,就能将系统从物理机环境中无缝迁移到公有云中,或者再服务高峰期将部分服务对应的Pod副本放入公有云中以提升系统的吞吐量,不仅节省了公司的硬件投入,还大大改善了客户体验,我们所了解的铁道部12306购票系统,在春节高峰期就租用了阿里云进行分流。
后,k8s系统架构具有超强的横向扩容能力。对于互联网公司来说,用户规模就等价于资产,谁拥有更多的客户,谁就能在竞争,因此超强的横向扩容能力是互联网业务系统的关键指标之一,不用修改代码,一个k8s集群即可从只包含几个node的小集群平滑拓展到拥有上百个node的大规模集群,我们利用k8s提供的工具,甚至可以在线完成集群扩容。只要我们的微服务设计得好,结合硬件或者公有云资源的线性增加,系统就可以承受大量用户并发访问所带来的巨大压力。