快速掌握Kubernetes:从基础到实践
立即解锁
发布时间: 2025-08-12 00:06:56 阅读量: 2 订阅数: 9 

# 快速掌握 Kubernetes:从基础到实践
## 1. 作者与资源信息
### 1.1 作者介绍
Elton Stoneman 是一位 Docker 船长、多年的微软 MVP,也是 Pluralsight 和 Udemy 上数十门在线培训课程的作者。他大部分职业生涯都在微软领域担任顾问,设计和交付大型企业系统。后来他迷上了容器技术,加入 Docker 工作了三年,现在是一名自由顾问和培训师,帮助各阶段的组织进行容器化转型。他在 [博客](https://blog.sixeyed.com) 和 Twitter(@Elton - Stoneman)上分享关于 Docker 和 Kubernetes 的内容,并在 [YouTube](https://eltons.show) 上定期进行直播。
### 1.2 相关资源
- **Twitter**:[@Elton - Stoneman](https://twitter.com/Elton - Stoneman)
- **博客**:[https://blog.sixeyed.com](https://blog.sixeyed.com)
- **YouTube**:[https://youtube.com/eltonstoneman](https://youtube.com/eltonstoneman)
- **代码下载**:
- Manning 网站:[https://www.manning.com/books/learn - kubernetes - in - a - month - of - lunches](https://www.manning.com/books/learn - kubernetes - in - a - month - of - lunches)
- GitHub:[http://github.com/sixeyed/kiamol](http://github.com/sixeyed/kiamol)
- **讨论论坛**:购买相关学习资源可免费访问由 Manning 出版社运营的私人网络论坛,在 [这里](https://livebook.manning.com/#!/book/learn - kubernetes - in - a - month - of - lunches/discussion) 发表评论、提问并获得作者和其他用户的帮助。
## 2. Kubernetes 概述
### 2.1 Kubernetes 的发展与优势
Kubernetes 于 2014 年在 GitHub 上作为开源项目发布,如今每周平均有来自全球 2500 名贡献者的 200 处更改。KubeCon 年度会议的参会人数从 2016 年的 1000 人增长到最近的 12000 多人,并且已成为一个全球性的系列活动。所有主要的云服务都提供托管的 Kubernetes 服务,你可以在数据中心或笔记本电脑上运行它,且它们都是相同的 Kubernetes。
Kubernetes 受欢迎的主要原因是独立性和标准化。一旦你的应用在 Kubernetes 中运行良好,就可以在任何地方部署,这对迁移到云的组织很有吸引力,因为它使他们能够在数据中心和其他云之间迁移而无需重写代码。对于从业者来说,掌握 Kubernetes 后可以快速在不同项目和组织中发挥作用。
### 2.2 Kubernetes 的挑战与价值
然而,掌握 Kubernetes 并不容易。即使是简单的应用也会部署为多个组件,使用自定义文件格式描述,文件可能轻松跨越数百行。Kubernetes 将负载均衡、网络、存储和计算等基础设施级别的问题引入应用配置,这对于不同 IT 背景的人来说可能是新的概念。此外,Kubernetes 不断发展,每季度都会发布新版本,带来大量新功能。
但这一切都是值得的。许多人在学习 Kubernetes 时,最初会觉得复杂,但随着深入了解,会惊叹于它的强大功能。
## 3. 理解 Kubernetes
### 3.1 Kubernetes 的核心概念
Kubernetes 是一个运行容器的平台,负责启动容器化应用、推出更新、维护服务级别、根据需求扩展、保障访问安全等。其两个核心概念是 API 和集群:
- **API**:用于定义应用程序。
- **集群**:由一组已配置容器运行时(如 Docker)的服务器组成,通过 Kubernetes 连接成一个逻辑单元。
集群管理员管理这些服务器(在 Kubernetes 中称为节点),可以添加节点以扩展集群容量、将节点离线进行维护或在集群中推出 Kubernetes 升级。在托管服务(如微软的 Azure Kubernetes Service 或亚马逊的 Elastic Kubernetes Service)中,这些功能通过简单的 Web 界面或命令行实现,日常使用中可将集群视为一个整体。
### 3.2 应用部署与管理
你可以在 YAML 文件中定义应用,并将这些文件发送到 Kubernetes API。Kubernetes 会根据 YAML 文件中的要求与集群中已运行的内容进行比较,进行必要的更改以达到所需状态,如更新配置、移除容器或创建新容器。容器会分布在集群中以实现高可用性,并且可以通过 Kubernetes 管理的虚拟网络进行通信。
如果集群中的某个节点离线导致部分容器停止运行,Kubernetes 会在其他节点上启动替换容器;如果应用容器不健康,Kubernetes 会重启它;如果某个组件因高负载而压力过大,Kubernetes 会在新容器中启动该组件的额外副本。只要你在 Docker 镜像和 Kubernetes YAML 文件上投入精力,就可以获得一个在任何 Kubernetes 集群上都能以相同方式运行的自愈应用。
### 3.3 Kubernetes 管理的其他资源
Kubernetes 不仅仅管理容器,它还提供了更多功能:
- **分布式数据库**:可用于存储应用程序的配置文件和机密信息(如 API 密钥和连接凭证),并将这些信息无缝提供给容器,使你可以在不同环境中使用相同的容器镜像,并从集群中应用正确的配置。
- **存储**:为应用程序提供存储,使应用程序能够在容器外部维护数据,为有状态的应用提供高可用性。
- **网络流量管理**:管理进入集群的网络流量,将其发送到正确的容器进行处理。
### 3.4 Kubernetes 资源
Kubernetes 中的 YAML 文件称为应用清单,其中定义的组件是 Kubernetes 资源,常见的资源包括:
| 资源名称 | 描述 |
| ---- | ---- |
| Pod | 包含一个或多个紧密关联的容器,是 Kubernetes 中最小的可部署单元 |
| ReplicaSet | 确保指定数量的 Pod 副本始终运行 |
| Deployment | 用于管理 Pod 和 ReplicaSet,支持滚动更新和回滚 |
| Service | 管理网络访问,可将流量从外部世界发送到容器或在集群内的容器之间转发 |
| ConfigMap | 存储应用程序的配置信息 |
| Secret | 安全地管理包含机密数据的配置设置 |
| Volume | 为容器提供存储 |
以下是这些资源关系的 mermaid 流程图:
```mermaid
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(Deployment):::process --> B(ReplicaSet):::process
B --> C(Pod):::process
D(Service):::process --> C
E(ConfigMap):::process --> C
F(Secret):::process --> C
G(Volume):::process --> C
```
## 4. 本书适用人群
### 4.1 学习目标与适用范围
本书的目标是帮助你快速掌握 Kubernetes,让你有信心定义和运行自己的应用,并了解如何将应用投入生产。通过跟随书中的示例和完成实验,你将对 Kubernetes 的重要部分有扎实的理解。
但本书不会涵盖所有内容,最大的差距在于管理方面,不会深入介绍集群设置和管理,因为不同基础设施的设置方式不同。如果你计划在云中运行 Kubernetes 作为生产环境,许多管理问题在托管服务中已经得到解决。如果你想获得 Kubernetes 认证,本书是一个很好的起点,但不能让你完全通过认证。本书大约涵盖 Certified Kubernetes Application Developer (CKAD) 课程的 80% 和 Certified Kubernetes Administrator (CKA) 课程的 50%。
### 4.2 背景知识要求
使用本书需要一定的背景知识,虽然会在遇到 Kubernetes 特性时解释许多核心原则,但不会填补关于容器的知识空白。如果你不熟悉镜像、容器和注册表等概念,建议先学习相关基础知识。虽然使用 Kubernetes 不一定需要使用 Docker,但它是打包应用以便在 Kubernetes 中运行的最简单和最灵活的方式。
如果你认为自己是新的或正在提升技能的 Kubernetes 用户,并且对容器有一定的了解,那么本书适合你。无论你的背景是开发、运维、架构、DevOps 还是站点可靠性工程(SRE),Kubernetes 都与这些角色相关,你将从本书中学到很多知识。
## 5. 创建实验环境
### 5.1 实验环境要求
对于本书的练习,一个单节点的 Kubernetes 集群就足够了。市面上有数十种 Kubernetes 平台,本书的练习应该适用于任何经过认证的 Kubernetes 设置。这里将介绍如何在 Linux、Windows、Mac、亚马逊 Web 服务(AWS)和 Azure 上创建实验环境,使用的 Kubernetes 版本是 1.18,但早期或后期版本通常也适用。
### 5.2 本地运行 Kubernetes 的最佳选择
本地运行 Kubernetes 最简单的选择是 Docker Desktop,它是一个集成包,提供 Docker、Kubernetes 和所有命令行工具。它还能很好地集成计算机网络,并且有一个方便的重置 Kubernetes 按钮,必要时可以清除所有内容。Docker Desktop 支持 Windows 10 和 macOS。
需要注意的是,Kubernetes 本身的组件需要作为 Linux 容器运行,因此在 Windows 上工作时需要一个 Linux 虚拟机,Docker Desktop 会为你设置和管理这个虚拟机。另外,Windows 用户建议使用 PowerShell 进行练习,因为 PowerShell 支持许多 Linux 命令,练习是为在 Linux(和 Mac)shell 以及 PowerShell 上运行而设计的。
### 5.3 具体操作步骤
#### 5.3.1 下载源代码
每个示例和练习都在 GitHub 上的源代码仓库中,同时包含所有实验的示例解决方案。
- 如果你熟悉 Git 并安装了 Git 客户端,可以使用以下命令克隆仓库:
```bash
git clone https://github.com/sixeyed/kiamol
```
- 如果你不是 Git 用户,可以浏览 [GitHub 页面](https://github.com/sixeyed/kiamol),点击“Clone or Download”按钮下载 zip 文件并解压。
源代码的根目录是一个名为 `kiamol` 的文件夹,每个章节都有对应的子文件夹(如 `ch02`、`ch03` 等)。章节中的第一个练习通常要求你打开终端会话并切换到相应的章节目录,因此你需要先导航到 `kiamol` 文件夹。如果练习遇到问题,可以在章节文件夹中查看 README 文件以获取更新信息。
#### 5.3.2 安装 Docker Desktop
1. 访问 [https://www.docker.com/products/docker - desktop](https://www.docker.com/products/docker - desktop),选择安装稳定版本。
2. 下载安装程序并运行,接受所有默认设置。在 Windows 上,安装过程可能需要重启以添加新的 Windows 功能。
3. 当 Docker Desktop 运行时,你会在 Windows 任务栏或 Mac 菜单栏的时钟附近看到 Docker 的鲸鱼图标。如果你是 Windows 上有经验的 Docker Desktop 用户,需要确保处于 Linux 容器模式(新安装默认为此模式)。
4. 由于 Kubernetes 默认未设置,你需要点击鲸鱼图标打开菜单,然后点击“Settings”。在打开的窗口中,从菜单中选择“Kubernetes”,并选择“Enable Kubernetes”。
通过以上步骤,你就完成了实验环境的搭建,可以开始学习 Kubernetes 的实践内容了。
## 6. 快速上手 Kubernetes 核心概念
### 6.1 核心概念的重要性
在 Kubernetes 的世界里,Deployments、Pods、Services 和 Volumes 是核心概念。掌握这些概念,能够帮助我们更好地建模应用程序,理解 Kubernetes 如何对计算、网络和存储进行抽象。下面将详细介绍这些核心概念。
### 6.2 核心概念详解
| 概念名称 | 描述 |
| ---- | ---- |
| Deployments | 用于管理 Pod 和 ReplicaSet,支持滚动更新和回滚,确保应用程序的高可用性和可扩展性。 |
| Pods | 是 Kubernetes 中最小的可部署单元,包含一个或多个紧密关联的容器,它们共享网络和存储资源。 |
| Services | 管理网络访问,可将流量从外部世界发送到容器或在集群内的容器之间转发,为 Pod 提供稳定的网络标识。 |
| Volumes | 为容器提供存储,使应用程序能够在容器外部维护数据,保证数据的持久化。 |
以下是这些核心概念关系的 mermaid 流程图:
```mermaid
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(Deployments):::process --> B(Pods):::process
C(Services):::process --> B
D(Volumes):::process --> B
```
### 6.3 应用建模与部署
使用 Kubernetes YAML 规范来定义应用程序是常见的做法。通过 YAML 文件,我们可以清晰地描述应用程序的各个组件及其配置。例如,一个简单的 Deployment 定义可能如下:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my - app - deployment
spec:
replicas: 3
selector:
matchLabels:
app: my - app
template:
metadata:
labels:
app: my - app
spec:
containers:
- name: my - app - container
image: my - app - image:latest
ports:
- containerPort: 80
```
在这个示例中,我们定义了一个名为 `my - app - deployment` 的 Deployment,要求运行 3 个副本的 Pod,每个 Pod 包含一个名为 `my - app - container` 的容器,使用 `my - app - image:latest` 镜像,并监听 80 端口。
## 7. 总结核心要点
### 7.1 学习收获回顾
通过前面的学习,我们了解了 Kubernetes 的发展、核心概念、应用部署和管理,以及如何创建实验环境。具体要点如下:
1. **Kubernetes 概述**:它具有独立性和标准化的优势,但学习曲线较陡。
2. **核心概念**:API、集群、Pods、Deployments、Services、Volumes 等是理解 Kubernetes 的关键。
3. **应用部署**:使用 YAML 文件定义应用,Kubernetes 会根据这些文件进行部署和管理。
4. **实验环境**:可以使用 Docker Desktop 快速搭建本地实验环境。
### 7.2 实践建议
为了更好地掌握 Kubernetes,建议按照以下步骤进行实践:
1. 跟随示例操作:按照前面介绍的步骤,下载源代码、安装 Docker Desktop 并启用 Kubernetes,进行实际的操作练习。
2. 完成实验:认真完成每个实验,加深对核心概念的理解和应用能力。
3. 深入研究:对于感兴趣的部分,可以进一步查阅相关资料,深入了解其原理和应用场景。
通过不断地实践和学习,你将逐渐掌握 Kubernetes 的使用,能够自信地定义和运行自己的应用程序,在这个强大的容器编排平台上发挥更大的作用。
0
0
复制全文
相关推荐










