Kubernetes - 简介与架构
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 交互的组件。
# 所有 kubectl 命令都是通过 API Server 执行的
kubectl get pods2. 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 中最小的可部署单元,可以包含一个或多个容器。
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80ReplicaSet
ReplicaSet 确保指定数量的 Pod 副本始终运行。
Deployment
Deployment 提供了 Pod 和 ReplicaSet 的声明式更新能力。
Service
Service 将运行在一组 Pod 上的应用程序公开为网络服务。
Namespace
Namespace 提供了一种将集群资源划分为多个虚拟集群的方法。
Kubernetes vs Docker Swarm
| 特性 | Kubernetes | Docker Swarm |
|---|---|---|
| 学习曲线 | 陡峭 | 平缓 |
| 安装复杂度 | 复杂 | 简单 |
| 扩展性 | 非常强 | 较强 |
| 负载均衡 | 需要配置 | 内置 |
| 社区支持 | 非常活跃 | 活跃 |
| 适用场景 | 大规模生产环境 | 中小规模环境 |
总结
Kubernetes 是当今最流行的容器编排平台,它提供了:
- 强大的编排能力:自动化部署、扩展和管理容器化应用
- 高可用性:自我修复、滚动更新、负载均衡
- 可扩展性:支持大规模集群和自定义扩展
- 声明式配置:使用 YAML 文件描述期望状态
- 丰富的生态系统:Helm、Istio、Prometheus 等
下一步
了解了 Kubernetes 的基本概念和架构后,接下来我们将学习如何安装和配置 Kubernetes 集群。
