KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA

04 · 什么时候别做私有化 — keel 龙骨

前三章你已经会打包、会落地了。这一章收口到一件更重要的事:什么时候不该做私有化交付。

前三章你已经会打包、会落地了。这一章收口到一件更重要的事:什么时候不该做私有化交付。

先看一眼这套形态最硬的那条约束长什么样:

docker network inspect board_data --format '{{.Name}} internal={{.Internal}} driver={{.Driver}}'
docker network inspect board_edge --format '{{.Name}} internal={{.Internal}} driver={{.Driver}}'

预期形状(两条,一条真一条假):

board_data internal=true driver=bridge
board_edge internal=false driver=bridge

internal=true 就是没有出口:这张网上的容器连不到外面。
私有化的每一条设计都是从这一条倒逼出来的——如果你的场景里没有这一条,你就不该做私有化。

一、五类「别做私有化」的场景

1. 只有一个客户,或者根本只有你自己在用

私有化交付消掉的是「这套东西要送出去、落到别人的机器上」这件事。
如果它从头到尾只跑在你自己的一台机器上,那没有「送出去」,
打包、搬运、现场五步、升级回滚——整套动作都是空转。

判断句:这东西有没有离开过你的机器? 答案是没有,私有化的收益接近零。

2. 客户机器能连外网

交付包存在的唯一理由是「没有出口」。客户那边能 docker pull、能在线装依赖,
那只 160M 的包就是白带的:现场直接拉官方镜像,比搬一只大包更省事、更新鲜。

3. 装一次就不动了

升级、回滚、迁移那一整套,是为了对付「结构会随时间变」。
如果这套东西装上去就再也不动(版本冻结、结构冻结),
那套可逆性设计没有对手,等于为不存在的变化买了保险。

4. 现场已经有一套在跑的平台

客户已经有一套编排/发布平台(甚至就是 K8s)在管机器,你再送一份自带 compose 的包进去,
两套东西会争同一批端口、同一批名字。这时候正确动作是把你的镜像接进他那套平台,
而不是在旁边再铺一层。

5. 你没法隔着距离把它托住

前四章所有的设计——自带全部输入、现场随机生成密钥、固定顺序、失败自检——
都建立在同一个假设上:出问题时,你不在那台机器前面。
如果你的现实是「出了问题只能飞过去、人必须守着」,
那私有化交付省下的远程排障能力,你本来也用不上。

一条把它们串起来的线索

这五条其实是同一句话的不同侧面,而且这条线索能从前三章的约束一步步推出来:

第 1 章:没有出口 ⇒ 全部输入必须自带,打成一个包。
第 2 章:包要由不在现场的人交接 ⇒ 安装要有序、可重复、能自检。
第 3 章:代码会变 ⇒ 包要能重打,而且版本必须自洽。

三条合起来,指向同一个前提:

私有化交付的全部复杂度,都服务于「你要隔着一段距离,把这套东西托住」。

所以拿到需求先问的不是「怎么打这个包」,而是这一句:
「送出去之后,我有没有能力、也有没有需要,隔着一段距离把它托住?」

二、一张速查表(判断时回来查)

你的情况 要不要做私有化 更合适的做法
只跑在自己机器上 不要 直接部署,别打包
客户机器能连外网 通常不要 现场直接拉官方镜像
装一次就不再动 通常不要 一次部署即可,省掉升级/回滚那套
现场已有编排平台 不要再铺一层 把你的镜像接进他那套平台
出问题你只能到场 谨慎 先解决远程通道,再谈交付形态
没出口、要送出去、还会变 这才是它的场景 按前三章走完

三、它不是什么

读完你能做什么

走到这里,这门课的目标就完成了:

下一步去哪

这门课到这里就结束了。它刻意不长——你已经知道它是什么、边界在哪,
剩下的交给需要的时候再学。

进入 keel 阅读