Learn
Kubernetes/01-what-is-kubernetes

什么是 Kubernetes

💡🤖 AI 时代,还要学 Kubernetes 吗?学到什么程度?

必要,而且建议学到能独立排障的程度。Deployment / Service 的 YAML 完全可以交给 AI 写,但调度、自愈、存储与网络模型以及排障思路必须自己懂——否则集群一出问题你只能干瞪眼,况且 AI 生成的 YAML 也可能埋着隐患,得由你来审。建议目标:吃透核心对象(Pod / Deployment / Service / PV 等)的语义与相互关系,遇到 CrashLoop、网络不通、调度失败时能独立定位根因。

Kubernetes(常缩写为 k8s,k 与 s 之间有 8 个字母)是一个开源的容器编排(Orchestration)平台。当你只有一两个容器时,手动 docker run 就够了;但当应用拆成几十个服务、需要在多台机器上调度、自愈、扩缩容时,就需要一个"调度大脑"来统一管理。Kubernetes 就是这个大脑。

ℹ️Kubernetes 不负责构建镜像

Kubernetes 只负责运行容器(更准确说是 Pod),镜像仍然由 Docker / BuildKit / 镜像仓库负责。它不关心你的代码怎么编译。

1. 为什么需要容器编排

单机跑容器的痛点,在规模上来后会全部暴露:

  • 调度:几十个容器该放到哪台机器?手动分配不可持续。
  • 自愈:某个容器挂了,谁来重启?谁来把流量切走?
  • 扩缩容:流量高峰来了,如何把副本从 3 个加到 10 个?
  • 服务发现:新实例 IP 变了,其他服务怎么找到它?
  • 滚动更新:如何在不停机的情况下发布新版本?

这些问题本质上都是"编排"问题,Kubernetes 用一套声明式 API 统一解决。

2. 声明式 vs 命令式

这是理解 k8s 的关键心智模型:你描述期望状态("我要 3 个 nginx 副本"),k8s 里的控制器不断把实际状态向期望状态收敛。你不需要告诉它"先启动一个、再启动第二个"。

# 期望状态:3 个 nginx 副本
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels: { app: nginx }
  template:
    metadata:
      labels: { app: nginx }
    spec:
      containers:
        - name: nginx
          image: nginx:1.27
💡把 YAML 当配置而不是脚本

和写 Shell 脚本一步步操作不同,k8s 里你提交一份"期望状态"的 YAML,剩下的交给控制平面。这种思路是 k8s 强大的根本。

3. Kubernetes 与 Docker Compose 的区别

Docker Compose 也是多容器管理工具,但定位和能力强弱完全不同:

维度Docker ComposeKubernetes
适用规模单机、开发/测试多机集群、生产
调度能力无(都在本机)跨节点智能调度
自愈无容器/节点故障自动重建
扩缩容手动改配置重启HPA 自动按指标扩缩
服务发现同网络内通过服务名内置 Service + DNS
滚动更新/回滚无原生支持 rollout
⚠️不要用 Compose 当生产编排

Compose 适合本地一键起依赖(数据库、缓存)。一旦需要高可用、多节点、弹性伸缩,就该上 Kubernetes。

4. 本教程路线

本教程共 18 章:

  1. 基础(1–5 章):概念、核心对象、安装、kubectl、Pod
  2. 工作负载与网络(6–13 章):Deployment、Service、配置、存储、标签、探针、更新回滚、Ingress
  3. 进阶与实战(14–18 章):命名空间、HPA、排障、两个完整项目

小结

  • Kubernetes 是容器编排平台,负责调度、自愈、扩缩、服务发现、滚动更新
  • 核心是"声明期望状态,控制器负责收敛"
  • Docker Compose 适合单机开发,Kubernetes 适合多节点生产
  • 下一章认识 k8s 的核心概念与组件 →