名词解释教学工作区 · 课程 0014 · 形态 单概念 · 约 5 分钟 · 前置:0013 · 前端 / 后端 / 接口(先分清谁在哪跑) · 相关:0016 · 静态部署与其它部署 · 2026-10-01

Kubernetes:你只说要什么,它负责让现实跟上

你能做到:写下一句"这个服务我要 3 份、版本 1.4",剩下的交给它 —— 有一个挂了它再起一个,要升级它一批一批换,换坏了你一条命令退回上一版; 你不用记住每台机器的名字,也不用半夜爬起来补副本。

1 | 定义

Kubernetes(常缩写 K8s),中文常叫容器编排器 (container orchestrator):一个跑在一批机器之上的集群系统。你向它提交期望状态 (跑什么、要几份、什么版本),它负责把这些工作负载安排到合适的机器上、盯住数量、坏了补上、 升级时一批一批换;你要的东西写成 YAML,用命令行工具 kubectl 交进去。 像机场塔台:你只说"我要三个航班同时在天上",哪架飞机用哪条跑道、哪一班延误了怎么补, 是塔台在安排 —— 你不用自己开飞机,也不用去数停机坪上还剩几个位子。

2 | 它解决什么麻烦

容器先解决了"程序连环境一起打包"这件事;可程序一旦跑在多台机器上,新的麻烦立刻冒出来:

这四件事都不属于"程序"本身,而属于"一堆程序怎么在一批机器上安顿下来"。 编排器就是专门管这件事的那一层。

3 | 它怎么解决

一圈闭环:你写下期望,它盯着现状,一直把两者拉平。

期望状态 你写下的:要几份、什么镜像 -> API server(kube-apiserver) 集群里所有读写的唯一入口 -> etcd 把期望状态存下来 -> 控制器 controller 不停对比期望与现状 -> 调度器 scheduler 挑一台合适的机器 -> kubelet 节点上的代理,盯住本机 Pod -> 容器运行时 真正把容器跑起来

4 | 用它的代价

5 | 真实使用场景

场景一:声明"要 3 份",然后看着它自己凑齐。

kubectl apply -f deployment.yaml    # 声明:这个 Deployment 要 3 份
kubectl get pods -w                 # 盯着状态,Pod 一行行冒出来
# 手动删掉一个:kubectl delete pod web-xxxx,再看 get pods,很快又是 3 个

你没做任何事,数量是被控制器补齐的 —— 这就是它最值钱的地方。

场景二:滚动更新,不对就回滚。

kubectl set image deployment/web web=registry.example.com/web:1.4
kubectl rollout status deployment/web   # 一批一批替换,直到全部起来
kubectl rollout undo deployment/web     # 新版本有问题,一条命令退回上一版

升级期间旧 Pod 还在接请求,所以不中断;回滚的也是同一套声明,不需要人手去改每台机器。

场景三:本机练手,先用不着真买机器。

minikube start          # 或 kind create cluster:在本机起一个单节点集群
kubectl get nodes       # 看这一台"节点"是否就绪
kubectl create deployment demo --image=nginx --replicas=3
kubectl scale deployment demo --replicas=5   # 改一句期望,它自己再补两个

minikube 与 kind 起的是真集群、走同一套 kubectl 命令,只是把控制面缩到一台机器能装下。

6 | 和相近的东西怎么分

先问一句:这件事管的是"一个容器怎么跑",还是"一堆容器放哪、几份、坏了谁补"?

名称它是什么和 Kubernetes 什么关系
Kubernetes(容器编排器)在一批机器之上,按你声明的期望安排、补齐、升级工作负载本课主角,管的是"放哪、几份、坏了谁补"
Docker在一台机器上把镜像做成容器、再把它跑起来的工具链下一层:它管单个容器怎么跑;K8s 通过容器运行时跑容器,并不执行 docker 命令
Docker Compose在一台机器上编排多个容器,一份 YAML 写清谁连谁形状很像,但只在单机内:没有多机调度,也没有坏了自动补
Docker SwarmDocker 自带的集群编排模式,配置写法与 Compose 接近同族里更轻的一个,能力与生态较小,社区基本转向 K8s
Nomad通用编排器:除了容器,还能跑普通进程同类替代品,胜在轻、能混跑;生态与插件数量不如 K8s
k3s把控制面压缩过的轻量发行版同一套 kubectl 命令的小号版,常用在小型设备与边缘场景
minikube / kind在你本机起一个单节点集群的练习工具不是编排器,是给你练手和测试用的集群
部署把做好的东西送到别人能访问的地方上一段:它管交付那一步;交付之后在集群里怎么活着,才是 K8s 的事

一句话分工:容器运行时管"怎么跑",编排器管"放哪、几份、坏了谁补"。顺带一句:云厂商卖的托管集群(如 EKS、GKE),就是把控制面这份活当成 SaaS / PaaS 卖给你。

7 | 常见误解

8 | 练习

三题自测,每题只有一个正确选项;选完立刻看到解释。

1. 你只写下"要 3 份、镜像是 1.4",它自己不停对比现状并补齐 —— 这种做法叫什么?

对。声明式交出去的是"期望状态",反复纠偏的活归控制器;命令式则是你自己把每一步列清楚。

2. 决定新起来的 Pod 去哪台机器上跑的,是下面哪一个?

对。控制器负责"要几份",调度器负责"放哪台",kubelet 与容器运行时负责"在机器上跑起来"。

3. 下面哪一项,不是 Kubernetes 替你负责的事?

对。它只保证"按你要求的份数活着",程序本身对不对、快不快,得你自己负责 —— 它甚至会如实重启一个有 bug 的程序。