在开始这篇文章之前,我想问你几个问题。您或您的团队是否需要使用Kubernetes来协调容器?你想学习Kubernetes吗?你不知道从哪里开始?你愿意改变你的组织吗?是否要简化容器软件编排?那么我想告诉你,这篇文章就是所有这些问题的答案。

kubernetes是用来简化事情的,本文是用来为您简化kubernetes的!Kubernetes是由谷歌开发的一个强大的开源系统。它是为在集群环境中管理容器化应用程序而开发的。Kubernetes已经很受欢迎,并且正在成为在云中部署软件的新标准。

学习Kubernetes并不困难,而且它提供了很大的力量。学习曲线有点陡。所以让我们以一种简单的方式来学习Kubernetes。本文介绍了Kubernetes的基本概念、体系结构及其解决问题的方法等。

什么是 Kubernetes?

在这里插入图片描述
Kubernetes提供或事实上,它本身就是一个系统,用于跨多台机器运行和协调应用程序。系统管理容器化应用程序和服务的生命周期。为了管理生命周期,它使用不同的方法来提高可预测性、可扩展性和高可用性。

kubernetes的用户能自由的决定如何定义的应用程序的运行和交互,还允许用户对服务进行扩缩容和滚动更新,不同的应用程序之间切换和更新版本等等。kubernetes还提供不同的接口和平台原生 定义/管理 应用程序。

Kubernetes 硬件部分

运行Kubernetes需要各种不同类型的硬件。但要了解一件事就是Kubernetes本身不需要硬件,所有的硬件为了运行功能系统。

Nodes

Kubernetes中的node是什么?Kubernetes最小的计算单元被称为node。它是一个单一的机器,驻留在一个集群中。node不一定需要是物理机器或硬件的一部分。它可以是物理机,也可以是虚拟机。对于数据中心,node是物理机器。同样,对于Google云平台,node是虚拟机。目前,我们正在讨论Kubernetes的硬件,所以让我们相应地考虑一下,但不要将node限制为“硬件部分”。

在这里插入图片描述

任何机器中的node总是有一个抽象层。但是在这里,没有必要担心机器的特性。实际上,我们可以简单地将每台机器看作一组CPU和RAM资源。这些机器在一个集群中,它们的资源可以根据需要使用。在Kubernetes中,你应该这么认为,一旦你给予任何机器资源的自由使用权,系统就会变得灵活和动态。现在任何机器都可以替代Kubernetes集群中的任何其他机器。

Cluster

我们已经讨论了node,对吗?它们看起来是小而可爱的处理单元。他们在自己的小房子里工作。所有这些听起来都很完美,但这还不是Kubernetes的方式!集群就出现了。您不需要担心单个node的状态,因为它们是集群的一部分。例如,如果单个node的性能不好,那么应该有人来管理所有这些。此外,集群是多个node的集合。所有node将它们的资源集中在一起,共同构成一台强大的机器。

在这里插入图片描述

集群是智能的。你知道为什么吗?当程序部署到集群上时,它会动态地处理分发。简而言之,它将任务分配给各个node。在这两个过程之间,如果添加或删除了任何node,集群将根据需要转移工作。程序员不需要把精力集中在这样的事情上,比如哪台机器正在运行代码等等。

Persistent Volumes

如前所述,程序在集群上运行,由node提供动力。但它们不在特定node上运行。程序动态运行。因此,需要存储信息,并且不能在任何文件系统中随机存储。为什么?例如,程序将数据保存到文件中。但稍后,程序被重新定位到另一个node。下次程序需要该文件时,它将不在预期的位置。位置地址已更改。为了解决这个问题,与每个node相关的传统本地存储被认为是保存程序的临时缓存。但是任何本地保存的数据都不可能持久。

在这里插入图片描述

那么谁永久地存储数据呢?是的,Persistent Volumes永久存储它。集群管理所有节点的CPU和RAM资源。但是,集群不负责将数据永久存储在Persistent Volumes中。本地驱动器和云驱动器可以像Persistent Volumes一样连接到集群。这类似于将外部驱动器插入集群。Persistent Volumes提供文件系统。它可以挂载到集群上,而不与任何特定node相关联。

这是Kubernetes的硬件部分。现在让我们继续讨论软件部分。

Kubernetes 软件部分

Kubernetes的总体概念基于软件。所以这是Kubernetes的主要部分。

Containers

在kubernetes中,Linux容器承载程序。这些容器是全球通用的,并且已经有预构建的镜像。镜像可以部署在Kubernetes上。你知道什么是容器化吗?它允许您创建Linux执行环境。程序及其依赖项打包在一个文件中,并在Internet上共享。因此,任何人都可以下载容器并根据需要在其基础结构上部署它。只需一点设置,部署就轻松了。容器可以在程序的帮助下创建。这样就可以形成有效的CI和CD管道。

