Skip to content

06 · 容器编排与 K8s 概念 ​

容器解决"单机怎么跑",编排解决"多机怎么管"。Kubernetes(K8s)是事实标准,但对小团队往往过重。本篇讲 Pod/Deployment/Service 三大概念、声明式思维、何时才需要 K8s。先给结论:先判断"你真的需要编排吗",再谈概念;多数前端转全栈阶段用 docker compose 就够。

速览卡 ​

项内容
一句话定位理解编排解决什么问题,以及要不要上 K8s 的判断框架
核心内容容器编排动机、Pod/Deployment/Service、声明式、调度与扩展、何时别用
读完能回答Pod 和容器什么关系?K8s 到底解决哪类痛?小项目该不该上?
相关板块D01 · Docker | D02 · 部署 CI/CD | C05 · 服务架构

一、先给结论:编排解决三个"单机搞不定"的问题 ​

text
① 多机调度:容器放哪台机器跑?
② 自动恢复:机器/容器挂了怎么办?
③ 统一入口:多实例怎么对外提供稳定服务?

一句话:单容器用 Docker,多容器一台机用 Compose,多机 + 自愈 + 弹性才需要编排。


二、从 Compose 到 K8s:什么时候升级 ​

阶段方案什么时候够
单容器Docker一个服务自己玩
多容器单机Docker Compose前后端 + 依赖都在一台机
多机多服务托管容器平台不想自己运维集群
完整编排Kubernetes高可用、自愈、弹性是硬需求

决策关键:如果你能数出"这台机器、那个服务"怎么部署,说明还没到 K8s 的复杂度。K8s 的收益来自"无需关心机器",前提是你有足够的服务规模。


三、三大概念:Pod、Deployment、Service ​

3.1 Pod:最小的调度单元 ​

text
Pod ≈ 一个"能一起调度、共享网络"的容器组(通常 1 容器)
概念类比
Pod一个"房间"(容器是房间里的进程)
多容器 Pod需要共享存储/网络的极少数场景

3.2 Deployment:声明"我要几个、什么版本" ​

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
        - name: api
          image: ghcr.io/you/api:abc123
          ports:
            - containerPort: 8000
作用说明
期望状态声明"3 个副本"
自愈挂了自动补,滚动更新按策略替换
版本化改镜像 tag 即发新版,支持回滚

3.3 Service:稳定的入口 ​

text
Pod 的 IP 会变,Service 提供一个稳定 VIP/DNS,把流量转发给标签匹配的 Pod
类型场景
ClusterIP集群内部访问(默认)
NodePort简单对外暴露
LoadBalancer云厂商负载均衡
Ingress域名/路径路由到多个 Service

心智模型:Deployment 管"有多少个实例",Service 管"怎么稳定地找到它们",Ingress 管"外部怎么按域名/路径进来"。


四、声明式思维:从"步骤"到"期望状态" ​

text
传统运维:执行命令 → 达到状态
K8s:     写期望状态 → 控制器持续对齐
面做法
命令式docker run ...、写脚本一步一步做
声明式kubectl apply -f deployment.yaml,K8s 负责对齐

前端类比:像声明式 UI(React/Vue 的数据驱动)——你不描述"怎么改 DOM",只描述"应该长什么样"。K8s 对基础设施同理。


五、调度与弹性:K8s 凭什么"自动" ​

能力说明
调度器按资源/亲和性决定 Pod 放哪台机器
ReplicaSet保证副本数与期望一致
HPA按 CPU/自定义指标自动扩缩
滚动更新分批替换,配合就绪检查
亲和/反亲和控制 Pod 分布(跨机高可用)

把 D02 的发布策略搬到 K8s:滚动更新、蓝绿、金丝雀都有对应控制器/流程,健康检查(存活/就绪)是它们能成立的前提。


六、别急着上 K8s:成本清单 ​

成本说明
运维负担集群升级、节点管理、网络/存储排障
学习曲线声明式 + 大量 YAML + 新概念
资源开销控制平面与额外抽象不便宜
调试变难多副本/多节点让"本地复现"更难

推荐路径:先用托管容器平台(云厂商托管 K8s/Serverless)感受声明式收益,再决定要不要深入 K8s 自建。别为"简历好看"给 3 个服务搭集群。


七、自检清单 ​

  • [ ] 能说清 Pod、Deployment、Service 各管什么
  • [ ] 知道 Compose → 托管平台 → K8s 的升级条件
  • [ ] 能读懂一份 Deployment YAML 的关键字段
  • [ ] 知道 Service 与 Ingress 的分工
  • [ ] 能列出上 K8s 的三种成本,并判断当前项目该不该上

八、常见误区 ​

误区事实
"Pod 就是容器"Pod 是最小调度单元,通常一容器但概念不同
"上了 K8s 就高可用"高可用要副本、反亲和、就绪检查配合
"小项目也该用 K8s"编排解决多机问题,单机用 Compose 更省
"Service 就够对外了"对外暴露一般要 Ingress/LoadBalancer
"YAML 多就是专业"声明式是把复杂度转移到理解与维护上

九、动手练习 ​

练习 A:翻译 Compose 到 K8s ​

把自己一个 Compose 服务(含健康检查)翻译成 Deployment + Service,对比两者的声明差异。

练习 B:体验声明式 ​

在 Kind/Minikube 起一个单节点集群,apply 一份 Deployment,删掉一个 Pod 观察自动重建。

练习 C:做一次要不要上 K8s 的评估 ​

给自己负责的服务列"规模、可用性要求、运维人力"三项,按文中的升级条件给出结论并说明理由。


相关文档 ​

本区 ​

其他域 ​