> ## Documentation Index
> Fetch the complete documentation index at: https://amigoer.mintlify.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Kubernetes - 简介与架构

## 什么是 Kubernetes？

Kubernetes（常简称为 K8s，因为 K 和 s 之间有 8 个字母）是一个开源的容器编排平台，最初由 Google 设计并捐赠给云原生计算基金会（CNCF）来维护。

Kubernetes 的核心目标是让部署容器化应用变得简单高效。它提供了容器的自动化部署、扩展、负载均衡、自愈等能力，让开发者可以专注于业务代码，而不用担心底层基础设施。

## 为什么需要 Kubernetes？

在容器化时代之前，应用部署面临诸多挑战：

|   问题  |    传统方式    | Kubernetes 方式 |
| :---: | :--------: | :-----------: |
| 服务扩缩容 | 手动添加/移除服务器 |    自动水平扩缩容    |
|  服务发现 |  硬编码 IP 地址 |    内置服务发现机制   |
|  负载均衡 |  单独配置负载均衡器 |     内置负载均衡    |
|  滚动更新 |  停机更新或复杂脚本 |    零停机滚动更新    |
|  故障恢复 |   人工介入处理   |    自动检测和恢复    |
|  配置管理 |    分散在各处   |    集中式配置管理    |

## Kubernetes 的核心特性

### 1. 自动化部署与回滚

Kubernetes 可以按照预期状态自动部署应用，如果发现问题可以自动回滚到之前的版本。

### 2. 服务发现与负载均衡

Kubernetes 可以使用 DNS 名称或 IP 地址暴露容器。如果到容器的流量很大，Kubernetes 能够自动进行负载均衡。

### 3. 自动装箱

根据资源需求和其他约束自动放置容器，同时不牺牲可用性。

### 4. 自我修复

当容器失败时，Kubernetes 会自动重启容器；当节点故障时，会自动替换和重新调度容器；当容器未通过健康检查时，会自动终止并重建。

### 5. 密钥与配置管理

Kubernetes 允许存储和管理敏感信息，如密码、OAuth 令牌和 SSH 密钥。可以在不重建容器镜像的情况下更新配置。

### 6. 存储编排

Kubernetes 允许自动挂载所选存储系统，包括本地存储、公有云提供商和网络存储系统。

## Kubernetes 架构

Kubernetes 集群由控制平面（Control Plane）和工作节点（Worker Node）组成。

```
┌─────────────────────────────────────────────────────────────────────┐
│                              Kubernetes                             │
│  ┌─────────────────────────────────────────────────────────────────┐│
│  │                     Control Plane (Master)                      ││
│  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────────────┐   ││
│  │  │  API Server  │  │  Scheduler   │  │ Controller Manager   │   ││
│  │  └──────────────┘  └──────────────┘  └──────────────────────┘   ││
│  │  ┌──────────────────────────────────────────────────────────┐   ││
│  │  │                         etcd                             │   ││
│  │  └──────────────────────────────────────────────────────────┘   ││
│  └─────────────────────────────────────────────────────────────────┘│
│                                                                     │
│  ┌─────────────────────────────────────────────────────────────────┐│
│  │                      Worker Node 1                              ││
│  │  ┌─────────┐  ┌─────────────┐  ┌─────────────────────────────┐  ││
│  │  │ kubelet │  │ kube-proxy  │  │        Container Runtime    │  ││
│  │  └─────────┘  └─────────────┘  └─────────────────────────────┘  ││
│  │  ┌─────────────────────────────────────────────────────────────┐││
│  │  │  Pod      Pod      Pod      Pod      Pod      Pod           │││
│  │  └─────────────────────────────────────────────────────────────┘││
│  └─────────────────────────────────────────────────────────────────┘│
│                                                                     │
│  ┌─────────────────────────────────────────────────────────────────┐│
│  │                      Worker Node 2                              ││
│  │  ┌─────────┐  ┌─────────────┐  ┌─────────────────────────────┐  ││
│  │  │ kubelet │  │ kube-proxy  │  │        Container Runtime    │  ││
│  │  └─────────┘  └─────────────┘  └─────────────────────────────┘  ││
│  │  ┌─────────────────────────────────────────────────────────────┐││
│  │  │  Pod      Pod      Pod      Pod      Pod      Pod           │││
│  │  └─────────────────────────────────────────────────────────────┘││
│  └─────────────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────────────┘
```

