KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA
01 · 它到底解决了什么问题 — keel 龙骨
## 现场:容器能跑之后,麻烦换了地方
现场:容器能跑之后,麻烦换了地方
上一门课结束时,你能在自己电脑上跑起一个容器了。现在把它放到服务器上。
第一台很顺利:装好 Docker、docker run,跑起来了。然后是第二台、第三台。
麻烦不在"跑起来",在跑起来之后:
- 第三台机器半夜重启,容器没了。没人会替你把它拉起来——除非你写过一份开机脚本,
而那份脚本还得自己判断"它现在是不是还活着"。 - 换新镜像要一台一台登录、
docker stop、docker run。漏了一台就是两台跑新版本、
一台跑旧版本。 - 想从 2 个副本扩到 6 个,得自己数还差几个、缺的放到哪台机器上。
三件事看着是三个问题,其实是同一件事:"服务应该长什么样"只存在你的脑子里,机器不知道,
也不会替你去维持。人一多、机器一多、时间一长,就一定漏。Kubernetes 就是为这件事做出来的。
一、它是什么
一句话:你只说"我想要什么",它负责一直把现状弄成那样。 注意"一直"和"负责"这两个词,
后面几章反复出现的就是它们。
它自己打的比方是一个总管:你交一张菜单("四份这个"),他去派人、端菜;
中途有人打翻一盘,他再补一盘,不需要你重新点单。这个比方要落到具体东西上才算数。
Kubernetes 里有三个词,从今天起你一直会用到:
| 名词 | 一句话 |
|---|---|
| 集群(cluster) | 一组机器 + 一套管理它们的软件。你只跟这套软件说话 |
| 节点(node) | 集群里的一台机器。容器最终是在某个节点上跑起来的 |
| 期望状态(desired state) | 你写在文件里的那句话——"我要 2 个副本、用这个镜像" |
它和 docker run 最根本的差别就在这里:
docker run 你现在去把它跑起来。跑没跑起来,只在这一刻被确认一次
期望状态 它应该一直是那样。交上去之后,维持它变成集群的事
你不写命令,你写期望状态。 这句话现在只是一个说法,第 03 章你会亲眼看到它的后果。
二、先看看你的集群长什么样
装集群不在本课范围内(本机一个单节点集群就够)。装好之后,敲这三行确认能连上:
kubectl version
kubectl cluster-info
kubectl get nodes
你会看到类似这样的输出:
Client Version: v1.36.1
Kustomize Version: v5.8.1
Server Version: v1.37.0
Kubernetes control plane is running at https://127.0.0.1:42680
CoreDNS is running at https://127.0.0.1:42680/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
NAME STATUS ROLES AGE VERSION
keel-lab-control-plane Ready control-plane 55s v1.37.0
环境:kubectl v1.36.1 / Kubernetes v1.37.0(kind v0.33.0 建的单节点集群)。地址、端口、
节点名、版本号都会变——读形状,别抄数字。
三行读法不同:
kubectl version里Client和Server都有,才算真的连上了。只有Client,
是集群没在运行;报command not found,是还没装 kubectl。kubectl cluster-info是集群地址;连不上时它是第一份证据。kubectl get nodes是你有哪些机器。STATUS是Ready才说明能收活;只有一行,
就是单节点集群的样子。
报错
Unable to connect to the server: dial tcp [::1]:8080: connectex: ...?
这不是坏了,是没连上集群。它上面还会跟着E1015 ... memcache.go:265那几行噪音,
要读的是最后那句。撞上它只有两种可能:集群没在运行;或你还没有任何集群配置。
三、它不是什么
零基础最容易建立错的三条印象,先纠正:
- 不是 Docker 的替代品。 它不构建镜像、不装容器:镜像怎么来、容器怎么跑是 Docker
那层的事,Kubernetes 管的是"这些容器该在哪些机器上、各要几个、坏了一个怎么办"。
没有镜像,它没有东西可编排。 - 不是一个"更大的机器"。 集群听起来像超级电脑,其实节点就是现成的普通机器,集群只是
把它们串起来;get nodes里那台control-plane自己也跑着一堆东西,不是一台专门伺候
你的空机器。 - 不是"公司规模才用得上"。 门槛不在公司大小,在你有没有多台机器、多个服务;
都没有的时候,它替你解决的问题不存在——第 05 章展开。
读完你能做什么
- 说清期望状态和
docker run的差别,并用一句话讲给别人听; - 用三条命令确认集群能不能连、有几台机器;
- 说出 Kubernetes 和 Docker 各自管哪一段。
下一步:现在你知道它是什么了。下一章交上去第一份期望状态——
你会看到那句"它还没跑起来"是怎么发生的。