面向开发人员的 Kubernetes 概念讲解

2025-06-09

面向开发人员的 Kubernetes 概念讲解

Kubernetes 架构 2020

图片来源:Platform9

使用 Docker,您可以通过简单的 Docker run 命令运行应用程序的单个实例。在本例中,要运行基于 Node JS 的应用程序,您可以运行 docker run nodejs 命令。但这仅仅是在一台 Docker 主机上部署应用程序的一个实例。当用户数量增加,该实例不再能够处理负载时,您可以通过多次运行 Docker run 命令来部署应用程序的额外实例。所以,您必须自己动手,密切关注应用程序的负载和性能,并自行部署额外的实例。不仅如此,您还必须密切关注这些应用程序的健康状况。

容器编排

如果容器发生故障,您应该能够检测到,并再次运行 Docker run 命令来部署该应用程序的另一个实例。那么 Docker 主机本身的健康状况如何呢?如果主机崩溃且无法访问怎么办?

替代文本

托管在该主机上的容器也会变得无法访问。那么,为了解决这些问题,您需要一位专门的工程师来监控容器的状态、性能和健康状况,并采取必要的措施来补救。但是,当您部署了包含数万个容器的大型应用程序时,这种方法并不实用。您可以构建自己的脚本,这在某种程度上可以帮助您解决这些问题。容器编排就是一个解决方案。它包含一组工具和脚本,可以帮助您在生产环境中托管容器。

通常,容器编排解决方案由多个可托管容器的 Docker 主机组成。这样,即使其中一个主机发生故障,应用程序仍然可以通过其他主机访问。容器编排解决方案允许您使用单个命令轻松部署数百或数千个应用程序实例。

替代文本

一些编排解决方案可以帮助您在用户增加时自动扩展实例数量,并在需求减少时自动缩减实例数量。有些解决方案甚至可以帮助您自动添加额外的主机来支持用户负载。容器编排解决方案不仅支持集群和扩展,还支持跨不同主机的容器之间的高级网络连接,以及跨不同主机对用户请求进行负载均衡。它们还支持在主机之间共享存储,以及集群内的配置管理和安全性。

编排解决方案

目前市面上有多种容器编排解决方案——Docker 有 Docker Swarm,谷歌的 Kubernetes 以及 Apache 的 Mesos。Docker Swarm 的设置和启动非常简单,但它缺少一些复杂的生产级应用程序所需的高级自动扩展功能。而 Mesos 的设置和启动相当困难,但支持许多高级功能。

Kubernetes 可以说是最受欢迎的,虽然设置和启动起来有点困难,但它提供了许多自定义部署的选项,并支持许多不同的供应商。Kubernetes 现在已获得所有公有云服务提供商(例如 GCP、Azure 和 AWS)的支持,并且 Kubernetes 项目是 GitHub 上排名靠前的项目之一。使用 Docker,您可以通过运行 Docker run 命令,使用 Docker CLI 运行应用程序的单个实例,这非常棒,运行应用程序从未如此简单。使用 Kubernetes,您可以使用 Kubernetes CLI(称为 kubectl),通过单个命令运行同一应用程序的 1000 个实例。

替代文本

Kubernetes 只需一条命令即可将其扩展到 2000 个实例,甚至可以配置 Kubernetes 自动执行此操作,以便实例和基础架构本身能够根据用户负载进行扩展和缩减。Kubernetes 可以以滚动升级的方式升级这 2000 个应用程序实例,只需一条命令即可逐个升级。如果出现问题,它可以帮助您通过一条命令回滚这些镜像。Kubernetes 可以通过 AB 测试方法,仅升级部分实例来帮助您测试应用程序的新功能。

Kubernetes 开放架构支持众多不同的网络和存储供应商。您能想到的任何网络或存储品牌都提供 Kubernetes 插件。Kubernetes 支持多种身份验证和授权机制。所有主流云服务提供商都原生支持 Kubernetes。

替代文本

Docker 和 Kubernetes 之间的关系

Kubernetes 使用 Docker 主机以 Docker 容器的形式托管应用程序。其实,它并不一定总是 Docker。Kubernetes 也支持原生的 Docker 容器,例如 rocket 或 crier,但让我们快速了解一下 Kubernetes 的架构。Kubernetes 集群由一组节点组成。
让我们从节点开始。节点是安装了 Kubernetes 软件设置工具的物理或虚拟机。节点是工作机器,Kubernetes 将在其上启动容器。但是,如果运行应用程序的节点发生故障,该怎么办?显然,我们的应用程序会宕机。因此,您需要拥有多个节点。

集群是一组组合在一起的节点。这样,即使一个节点发生故障,您的应用程序仍然可以从其他节点访问。现在,我们有了一个集群,但谁负责管理这个集群?集群成员的信息存储在哪里?如何监控节点?当节点发生故障时?如何将故障节点的工作负载转移到另一个工作节点?这时,主节点就派上用场了。主节点是安装了 Kubernetes 控制平面组件的节点。

替代文本

主节点监视集群中的节点,并负责工作节点上容器的实际编排。

当你在系统上安装 Kubernetes 时,你实际上是在安装以下组件:API 服务器、Etcd 服务器、Kubelet 服务、包含运行时、类似 Docker 的引擎以及一堆控制器和调度程序。

替代文本

API 服务器充当 Kubernetes 的前端。用户、管理设备、命令行界面都通过与 API 服务器通信来与 Kubernetes 集群交互。接下来是 Etcd 键值存储。Etcd 是一个分布式、可靠的键值存储,Kubernetes 使用它来存储用于管理集群的所有数据。想象一下,当你的集群中有多个节点和多个主节点时,Etcd 会将所有这些信息以分布式方式存储在集群中的所有节点上。Etcd 负责在集群内实现日志记录,以确保主节点之间不存在冲突。

调度器负责在多个节点之间分配工作或容器。它会查找新创建的容器并将其分配到各个节点。控制器是编排的大脑,负责在节点容器或端点发生故障时进行通知和响应。在这种情况下,控制器会决定启动新的容器。
容器运行时是用于运行容器的底层软件,在我们的例子中,它恰好是 Docker。最后,Kubelet 是在集群中每个节点上运行的代理。该代理负责确保容器在节点上按预期运行。

最后,我们还需要了解一些有关命令行实用程序之一的知识,该实用程序称为 Kube 命令行工具或 Kube 控制工具或 Kube cuddle,因为它也称为 Kube 控制工具,即 Kubernetes CLI,用于在 Kubernetes 集群上部署和管理应用程序以获取集群相关信息、获取集群中节点的状态以及许多其他内容。kubectl run 命令用于在集群上部署应用程序,Kube control cluster info 命令用于查看有关集群的信息。kubectl get nodes 命令用于列出集群的所有节点。因此,要在数百个节点上运行应用程序的数百个实例,我只需要像这样的单个 Kubernetes 命令。

替代文本

好了,目前就这些了。简单介绍一下 Kubernetes 及其架构。目前我们在 KodeKloud 上有四门关于 Kubernetes 的课程。这些课程将帮助你从零基础的初学者晋升为认证专家。快来看看吧。

Kubernetes 入门指南

认证 Kubernetes 管理员(CKA)

Kubernetes - 从初学者到专家

认证 Kubernetes 应用程序开发人员(CKAD)

鏂囩珷鏉ユ簮锛�https://dev.to/kodekloud/kubernetes-concepts-explained-for-developers-22p
PREV
云不可知论架构的幻觉
NEXT
初学者脚本