2.5 Kubernetes简介
Kubernetes是一个容器集群管理系统,为容器化的应用程序提供部署运行、维护、扩展、资源调度、服务发现等功能。
Kubernetes是Google运行Borg大规模系统达15年之久的一个经验总结。Kubernetes结合了社区的最佳创意和实践,旨在帮助开发人员将容器打包、动态编排,同时帮助各大公司向微服务方向进行技术演进。
它具有以下特点。
•Planet Scale(大容量):使用Kubernetes的各大公司(包括Google)每周运行了数十亿个容器,这些容器的平台采用同样的设计原则。这些平台在不增加DevOps团队成员的情况下,可以让容器数量增加,节省了人力成本,达到了复用性。
•Never Outgrow(永不过时):无论容器是运行在一个小公司的测试环境中,还是运行在一个全球化企业的大型系统里,Kubernetes都能灵活地满足复杂的需求。同时,无论业务多么复杂,Kubernetes都能稳定地提供服务。
•Run Anywhere(随时随地运行):Kubernetes是开源的,可以自由地利用内部、混合或公共云的基础组件进行部署,让开发者可以将更多的时间和精力投入在业务上,而不是服务部署上。
Kubernetes开源免费,是Google在过去15年时间里部署、管理微服务的经验结晶,所以目前Kubernetes在技术社区也是十分火热。下面来看它提供的功能。
•Automatic Binpacking(自动包装):根据程序自身的资源需求和一些其他方面的需求自动配置容器。Kubernetes能够最大化地利用机器的工作负载,提高资源的利用率。
•Self-healing(自我修复):容器失败自动重启,当节点处于“死机”的状态时,它会被替代并重新编排;当容器达到用户设定的无响应的阀值时,它会被剔除,并且不让其他容器调用它,直到它恢复服务。
•Horizontal scaling(横向扩展):可以根据机器的CPU的使用率来调整容器的数量,只需开发人员在管理界面上输入几个命令即可。
•Service discovery and load balancing(服务发现和负载均衡):在不需要修改现有的应用程序代码的情况下,便可使用服务的发现机制。Kubernetes为容器提供了一个虚拟网络环境,每个容器拥有独立的IP地址和DNS名称,容器之间实现了负载均衡。
•Automated rollouts and rollbacks(自动部署或回滚):Kubernetes支撑滚动更新模式,能逐步替换掉当前环境的应用程序和配置,同时监视应用程序运行状况,以确保不会同时杀死所有实例。如果出现问题,Kubernetes支持回滚更改。
•Secret and configuration management(配置管理):部署和更新应用程序的配置,不需要重新打镜像,并且不需要在堆栈中暴露配置。
•Storage orchestration(存储编排):自动安装所选择的存储系统,无论是本地存储、公共云提供商(如GCP或AWS),还是网络存储系统(如NFS、iSCSI、Gluster、Ceph、Cinder或Flocker)。
•Batch execution(批量处理):除了服务之外,Kubernetes还可以管理批量处理和CI的工作负载,如果需要,可以替换容器,如NFS、iSCSI、Gluster、Ceph、Cinder或Flocker等。
从Kubernetes提供的功能来看,Kubernetes完全可以成为构建和部署微服务的一个工具,它是从服务编排上实现的,而不是代码实现的。目前国外有很多知名的公司在使用Kubernetes,如Google、eBay、Pearson等。由于它的开源免费,Microsoft、VMWare、RedHat、CoreOS等公司纷纷加入并贡献代码。Kubernetes技术吸引了一大批公司和技术爱好者,它已经成为容器管理的领导者。