初学者入门:Kubernetes 简介
Kubernetes (简称 K8s) 是一款备受欢迎的开源软件,它能够自动化容器化应用的管理流程。
云原生计算基金会 (CNCF) 的年度调查数据显示,高达 96% 的组织正在使用或计划采用 Kubernetes。全球有 580 万名开发者在使用 Kubernetes,这占据了全球后端开发人员的 31%。
Kubernetes 之所以受到青睐,是因为它能够通过提升可扩展性、可用性和缩短部署时间来优化技术应用。 许多开发者最初使用 Docker 这样的命令行工具来与容器进行交互,但 Kubernetes 提供了一种更为高级的抽象层,允许你通过声明式方法来定义应用程序及其基础设施,从而实现更高效的协作。
如果你是 Kubernetes 的新手,本文旨在为你提供入门指导,分享一些见解来帮助你快速上手。你将了解到 Kubernetes 如何帮助开发者提升其数字产品的能力。
什么是 Kubernetes,以及为什么你需要它?
Kubernetes 是一个开源的协调引擎(框架),用于自动化容器化应用程序的部署、扩展和管理。它尤其擅长处理诸如可预测性和高可用性等问题。
简单来说,假设你已经有一个容器化的应用程序。为了服务用户,你需要在多个容器中运行这个应用。管理这些容器可能会变得复杂,尤其当它们不在同一台机器上时。那么,解决方案是什么呢?
Kubernetes 通过提供一种有效的方法来无缝处理这些流程,从而解决这一问题。虽然你可能会将 K8s 与 Docker 等容器引擎相比较,但实际上它是一个容器编排器。作为一名初级开发者,你可能无需担心 K8s 的底层编排细节。你不太可能需要自己去搭建一个 K8s 集群,稍后我们会详细讨论。
然而,你将需要与基础设施团队所设置的集群进行交互。熟悉你将要操作的对象至关重要。在此之前,你需要对它的架构有一个高层次的理解,以把握其运行原理。
Kubernetes 的特性
Kubernetes 具有许多特性,使其成为运行容器和相关基础设施的理想选择。以下是一些主要特性:
- 自动部署、扩展和回滚:Kubernetes 会自动创建你指定数量的应用程序副本,并将它们分布在合适的硬件上。当节点出现故障时,它会自动重新安排容器。你还可以根据需求(例如 CPU 使用率)动态扩展副本数量。
- 服务发现、负载均衡和网络入口:Kubernetes 提供了独特的网络解决方案,包括内部服务发现和暴露容器的功能。
- 有状态和无状态应用程序:早期,Kubernetes 主要关注无状态容器。随着技术的不断进步,它现在可以容纳代表有状态应用程序的内置对象。任何类型的应用程序都可以在 Kubernetes 上运行。
- 存储编排:无论是本地文件系统、网络共享还是云端存储,Kubernetes 都为容器中运行的应用程序提供了持久存储(抽象)。这种抽象允许你定义存储需求,而无需关心底层基础设施的细节。虽然这超出了本文的范围,但它通过诸如持久卷 (PV)、持久卷声明 (PVC)、存储类和卷插件等机制实现。
- 声明式配置:Kubernetes 使用 YAML 文件(称为对象清单)来指定集群的期望状态。清单定义了集群应有的外观,包括应用程序实例、网络规则和其他配置。当你应用清单时,Kubernetes 会自动处理状态转换,而无需编写脚本。
- 多环境支持:你不仅限于在云端或开发工作站中使用 Kubernetes。几乎每个发行版都提供了匹配你特定用例的选项。主流云服务提供商如亚马逊云服务、谷歌云和微软 Azure 都提供托管的 Kubernetes 服务。对于本地使用,还有 Minikube 和 K3s 这样的单节点发行版。
- 高度可扩展性:Kubernetes 本身就是一个功能丰富的集合。 你可以通过扩展来提升其功能。 你可以构建自定义对象类型、运算符和控制器来简化你的工作流程。
Kubernetes 架构
Kubernetes 的核心架构包括一个主节点和多个工作节点。主节点负责指挥集群,而工作节点则按照主节点的指示运行应用程序。
资料来源:kubernetes.io
以下是对其架构的更详细的分解:
主节点
主节点负责维护集群状态,并决定每个节点的行为。主节点需要运行以下几个进程:
- API 服务器:所有集群通信都通过 API 服务器进行。它是集群组件之间交换信息的网关。它暴露了 Kubernetes API。它有两个主要角色:首先,它允许用户通过如 Kubectl 等工具与集群交互;其次,它验证和授权用户请求,确保只有授权用户可以执行操作。
- 调度器:调度器负责将应用程序(或 Kubernetes 工作负载对象)分配到工作节点。它会根据资源需求将 Pod 分配到合适的节点。在 Kubernetes 中,Pod 是最小的部署单元。
- 控制器管理器:该组件负责维护集群的稳定运行,例如处理节点故障和确保 Pod 数量正确。它会检测集群状态的变化,并在必要时采取措施恢复到期望状态。例如,如果 Pod 意外终止,控制器管理器会请求调度器选择一个新的节点来启动一个新的 Pod 作为替代,然后 kubelet 会负责启动新的 Pod。
- etcd:etcd 被称为集群的大脑。它是一个键值存储,用于保存集群配置信息。所有集群变更都保存在这里。通过备份这个分布式存储,你可以备份整个集群。请注意,etcd 只存储集群状态数据,不存储应用程序数据。
从节点
每个从节点都运行三个进程,使得 K8s 可以与其交互并在每个节点内启动 Pod。这些必要的进程如下:
- kubelet:kubelet 是 Kubernetes 的主要服务,它负责在节点上运行容器执行层。如果没有 kubelet,Kubernetes 就只是一个带有键值存储的 REST API。默认情况下,K8s 运行容器应用程序。容器彼此隔离,并与底层主机系统隔离。这有助于将应用程序的管理与彼此以及物理或虚拟基础架构分离。
尽管 API 准入控制可以拒绝 Pod 或添加额外的约束,但 kubelet 是特定节点上运行的 Pod 的最终批准者,而不是调度程序或 Daemonsets。总结一下,kubelet 与节点和容器交互。它还获取配置文件并使用容器运行时启动 Pod。
- 容器运行时:容器运行时负责运行容器。例如,你可以使用 Docker、rkt 等。
- kube-proxy:kube-proxy 为节点上的 Pod 提供抽象层,实现负载均衡等策略。每个节点都运行 kube-proxy,它为访问动态 Pod 的客户端提供虚拟 IP 地址。这种结构在实现负载均衡的同时,保持了较低的性能开销。
容器化如何工作
容器化涉及将软件应用程序的所有必需组件虚拟化为一个单元。容器包含应用程序运行所需的库、二进制文件和配置,但不包括内核资源或虚拟化硬件。
“顶层”容器运行时负责执行和管理容器资源。由于容器只包含基本组件和应用程序依赖项,因此它们比虚拟机更轻量级,启动速度更快。
另请阅读:容器与虚拟机:差异解析
如何安装和设置 Kubernetes
在对 Kubernetes 的理论进行了深入探讨之后,接下来我们将关注实际操作,包括容器实践经验。本教程将详细介绍如何在 Windows 操作系统上进行安装。
在 Windows 上安装 Kubernetes 有多种方法,你可以选择命令行或图形用户界面。你需要确保你的系统满足以下硬件和软件要求:
硬件方面,主节点至少需要 2GB 的内存,而工作节点至少需要 700MB 的内存。软件方面,需要启用 Hyper-V、安装 Docker Desktop、为每个节点分配唯一的 MAC 地址,并确保每个节点拥有唯一的 Product UUID。以下是详细的步骤:
安装和设置 Hyper-V
Hyper-V 是 Windows 的默认虚拟化软件,可以视为增强版的 VirtalBox。它允许你通过 Microsoft GUI 或命令行来管理虚拟机。要启用 Hyper-V,请按照以下步骤操作:
- 打开控制面板。
- 单击左侧面板中的“程序”。
- 在“程序和功能”页面下,单击“启用或关闭 Windows 功能”。
- 选择“Hyper-V”和“虚拟机监控程序”功能。
- 单击“确定”;你的计算机应该会自动重启,以便激活新设置。
在某些情况下,计算机可能会多次重启以确保所有配置都已正确设置。你可以通过在 PowerShell 中键入以下命令来验证安装是否成功:
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V
确认屏幕显示“Enabled”状态。
安装 Docker
正如你所知,Kubernetes 是一个构建在容器之上的容器编排工具;在这种情况下,Docker 是一个不错的选择。Kubernetes 与 Docker 进行通信,并在企业级别管理一切。下载适用于 Windows 的 Docker Desktop 开始行动。Docker Desktop 是简化 Dockerized 应用程序开发、运输和运行的首选。
这也是在 Windows 上使用 Hyper-V 和网络构建 Docker 应用程序的最快方式。安装成功后,只要运行 Docker Desktop,就可以在任何终端访问 Docker。有关安装的详细指南,你可以查阅 Docker 官方文档。如果在安装后遇到隐藏图标等问题,可以通过重启计算机来解决问题。
安装 Kubernetes
Docker GUI 允许你配置设置、安装和启用 Kubernetes。要安装 K8s,请按照以下步骤操作:
- 右键单击 Docker 托盘图标,然后选择“设置”。
- 单击“设置”后,从下拉菜单中选择“设置”。
- 在左侧面板中,选择“Kubernetes”,然后单击“应用”。
然后 Docker 将安装一些额外的软件包和依赖项。根据你的互联网速度,此过程大约需要五到十分钟。你可以使用 Docker 应用程序来确认一切正常。
由于可以使用 CLI 部署 Kubernetes 应用程序,因此你可能需要安装 K8s 仪表板,因为默认情况下未安装它。请按照以下步骤安装仪表板:
- 下载 YAML 配置文件。
- 使用此代码部署应用程序:
kubectl apply -f .recommended.yaml
- 通过运行
kubectl.exe get -f .recommended.yaml.txt
来确认一切都已正确设置。
要访问仪表板,请在 PowerShell 上运行以下命令(不要在 CMD 中运行):
- 运行以下代码:
((kubectl -n kube-system describe secret default | select-string “token:”) – split “+”)[1]
- 复制生成的令牌,然后运行
kubectl proxy
。
- 复制生成的令牌,然后运行
- 在你的浏览器中,打开此链接。
- 单击“令牌”并将你的令牌粘贴到此处。
- 登录。
如果操作成功,你的屏幕上应该会显示 K8s 仪表板。 现在,你可以通过图形界面来管理你的应用程序,而无需使用 CLI。
另请阅读:如何在 Ubuntu 18 上安装 Kubernetes
如何创建和管理 Kubernetes 集群
如果你已经按照以上步骤操作,你应该已经成功地在你的主机上安装了 Kubernetes。接下来,按照以下步骤在你的集群上创建并执行基本的管理任务:
- 配置网络:你需要设置集群节点之间的网络,以允许它们相互通信。
- 设置集群身份验证:为集群访问创建身份验证和授权机制。
- 设置主组件:包括 API 服务器、调度器和控制器管理器。
- 加入工作节点:使用集群设置过程提供的配置文件将工作节点连接到集群。
- 部署附加组件:你可以安装扩展以增强集群的功能。
- 管理工作负载:是时候部署你的应用程序了。
虽然这只是集群创建过程的概述,但它涉及到许多步骤和命令。以下是有关如何在部署前创建集群的官方文档指南,它应该可以作为你的指导手册。
如何使用 Kubernetes 部署你的第一个应用程序
使用 K8s 时最常用的命令是 kubectl action resource
,它允许你执行诸如创建或删除指定的资源等操作。
如果你遇到任何困难,可以在特定子命令后使用 --help
来获取更多信息。例如,Kubernetes get nodes --help
。使用命令 kubectl create deployment Kubernetes-bootcamp --image=gcr.io/google-samples/Kubernetes-bootcamp:v1
来部署你的第一个 K8s 应用程序。
总结
本指南是 Kubernetes 技术的入门介绍。 你已经了解了 Kubernetes 的优点、特性和架构。为了让你真正上手,你可能需要参考一些外部资源。这些资源会解释这些技术是如何在后台运行的。
虽然作为初学者要掌握整个技术栈可能看起来令人望而生畏,但本文旨在提供一个流畅的入门指南,帮助你快速开始使用 Kubernetes。你需要大量的实践才能真正熟悉这项技术。因此,建议你参考 Kubernetes 的官方文档作为参考。实践越多,你成为 K8s 专家的速度就越快。
接下来,你可以查阅更多的 Kubernetes 教程,以便让初学者快速上手。