KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA
05 · 什么时候别用它 — keel 龙骨
前三章你已经会"交上去、它维持、给它一个入口"了。这一章不教新命令,只回答一个问题—— 这套东西,你该不该用。 它放在最后,因为一个技术用得对不对,往往不取决于你多会用它, 而取决于你知不知道它的边界。
前三章你已经会"交上去、它维持、给它一个入口"了。这一章不教新命令,只回答一个问题——
这套东西,你该不该用。 它放在最后,因为一个技术用得对不对,往往不取决于你多会用它,
而取决于你知不知道它的边界。
一、回到你刚体验过的那三件事
判断的材料就是你前三章亲手做过的事——挨个问一遍:
① 你交了一份文件,它自己去达成。
前提是这份"想要什么"需要被别人、被另一台机器、或者在很久以后重新读一遍。只跑在你自己
那台机器上、只有你动它的话,"期望状态"就是你脑子里的念头,敲一条 docker run 就表达了。
② 你删掉一个,它自己补回来。
前提是它在你不在场的时候也得活着。只要"进程挂了能自己起来"的话,上一门课那层就有
更省事的做法:docker run 加一个重启策略,或者交给 systemd 写开机自启 + 挂了重拉。
③ 一个地址不变,成员会换。
前提是成员真的会有多个、真的会换。只跑一个容器的话,-p 8080:80 已经是稳定的入口。
三条问下来是同一个形状:每件让你眼前一亮的事,都有一个"它值这个复杂度"的前提。
二、另外两条边界,代价不在技术上
上面三条是"用不上",这两条是"用得起但代价不对等":
你在改这个服务的时候。 写一行代码要看到结果,走的是"构建镜像 → 推上去 → 交文件 →
等它收敛"——每一步都比"改完直接跑"慢。不是它慢,是它在替你做别的事(维持份数、
滚动替换);做开发时不需要那些。
没有人在真的维护它。 这是最容易被忽略、代价最大的一条。真出事时你会看到 Pending、CrashLoopBackOff、ImagePullBackOff——每一个对应不同的原因和处置方向,看不懂只能搜。
再加上集群自己的软件也会过期、要升级,而升级有窗口。没人真的管这些,这东西就会从
"基础设施"变成"没人敢动的一坨"。
三、一条共同的判断线索
前面五条是同一句话的不同侧面:
它的价值来自"不止一台机器"和"不止一个人(或不止一段时间)需要维持它"这两件事同时成立。
缺一件,它就在替一个不存在的问题花力气。
拿到一个需求时,先问的不是"怎么用 Kubernetes 做",而是这三个:
它要跑的地方不止一台机器吗?
它要在我不在场的时候、很久以后还保持那个样子吗?
除了我,还有别的人(或别的系统)需要读这份"想要什么"吗?
三个都是"是",它值得;有一个是"不是",先去考虑更小的东西。更细的选型替换(托管集群 /
函数计算 / 对象存储)在《Kubernetes 应用课》
的"什么时候不该上 K8s"一节。
四、一张速查表(用的时候回来查)
| 命令 | 做什么 |
|---|---|
kubectl get pods / get pods -o wide |
副本现在怎么样(1/1 Running 才是好的)/ 哪台机器、地址多少 |
kubectl get deploy / get svc / get endpoints <名字> |
份数 / 入口地址 / 成员名单 |
kubectl apply -f 文件.yaml |
交期望状态。同一个文件交多少次都行 |
kubectl delete -f 文件.yaml / delete pod <名字> |
撤掉这份文件管的东西 / 删一个(会再长一个出来) |
kubectl describe pod <名字> / logs <名字> |
细节与事件(排查第一件工具)/ 程序说了什么 |
不要背这张表。记住三件事就够了:
get pods看现在怎么样、describe看为什么、logs看它说了什么。
五、读完你能做什么
- 你能交一份最简清单,等到它真的在跑,并且知道"交上去了"和"跑起来了"是两件事;
- 你能解释期望状态是什么,并说出删掉一个 Pod 之后回来的为什么不是原来那个;
- 你能给一组会换地址的 Pod 一个不变的入口,并判断一个需求该不该用 Kubernetes。
下一步去哪
- 想知道"用对"是什么样:《Kubernetes 应用课》——
探针怎么定、资源怎么算、版本怎么换、卡住了先看哪个字段。 - 名词卡住 / 要补地基:《Kubernetes 概念课》 ·
《Docker 基础课》。
这门课到这里就结束了——你已经知道它是什么、边界在哪。