人们可能已经注意到,很多企业现在都在采用Kubernetes,例如AWS、IBM/Red Hat、Microsoft、VMware等。甚至拥有自己的容器编排程序Docker Swarm的Docker现在也支持Kubernetes。那么为什么每个人都这么做?
随着越来越多的企业继续将应用程序从服务器和虚拟机迁移到容器,通常都会采用Kubernetes。
在以往,企业在服务器硬件上运行服务器程序。随后出现了虚拟机(VM),可以在一个平台上运行多个操作系统和应用程序。这使企业能够在一台服务器上运行十次或更多的服务器实例。这反过来又使企业能够在这些虚拟机之上按需运行,这既节省了成本,又带来了很大的灵活性。
企业可以在单个服务器上运行更多服务器程序,这将带来更多的成本节省和灵活性。这正是容器所提供的优势。
人们将会看到虚拟机管理程序(例如Hyper-V、KVM和Xen)通过仿真虚拟硬件而起作用。这使得它们在系统需求方面供过于求,但是,容器使用共享的操作系统。这意味着它们比管理程序效率更高。
容器并不是虚拟化硬件,而是位于单个Linux实例之上。这意味着企业可以在小容器中运行应用程序。实际上,用户可以运行的服务器应用程序实例数是在相同硬件上的虚拟化的四到十倍。
容器还适合进行持续集成(CI)/持续部署/(CD)。这是一种Devops方法,旨在鼓励开发人员尽早且经常地将其代码集成到共享存储库中,然后快速有效地部署代码。
最后,容器使开发人员能够轻松地打包、传输和运行任何应用程序,这些应用程序轻巧、可迁移、自给自足,几乎可以在任何地方运行。
那么有一个问题,就是如何管理所有这些容器?使用容器,单个服务器可能有数十个工作负载开始、工作和结束。这就是Kubernetes发挥作用的地方。
Kubernetes的发展历史
Kubernetes的起源始于谷歌公司的Borg。它是用于谷歌大规模工作管理的大型内部集群管理系统。此后不久,谷歌公司在2014年发布了第一版Kubernetes。这个开源的容器编排程序可以将容器部署到一组机器中,提供运行状况管理和复制功能,并使容器易于相互连接以及与其他程序连接。
因此,Kubernetes具有两个主要优势。得益于其Borg血统,它已经通过了谷歌公司的测试。而且,通过使其开源,Kubernetes摆脱了成为谷歌公司特定程序的负担。尤其是在2018年8月,谷歌公司将Kubernetes项目的云计算资源移交给了新家,即独立的云原生计算平台(CNCF)时。
自从CNCF接管Kubernetes以来,它已经从一个由谷歌公司和Red Hat公司主导的项目变成了一个拥有数千个贡献者的项目。在此期间,几乎消除了所有竞争。根据研究机构Red Monk公司的说法,目前仍然存在竞争者,但即使到2017年,名列《财富》杂志100强的50%以上的公司使用Kubernetes作为其容器编排平台。
Kubernetes可以做些什么
谷歌公司工程师兼Kubernetes架构师Brian Grant表示,“Kubernetes是一个可迁移的、可扩展的开源平台,用于管理容器化的工作负载和服务,同时促进声明性配置和自动化。”那么这意味着什么呢?
Kubernetes运行在Linux之上,可与Pod、一个或多个容器的组一起部署到单个节点,物理服务器或虚拟机。其命令通常通过Kubernetes的命令行配置工具kubectl发送,它定义了工作的元数据和规范。这些描述由以JavaScript对象表示法(JSON)或YAML编写的声明性语句组成。这些通过Kubernetes API描述了用户需要运行的应用程序,它们需要哪些容器映像以及创建集群所需状态所需的网络和存储资源。
Kubernetes主站将接受命令,找出如何使用可用资源来运行它们,并通过Pod生命周期事件生成器(PLEG)将用户的行进命令中继到Pod。用户无需担心确切的细节。
Kubernetes会找出适合该任务的节点。Kubernetes分配资源并分配完成工作所需的Pod。因此,Kubernetes可以自动设置、监视和管理容器。
具体来说,Kubernetes使用户能够完成以下任务:
•控制和自动化应用程序部署和更新。使用它,可以描述已部署容器的所需状态。然后,Kubernetes以受控的速率将容器化应用程序的实际状态更改为所需状态。例如,用户可以创建新容器、删除现有容器或更新容器的软件内容。
•自动化容器配置。用户为Kubernetes提供了一个节点集群,可用于运行容器化任务。然后,告诉Kubernetes每个容器需要多少CPU和内存(RAM)。然后,Kubernetes会自动将容器安装到节点上,以充分利用可用资源。简而言之,它可以动态扩展容器化应用程序及其资源。
•存储编排。Kubernetes使用户能够自动挂载选择的存储系统,包括本地存储、公共云提供商或存储区域网络。
•跨节点编排容器。容器通过使用其域名服务器(DNS)ID或IP地址公开。如果容器流量很高,Kubernetes还可以负载均衡并分配网络流量以保持稳定性。
•自我修复。Kubernetes重新启动失败的容器,替换容器,关闭不响应用户定义的运行状况检查的容器,并且在容器准备好之前不将其通告给客户端。
•安全管理。Kubernetes允许用户存储和管理身份验证数据,例如密码、OAuth令牌和SSH密钥。
综合所有这些,Kubernetes具有三大优势。
首先是稳定性,Kubernetes管理用户的容器。如果虚拟机、服务器甚至集群出现故障,Kubernetes将自动启动更多容器来承载负载。
然后是连续性。 Kubernetes使用户可以修补应用程序或将其完全更改而不会影响其操作。新的容器是在线购买的,而旧容器将会过期,并且它们提供的服务将继续运行。IT稳定性过去完全取决于服务器的正常运行时间。现在,有了容器和Kubernetes,一切都与服务正常运行时间有关。
另一个相关的优点是弹性。Kubernetes自动维护活动容器。这些称为副本集。当Pod不能随身带走其所有容器化应用程序时,副本集具有所需的容器,该容器已经启动并可以运行以接管负载。
简而言之,当以前的方法失败或需要大量停机时,基于Kubernetes的IT结构将与最新软件一起运行。
Kubernetes不能做什么
Kubernetes并不是万能的,不能什么都做。
例如,Kubernetes不是平台即服务(PaaS)系统。Kubernetes提供了类似于PaaS的服务的构建块,但是与Cloud Foundry不同,它没有提供构建云原生应用程序所需的编程工具。而且,尽管当然可以在Kubernetes上构建和使用持续集成(CI)/持续部署/(CD)系统,但它并不是固有的持续集成(CI)/持续部署/(CD)。另外,作为一种管理容器的方法,它不附带应用程序级别的服务,例如中间件或数据库。
正因为如此,Kubernetes有着大量的发行版,其中包括针对Kubernetes的Amazon Elastic Container Service(EKS)、Azure Kubernetes Service(AKS)、Google Kubernetes Engine(GKE)、IBM Cloud Kubernetes Service、Red Hat的OpenShift、Pivotal Container Service(PKS)和VMware Kubernetes引擎。除了提供在特定云上部署Kubernetes所需的工具外,它们每个都有其自己的特殊附加功能。
为什么Kubernetes是未来的选择
随着继续将应用程序从服务器和虚拟机迁移到容器,Kubernetes是不可避免的。即使使用诸如Ansible、Puppet或Salt之类的DevOps工具,对于系统管理员来说,根本也没有实际的方法来管理数百或数千个临时容器。它需要一个专用工具,而该工具就是Kubernetes。过去和现在都有其他容器编排工具。对于某些特殊用途,它们可能更适合一些企业。不过,一般来说,Kubernetes将是大多数企业的默认容器管理选择。
由于它可以跨多个平台运行,即使它们由竞争对手的云计算业务运行,Kubernetes也正成为混合云的流行选择。这并不容易,但是许多Kubernetes发行商都在致力于提供易于部署的、基于Kubernetes的混合云。这些将使用户能够执行诸如运行混合云之类的事情,该过程可将后端数据保留在私有云中,而将公共云用作前端接口。
综上所述,如果还没有运行Kubernetes,那么将会很快就会拥有。就像Linux从根本上改变了服务器操作系统的空间,虚拟机导致云计算的兴起一样,Kubernetes将引领用户进行基于容器的分布式计算。