首页 / 知识库 / 系统架构体系 / k8s入门

05 - 声明式思维:K8s 最重要的思想

前面记了一堆概念,但如果只让你带走一个关于 K8s 的思想,那就是这一章讲的——声明式(Declarative)。理解了它,你就抓住了 K8s 的灵魂。

两种做事方式:命令式 vs 声明式

先用生活例子对比一下。

假设你要”让房间保持 25 度”。

命令式(Imperative):你一步步下指令

  • “打开空调”
  • “调到制冷”
  • “设成 25 度”
  • 过会儿冷了 → “你去把空调关了”
  • 又热了 → “再去打开”……

你操心每一个具体步骤,环境一变还得自己盯着手动调整。 这就像只用 Docker 时的你:手动 run、手动重启、手动扩容。

声明式(Declarative):你只说”我想要的结果”

  • “我要房间保持 25 度。”
  • 剩下的开关、制冷制热、随时调整——恒温器自己搞定,一直帮你维持。

你只描述”想要的最终状态”,怎么达成、怎么维持,交给系统。 这就是 K8s 的工作方式。

[配图:左边一个人拿着遥控器不停按(命令式);右边墙上一个恒温器,人只设了个”25℃“就走开了,恒温器自动运转(声明式)]

K8s 是彻底的声明式

在 K8s 里,你几乎从不下”做这个动作”的命令,而是提交一份**“期望状态”的描述**:

“我期望:这个 AI 服务有 3 个副本、用这个镜像、对外用这个端口。”

然后 K8s 内部有个永不停歇的循环,行话叫调谐(Reconcile)

   ┌──────────────────────────────────────┐
   │  1. 你声明期望状态:我要 3 个 Pod       │
   └───────────────────┬──────────────────┘

   ┌──────────────────────────────────────┐
   │  2. K8s 不停对比:现在实际有几个?      │
   └───────────────────┬──────────────────┘

   ┌──────────────────────────────────────┐
   │  3. 不一致就自动纠正:                  │
   │     实际只有 2 个 → 自动补 1 个          │
   │     实际有 4 个   → 自动删 1 个          │
   └───────────────────┬──────────────────┘

          (无限循环,永远向"期望"靠拢)

一句话:你负责”说出想要什么”,K8s 负责”让现实一直等于你想要的”。

为什么这个思想这么关键?

因为第 02 章那些自动化能力,本质上全都是声明式带来的

  • 自愈:你声明”要 3 个”,挂了一个变成 2 个,K8s 发现不一致 → 自动补回 3 个。你没下”重启”命令,它自己修好了。
  • 扩缩容:你把期望从 3 改成 10,K8s 发现差了 7 个 → 自动补齐。
  • 滚动更新:你把期望的镜像版本从 v1 改成 v2,K8s 就一点点把现实从 v1 迁到 v2。

你从来不用关心”怎么做”,只需要维护那份”我想要什么”的声明。 环境怎么变、机器怎么挂,K8s 都会自动把现实拉回你期望的样子。

落到实际:期望状态写在 YAML 里

这份”期望状态”的声明,通常写成一个 YAML 文件(一种简单的文本配置格式)。大概长这样(看个意思即可,不用背):

apiVersion: apps/v1
kind: Deployment          # 我要声明一个 Deployment
metadata:
  name: my-ai-service
spec:
  replicas: 3             # 期望:3 个副本
  template:
    spec:
      containers:
        - name: ai
          image: my-ai-service:v1   # 用这个镜像
          ports:
            - containerPort: 8000

然后一条命令把它交给 K8s:

kubectl apply -f deployment.yaml

apply 这个词很传神——你不是在说”去创建/去重启”,而是在说”让集群变成这份文件描述的样子”。改天你把 replicas 改成 5 再 apply 一次,K8s 就自动帮你从 3 变到 5。

这也是为什么 K8s 天然适合”配置即代码(GitOps)“:你的整个系统长什么样,全都写在一堆 YAML 里,可以进 Git 版本管理、可以 review、可以回滚。

小结

  • K8s 的灵魂是声明式:你只描述”想要的最终状态”,不下具体操作命令。
  • K8s 通过永不停歇的调谐循环,不断把”现实”拉向”期望”。
  • 自愈、扩缩容、滚动更新,本质都是声明式的自然结果。
  • 期望状态通常写在 YAML 里,用 kubectl apply 提交给集群。
  • 记住这一句就够:你说想要什么,K8s 负责一直帮你实现它。

理论部分到此为止。接下来进入第三部分——实际工作中,K8s 到底怎么落地使用。


上一章 ← 04 - 必须认识的几个核心概念 | 下一章 → 06 - 别自己搭 K8s:用云厂商的托管服务