### Control Plane 组件

#### 1. kube-apiserver

API Server 是 Kubernetes 控制平面的前端，负责处理所有 REST 请求。它是唯一直接与 etcd 交互的组件。

```bash theme={null}
# 所有 kubectl 命令都是通过 API Server 执行的
kubectl get pods
```

#### 2. etcd

etcd 是一个高可用的分布式键值存储，用于存储 Kubernetes 集群的所有配置数据和状态信息。

**特点：**

* 分布式存储，支持高可用
* 使用 Raft 协议保证一致性
* 存储集群的所有元数据

#### 3. kube-scheduler

调度器负责监控新创建的、未指定运行节点的 Pod，并为它们选择一个合适的节点运行。

**调度因素：**

* 资源需求（CPU、内存）
* 亲和性/反亲和性规则
* 数据本地化
* 节点污点和容忍

#### 4. kube-controller-manager

控制器管理器运行各种控制器进程，包括：

* **Node Controller**：负责节点故障检测和响应
* **Replication Controller**：维护 Pod 副本数量
* **Endpoints Controller**：填充 Endpoints 对象
* **Service Account & Token Controllers**：为新命名空间创建默认账户和令牌

### Worker Node 组件

#### 1. kubelet

kubelet 是在每个节点上运行的主要代理，负责确保容器在 Pod 中运行。

**主要职责：**

* 接收 PodSpec 并确保容器运行
* 定期汇报节点和 Pod 状态
* 执行容器健康检查

#### 2. kube-proxy

kube-proxy 是集群中每个节点上运行的网络代理，负责实现 Kubernetes Service 概念的一部分。

**功能：**

* 维护节点上的网络规则
* 实现 Service 的负载均衡
* 支持 TCP/UDP/SCTP 协议转发

#### 3. Container Runtime

容器运行时是负责运行容器的软件。Kubernetes 支持多种容器运行时：

* **containerd**：目前最流行的选择
* **CRI-O**：专为 Kubernetes 设计的轻量级运行时
* **Docker Engine**（通过 cri-dockerd）

## Kubernetes 核心对象

### Pod

Pod 是 Kubernetes 中最小的可部署单元，可以包含一个或多个容器。

```yaml theme={null}
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.21
    ports:
    - containerPort: 80
```

### ReplicaSet

ReplicaSet 确保指定数量的 Pod 副本始终运行。

### Deployment

Deployment 提供了 Pod 和 ReplicaSet 的声明式更新能力。

### Service

Service 将运行在一组 Pod 上的应用程序公开为网络服务。

### Namespace

Namespace 提供了一种将集群资源划分为多个虚拟集群的方法。

## Kubernetes vs Docker Swarm

|   特性  | Kubernetes | Docker Swarm |
| :---: | :--------: | :----------: |
|  学习曲线 |     陡峭     |      平缓      |
| 安装复杂度 |     复杂     |      简单      |
|  扩展性  |     非常强    |      较强      |
|  负载均衡 |    需要配置    |      内置      |
|  社区支持 |    非常活跃    |      活跃      |
|  适用场景 |   大规模生产环境  |    中小规模环境    |

## 总结

Kubernetes 是当今最流行的容器编排平台，它提供了：

1. **强大的编排能力**：自动化部署、扩展和管理容器化应用
2. **高可用性**：自我修复、滚动更新、负载均衡
3. **可扩展性**：支持大规模集群和自定义扩展
4. **声明式配置**：使用 YAML 文件描述期望状态
5. **丰富的生态系统**：Helm、Istio、Prometheus 等

<Note title="下一步">
  了解了 Kubernetes 的基本概念和架构后，接下来我们将学习如何安装和配置 Kubernetes 集群。
</Note>
