你需要立即学习 Kubernetes!!🚀
我为什么要学习 Kubernetes?🤔
因为 Kubernetes 只需一个命令就可以部署 100 个 Docker 容器🤯
本文面向 Kubernetes 初学者。本文以网站扩展为例,帮助您理解 Kubernetes 的概念。
先决条件:
- 计算机网络
- Docker
什么是 Kubernetes?🤔
Kubernetes(K8s)是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,并支持声明式配置和自动化。😵💫
没明白?☹️,我知道!
让我解释一下:
Kubernetes解决了 Docker 容器或任何类型容器的一个主要问题。🛠️
让我们通过创建一个 cookie 网站💻来看看 Docker 的问题,我们将在其中销售 cookie🍪,并将其部署在 docker 容器上,因为它具有良好的隔离环境、更好的资源利用率等等。
Docker的问题:
注意:在本博客中,我不会指导您如何在 Docker 中创建和运行网站。我只是用一种情况来演示这个问题。
因此,我已经在 Docker 容器中部署了我们的 Cookie 网站(cookies.com)
💻,现在猜猜人们疯狂地购买我们的 Cookie🍪,而且我们的网站运行得非常好——事实上,有点太好了——它无法承受并且崩溃了。🤯 不仅如此,它运行的服务器或主机🖥️已经宕机了几次,导致了几次中断,我们该如何解决呢?🤔
让我们创建另一个主机🖥️,这样我们就可以在另一个主机上运行第二个容器了。使用 Docker 操作非常简单。只需一个简单的命令就可以完成。😋
但是等等,我们还没有完成,因为我们需要确保当人们访问网站时点击cookies.com ,它可以转到服务器 1 或服务器 2,这通常是通过负载均衡器完成的,所以我们需要找出如何做负载均衡器。😲
现在两个服务器都在使用,因为它们是负载平衡的,所以如果一个服务器出现故障,另一个服务器仍可继续运行。👍
人们非常喜欢我们的饼干🍪,他们访问我们的网站的人越来越多。我们的浏览量、访问次数和购买量都很高。😲
我们的服务器再也承受不住了,又崩溃了,我们该怎么办?
每次添加新服务器,我们都要为该服务器设置容器,然后设置负载均衡器。如果网站流量持续增加,网站再次崩溃,
我们就不得不重复这个过程……😡
我们需要一个解决方案。我们需要自动化这个过程,或者以某种方式进行编排,或许可以使用容器编排。🤔
问题解决方案:
这就是Kubernetes(K8s)发挥作用的地方。它将处理所有垃圾。
让我们看看如何:
由于Kubernetes是一个容器编排器,部分设置已经完成,所以我们仍然需要服务器和某种容器运行时,在我们的例子中是Docker。Kubernetes
基本上会帮助我们改进 Docker 。
那么我们从哪里开始呢?🤔
Kubernetes 架构:
我们首先会引入一个新的服务器,它将负责管理我们的服务器,我们称之为Master组件。Master
负责指导服务器运行,并确保服务器正常运行。
我们确实需要将我们的服务器纳入团队,因此我们将在这些服务器上安装 Kubernetes,其中将包括两个组件,即Kube-Proxy 和kubelet。
在安装了这两个组件以及容器运行时(在我们的例子中是Docker )之后,它们现在已成为团队的一部分。这些服务器或机器称为工作节点(Worker Node),通常简称为节点(Node)。
这些组件只是 Master 控制它们的一种方式。
库贝莱特:
Kubelet 只是一个 Kubernetes 进程,它使集群能够相互通信或相互沟通并在这些节点上执行某些任务,例如运行应用程序进程。
Kube-代理:
Kube-proxy 是一个实现了 Service 抽象的网络代理/负载均衡器。它对
节点上的 iptables 规则进行编程,将服务 IP 请求重定向到其注册的某个后端 Pod。
什么是 Kubernetes 集群?
Kubernetes 集群是节点机器的集合,包括主节点和工作节点。
Master与其他服务器或节点一样,但它拥有我们为其分配的特定组件和任务。Master
有四个作业或组件,分别是Kubernetes API 服务器、调度程序、控制器管理器和 etcd。
这些只是在 Master 节点上运行的进程,对于集群的正常运行和管理至关重要。
Kubernetes API 服务器:
API 服务器是 Kubernetes 集群的入口。不同的 Kubernetes 客户端会与它交互,例如,如果你使用 Kubernetes 仪表盘,它就是UI (用户界面);如果你使用某些脚本和自动化技术,它就是API;如果你使用CLI(命令行界面),它就是 API。
控制器管理器:
控制器管理器基本上会概述集群中发生的情况,是否需要修复某些东西,或者容器是否停止并且需要重新启动等。
调度程序:
调度程序主要负责根据每个节点的工作负载和可用的服务器资源,将容器调度到不同的节点上。因此,它是一个智能的进程,它会根据工作节点上的可用资源,决定下一个容器应该调度到哪个工作节点上。
etcd:
它是一个键值存储,基本上可以随时保存 Kubernetes 集群的当前状态,因此它包含所有配置数据以及每个节点及其内每个容器的所有状态数据。
备份和恢复实际上是通过这些 etcd 快照进行的,因为您可以使用该 etcd 快照恢复整个集群状态。
什么是虚拟网络?
虚拟网络也是 Kubernetes 中非常重要的组件,它使工作节点和主节点能够相互通信。它基本上将集群内的所有节点变成了一台强大的机器,拥有所有单个节点的资源总和。
这里需要注意的是,工作节点由于运行实际的应用程序,负载最大,因此规模更大,资源也更多。而主节点仅运行少量主进程,因此不需要太多资源。
但是,主节点比单个工作节点重要得多,因为如果您失去主节点访问权限,您将无法再访问集群,这意味着您必须随时备份主节点。
在生产环境中,通常至少会有两个主节点,但您可以拥有多个主节点。这样,即使一个主节点宕机,集群仍能平稳运行,因为还有其他主节点可用。
在下一篇文章中,我们将介绍主要的 Kubernetes 组件,并逐一详细讨论它们