简介
Kubernetes 这个词的来源,是一个希腊词,意为舵手或飞行员。缩写K8s是通过用数字8替换“ ubernete ”的八个字母得到的。
Kubernetes 是一个可移植的,可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。它拥有一个庞大且快速增长的生态系统(growing ecosystem)。Kubernetes 的服务,支持和工具被广泛使用。
Kubernetes 消除了部署和扩展容器化应用程序涉及的许多手动过程。例如,开发人员可以将运行Linux容器的主机组集群在一起,而 Kubernetes 可以帮助您轻松高效地管理这些集群。这些集群可以跨越公共云,私有云或混合云中的主机。因此,Kubernetes 是托管需要快速扩展的云原生应用程序的理想平台,比如通过 Apache Kafka 进行实时数据流传输。
Kubernetes 最初是由Google的工程师开发和设计的。谷歌(Google)是Linux容器技术的早期贡献者之一,并公开谈论了如何将谷歌所有的服务在容器中运行(这是Google的云服务背后的技术)。Google每周产生超过20亿个容器部署,所有部署均由内部平台 Borg 提供支持。Borg 是 Kubernetes 的前身,多年来开发 Borg 的经验教训成为大多数 Kubernetes 技术背后的支持。
想要更深入了解 Kubernetes 的前世今生,需要了解项目部署的历史。
项目部署历史演化
图片地址:https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/#going-back-in-time
传统部署时代(Traditional deployment era): 早期,部署在物理服务器上运行应用程序。无法为物理服务器中的应用程序定义资源边界,这会导致资源分配问题。例如,如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况,结果,另一个应用程序的性能将下降。一种解决方案是在不同的物理服务器上运行每个应用程序。但是,这并没有有效解决因为产生资源利用不足,而且维护诸多物理服务器的成本也不菲。
虚拟化部署时代(Virtualized deployment era):虚拟化提供了解决方案,它允许您在单个物理服务器的CPU上运行多个虚拟机(VM)。虚拟化允许在VM之间隔离应用程序,并提供安全级别,因为一个应用程序的信息不能被另一应用程序自由访问。
虚拟化可以更好地利用物理服务器中的资源,并可以实现更好的可伸缩性,因为可以轻松地添加或更新应用程序,降低硬件成本等等。借助虚拟化,开发人员可以将一组物理资源呈现为一组一次性( a cluster of disposable)虚拟机。
每个虚拟机都是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。
容器部署时代(Container deployment era):容器类似于VM,但是它们具有轻松的隔离属性,可以在应用程序之间共享操作系统(OS)。因此,容器是轻量级的。与VM相似,容器具有自己的文件系统,CPU,内存,进程空间等。由于它们与基础架构分离,因此可以跨云和OS分发进行移植。
容器之所以受欢迎,是因为它们提供了额外的好处,例如:
- 敏捷的应用程序创建和部署:与使用VM镜像相比,容器镜像创建的简便性和效率更高。
- 持续开发,集成和部署:通过快速轻松的回滚(由于镜像不可更改),提供可靠且频繁的容器镜像构建和部署。
- 开发和运营的关注点分离:在构建/发布时而不是在部署时创建应用程序容器镜像,从而将应用程序与基础架构分离。可观察性不仅可以显示操作系统级别的信息和指标,还可以显示应用程序的运行状况和其他信号。
- 跨开发,测试和生产的环境一致性:在便携式计算机上与在云服务商进行的是相同地运行。
- 云服务和操作系统分发的可移植性:可在Ubuntu,RHEL,CoreOS,本地,Google Kubernetes Engine和其他任何地方运行。
- 以应用程序为中心的管理:提高抽象级别,从在虚拟硬件上运行操作系统到使用逻辑资源在操作系统上运行应用程序。
- 松散耦合,分布式,弹性,解放的微服务:应用程序被分解成多个较小的独立部分,并且可以动态部署和管理,而不是在一台大型单用途机器上运行的整体式堆栈。
- 资源隔离:可预测的应用程序性能。
- 资源利用:高效率和高密度。
Kubernetes的作用
基于容器的微服务架构极大地改变了开发和运营团队测试和部署现代软件的方式。容器通过使应用程序易于扩展和部署来帮助公司实现现代化,但是容器还通过创建全新的基础架构生态系统而带来了新的挑战和更高的复杂性。
大型和小型软件公司现在都每天要部署数千个容器实例,这是他们必须管理如此复杂的规模。那么他们如何做到的呢?
Kubernetes 使在微服务架构中部署和操作应用程序变得容易。它是通过在一组主机之上创建抽象层来实现的,以便开发团队可以部署其应用程序并让 Kubernetes 管理。
Kubernetes 为开发者提供了在物理或虚拟机集群上调度和运行容器的平台。更广泛地说,它可以帮助开发者在生产环境中部署完全实现并依赖基于容器的基础结构。而且由于 Kubernetes 全部涉及自动化操作任务,因此开发者可以为容器执行许多其他应用程序平台或管理系统可以执行的许多相同操作。
Kubernetes 的操作:
- 跨多个主机协调容器。
- 更好地利用硬件,以最大化运行企业应用程序所需的资源。
- 控制和自动化应用程序部署和更新。
- 挂载并添加存储以运行有状态的应用程序。
- 快速扩展容器化应用程序及其资源。
- 以声明方式管理服务,以确保已部署的应用程序始终以开发者部署它们的方式运行。
- 通过自动放置,自动重启,自动复制和自动缩放功能对应用程序进行运行状况检查和自我修复。
为什么需要Kubernetes?
实际的生产应用程序跨越多个容器。这些容器必须跨多个服务器主机部署。 容器的安全性是多层的,可能会很复杂。这就是 Kubernetes 可以提供帮助的地方, Kubernetes 为开发者提供了针对这些工作负载大规模部署容器所需的编排和管理功能。 Kubernetes 编排允许开发者构建跨多个容器的应用程序服务,在集群中调度这些容器,扩展这些容器并随时管理这些容器的运行状况。借助 Kubernetes ,开发者可以采取切实措施提高IT安全性。
Kubernetes 还需要与网络,存储,安全,遥测和其他服务集成,以提供全面的容器基础架构。
图片地址:http://newrelic-wpengine.netdna-ssl.com/wp-content/uploads/kubernetes_architecture.jpg
参考资料
What is Kubernetes(什么是Kubernetes)
What is Kubernetes(什么是Kubernetes)
What Is Kubernetes? An Introduction to the Wildly Popular Container Orchestration Platform.(什么是K8S,一个受欢迎的容器编排平台)
What is Kubernetes (k8s)? Introduction, Glossary, and Definitions for Kubernetes(什么是Kubernetes(k8s)?Kubernetes的简介,术语和定义)