《Kubernetes从入门到进阶》之一: 认识Kubernetes

发布时间 2023-12-26 12:11:40作者: 武装小灰灰

01

容器技术在早期的传统架构中,应用程序是直接部署在物理机上的。在这种场景下,由于无法对程序的资源使用进行限制,容易出现不同程序争抢资源的问题,并且程序之间还可能互相影响。这使得往往需要按照应用来划分机器,并造成了较大的资源浪费。

 

后来,虚拟机(VM)的出现改变了这种现状。通过将硬件层进行抽象,使得我们可以在一台物理机中分出多台虚拟机,从而实现资源的划分以及应用间的隔离。相比于传统架构而言,虚拟机在资源利用率和部署效率方面都有着较大的提升。

但虚拟机并非最终的形态,随着技术的发展,又出现了更加轻量级的容器技术。如果说,虚拟机的出现改善了对于资源的利用率和部署效率,那么容器则给我们带来了更加便捷和轻量化的方式。

容器技术是一种轻量级的操作系统虚拟化技术,通过在宿主机上创建不同的容器(container)从而实现资源的隔离与限制。

如下图所示,容器将资源的抽象提升到了更高的级别。容器提供与虚拟机类似的隔离和可扩展性,除了对硬件进行抽象之外 ,容器还共享宿主机的操作系统内核。因此,在容器内部只需要封装必要的软件工具以及相关的依赖即可,这让容器变得非常轻量化,并且有了更高的资源利用率。

 

 

容器技术由来已久 ,但直到Docker的出现才开始给其来新的生命力,并在一经推出后迅速风靡整个IT行业。以Docker为首的容器产品给软件行业带来了强大的快速复制、移植等能力,定义了新的软件标准化交付方式,并推动了DevOps的发展。

近年来,容器已在企业中得到了非常广泛的应用,基于各种业务目标而出现的容器产品越来越多,常见的有 Containerd、Docker、Podman等。

02

Kubernetes介绍Kubernetes(简称k8s)基于go语言开发,是由谷歌开源的一个容器编排平台。Kubernetes可用于调度、自动部署、管理和扩展容器应用,为用户提供了一个便捷、有效的容器管理平台。Kubernetes的前身是谷歌内部久负盛名的Brog系统,这是谷歌为了管理内部数以亿计的容器而研发的一款容器编排系统。在2014年,由谷歌工程师在Brog的基础上,开发出了Kubernetes并将其开源。可以说,Kubernetes一出生就站在了巨人的肩膀上,依托于谷歌十多年来在容器方面的实践经验,给其带来与众不同的出色能力,使其成为有史以来最成功的开源项目。

 

 

Kubernetes具有以下的功能特点:

  • 基于容器的自动部署、升缩和升级
  • 具有完善的集群管理能力,包含服务的注册、服务发现、负责均衡、故障发现等;
  • 提供跨主机、跨机房的资源调度能力
  • 提供丰富的插件和工具支持,可用于多样化的场景需求
  • 具有强大的开放性和兼容性,可支持任何语言、任何编程接口的服务;

2015 年,谷歌与Linux 基金会合作组建了云原生计算基金会(Cloud Native Computing Foundation,简称CNCF),并将 Kubernetes 项目捐赠给基金会。在容器编排系统领域,除了Kubernetes外,还有Mesos和Docker Swarm做为竞争对手。三者之间曾经平分秋色,但在2017年之后形势出现了根本性变化,多家知名厂商如AWS、阿里云、Racncher、Docker公司等开始提供对Kubernetes的支持,这使得其发展速度开始一骑绝尘,并在之后遥遥领先对手,最终成为该领域的事实标准被广泛使用。

 

03

为什么需要Kubernetes诸如Docker、Containerd等容器产品自身都带有相应的管理客户端,可用于对容器进行管理,执行如创建、修改、删除等操作。但这些只局限于单机的环境中,当面临较大规模使用时,如在几十台服务器中运行着成百上千个容器时,相关的管理工作将会变得极其复杂,甚至无法实现。

 

到时,我们会面临一系列需要解决的问题,比如 :当容器出现问题时,如何快速发现并修复;如何更合理的分配服务器资源;当节点出现故障时,如何快速将容器迁移到其他正常节点;如何跟踪并监控容器状态等等。

因此,当大规模的部署容器时,一套功能强大且运行稳定的容器编排系统就是必不可少的需求 。

如果说Docker的出现,推动容器技术改变了原有的软件交付模式,那么以Kubernetes 为代表的容器编排系统,则为大规模的容器使用奠定了坚实的基础。 当企业的IT规模足够庞大时,尝试将应用容器化并使用Kubernetes进行管理将成为一项战略性的工作,这能够带来足够多的收益,包括且不限于:

 1. 资源的合理利用

Kubernetes 可以帮助你更好地管理计算资源,从而提高资源利用率。它可以自动化容器的调度和伸缩,根据应用程序的需求动态地分配计算资源,避免资源浪费和过度配置。

2. 应用的高可用性

Kubernetes 可以帮助你更好地管理应用程序的运行状态,确保它们在任何情况下都能够运行。它可以监控容器的健康状态,并在出现故障时自动将容器替换为健康的实例,从而保证了应用程序的高可靠性和可用性。

3. 快速交付的能力。

使用 Kubernetes 可以帮助你更轻松地管理应用程序的生命周期,从而提高开发和运维效率。它可以自动化容器的部署、配置、监控和维护,让你的团队能够更快地交付新功能和更新。

4. 更好的可移植性

Kubernetes 可以帮助你更轻松地在不同的云平台和基础设施中部署应用程序。它提供了一致的 API 和部署模型,可以让你的应用程序在不同的环境中运行,并保持一致的行为和性能。

 

总之,Kubernetes可以为企业带来许多好处,对于那些希望在竞争激烈的市场中脱颖而出的企业来说,Kubernetes都是一个不可或缺的工具。