一、案例概述
传统部署时代:
早期是在物理服务器上运行应用程序。无法为物理服务器中的应用程序定义资源边界,这会导致资源分配出现问题。例如:如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况,结果可能会导致其他应用程序的性能下降。一种解决方案是在不同的物理服务器上运行每个应用程序,但是由于资源利用不足而无法扩展,并且组织维护许多物理服务器的成本很高。
虚拟化部署时代:
虚拟化功能允许在单个物理服务器上运行多个虚拟机(VM)。虚拟化功能可以实现应用程序在VM之间隔离,并提供安全级别,因此一个应用程序的信息不能被另一应用程序自由地访问。
因为虚拟化可以轻松地添加或更新应用程序、降低硬件成本等等,所以虚拟化可以更好地利用物理服务器中的资源,并可以实现更好的可伸缩性。大家可以理解为每个VM是一台完整的计算机,在虚拟化硬件之上运行所有应用组件,包括其自己的操作系统。
容器部署时代:
容器类似于VM,但是它们具有轻量级的隔离属性,可以在应用程序之间共享操作系统(OS)。因此。容器具有自己的文件系统、CPU、内存、进程空间等。由于它们与基础架构分离,因此可以跨云和OS分发进行移植。
随着Docker 技术的发展和广泛流行,云原生应用和容器调度管理系统成为IT领域大热的话题。由于虚拟机镜像大、镜像标准、打包流程和工具不统一,导致业界无法广泛接受,限制了云原生应用的发展。而Docker 技术的出现正好解决了云原生应用构建、交付和运行的瓶颈,使得构建云原生应用成为使用Docker的开发者的优先选择。那么Docker从单机走向集群已经成为必然趋势。Kubernetes作为当前唯一一个被广泛认可的Docker分布式解决方案,在未来几年内,会有大量的系统选择它。
二、Kubernetes概述
Kubernetes是由Google在2014年6月开源的容器编排调度引擎,使用Go语言开进行发,最初源于谷歌内部Brog引擎。由于Kubernetes的K和s间有8个字母,因此国内行业人员简称为K8S。 2015年7月Kubernetes V1.0正式发布,截止到目前最新稳定版本是V1.21.x。Kubernetes 拥有一个庞大且快速增长的生态系统。
Kubernetes 这个名字,起源于古希腊,是舵手的意思,所以它的 logo 即像一张渔网又像一个罗盘,谷歌选择这个名字还有一个深意:既然docker把自己比作一只鲸鱼,驮着集装箱,在大海上遨游,google 就要用Kubernetes去掌握大航海时代的话语权,去捕获和指引着这条鲸鱼按照主人设定的路线去巡游。
Kubernetes 是一个可移植、可扩展的开源Docker容器编排调度引擎,和Docker容器结合在一起,可实现容器技术的分布式架构方案。主要用于自动化部署、扩展和管理容器类应用,提供资源调度、部署管理、服务发现、扩容缩容、监控等功能。它提供完善的管理工具,涵盖开发、部署测试、运维监控等各个环节。它的目标不仅仅是一个容器编排系统,而是提供一个应用规范,用户可以描述集群的架构,定义服务的最终状态,Kubernetes可以将系统达到和维持在这个状态。对于负载均衡、服务发现、高可用、滚动升级、自动伸缩等容器云平台的功能要求有原生支持。
随着对K8S系统架构与设计理念的深入了解,可以发现K8S系统正是为运行云原生应用而设计考虑。使得基于K8S系统设计和开发生产级的复杂云原生应用,变得像启动一个单机版容器服务那样简单易用。
Kubernetes可以调度计算集群节点、动态管理节点上应用,并保证它们按用户期望状态运行。通过使用「Labels(标签)」和「Pods(荚)」的概念,Kubernetes将应用按逻辑单元进行分组,方便管理和服务发现。
官网:Kubernetes
文档:https://kubernetes.io/zh/docs/home/
2.1、使用Kubernetes具备的好处
- 具备微服务架构
微服务架构的核心是将一个巨大的单体应用分解为很多小的互相连接的微服务。一个微服务背后可能有多个实例副本支撑,副本的数量可能会根据系统负荷变化而进行调整,而K8S 平台中内嵌的负载均衡器发挥着重要作用。微服务架构使得每个服务都可以由专门的开发团队来开发,开发者可以自由选择开发技术,这对于大规模团队来说很有价值。另外,每个微服务独立开发、升级、扩展,使得系统具备很高的稳定性和快速迭代进化能力。
- 具备超强的横向扩容能力 <