容器能够处理多个程序。但建议每个容器限制一个进程,因为它有助于故障排除。更新容器很容易,如果容器很小,部署也很容易。最好是有许多小容器,而不是一个大容器。

Pod

Kubernetes有一些独特的特性,其中之一就是它不直接运行容器。而是将一个或多个容器包装成一个pod。pod的概念是,同一pod中的任何容器都使用相同的资源和相同的本地网络。其好处是容器可以轻松地相互通信。它们是孤立的,但很容易通信。

这些pod可以在Kubernetes中复制。例如,一个应用程序变得流行,单个pod无法承受负载。此时,Kubernetes可以根据需要配置为部署Pod的新副本。但不必只在重载期间进行复制。一个Pod也可以在正常情况下复制。这有助于统一的负载平衡和抵抗故障。

在这里插入图片描述

pod可以容纳多个容器,但如果可能,一个pod应限制一个或两个容器。原因是这些pod可以作为一个整体上下扩展。pod中的容器也必须与pod一起缩放。另一方面,这导致资源浪费和昂贵的账单。为了避免这一切,把pod限制在几个容器内。如果你遇到“side-cars”这个词,它的意思是辅助容器。因此,存在主流程容器,并且可能存在一些辅助容器。

Deployment

在这里插入图片描述
如果您注意到,pods是kubernetes中的基本单位。但它们不是直接在集群上启动的。它们由多个抽象层管理。总的来说,这就是deployment。主要目的是声明一次运行的副本数。当添加deployment时,它会增加pod的数量并监视它们。同样,如果pod不再存在,那么它的部署会重新创建它。

有趣的是,通过deployment,不需要处理pods。只需声明系统的状态,其他一切都将自动管理。

迈向成功之路 Ingress

我们已经讨论了kubernetes的所有基本概念。使用它们,您可以创建一个node集群。一旦集群建立起来,就是时候在集群上启动pods部署了。但是,您将如何允许应用程序的外部流量?我们还没有讨论过这个问题。

在这里插入图片描述

根据kubernetes的概念,它提供了Pod和外部世界之间的隔离。要与Pod中运行的服务通信,外部人员需要打开一个通道。该通道将作为通信媒介,该通道称为Ingress。

向集群添加Ingress的方法有很多种。最常见的是通过 Ingress Controller 或负载平衡器。我们可以讨论这两种方法之间的区别,但目前不需要这样做。它更具技术性。现在,你应该明白,进入是重要的Kubernetes集群,虽然你的一切都是正确的,但如果你不考虑Ingress,你将无法到达任何地方!

Kubernetes是如何解决这个问题的?

在讨论了kubernetes的部署部分之后,有必要了解kubernetes的重要性。

容器编排和Kubernetes

容器是轻量级、可扩展和独立的虚拟机。容器可以链接在一起以设置安全策略、限制资源利用率等。如果您的应用程序基础结构与下面图片类似,则需要容器协调。它可能是运行在几个容器上的nginx/apache+php/python/ruby/node.js应用程序,与复制的数据库通信。容器编排将帮助您自己管理所有内容。

在这里插入图片描述

考虑到您的应用程序在不断增长。例如,您继续添加更多的特性/功能,并且在某个时间点,您意识到它突然变成了一个巨大的整体。现在,管理这个庞大的应用程序是不可能的,因为它会耗尽您的CPU和RAM。因此,您最终决定将应用程序拆分为更小的块。每个人都有一个特定的任务。现在,您的基础结构如下所示:

在这里插入图片描述

现在,为了获得更好的异步性能,您需要一个带有一些队列系统的缓存层。现在,您需要考虑一些挑战,如服务发现、负载平衡、运行状况检查、存储管理、自动伸缩等。

在如此紧张的情况下,谁会来帮助你?是的,容器编排将是您的救世主!原因是容器编排非常强大,可以解决大多数挑战。

那么有什么选择呢?主要参与者是Kubernetes、AWS ECS和Docker Swarm。在所有这些中,Kubernetes是最受欢迎的!它拥有最大的社区,正在最大限度地实施。Kubernetes解决了所描述的所有主要问题。它是可移植的,可以在大多数云提供商、裸机、混合机以及所有这些设备的组合上运行。它也是可配置的、模块化的,并提供自动放置、自动重启、自动复制和容器自动修复等功能。

原文链接

Logo

开源、云原生的融合云平台

更多推荐