沙箱在节点上的一生
当 CubeMaster 选中一个节点后,会通过 gRPC 调用 Cubelet 的 RunCubeSandbox 接口。这篇文章拆解沙箱从创建到销毁在节点上的完整生命周期。
1. 全景生命周期
2. 创建流程:RunCubeSandbox
2.1 入口:gRPC 服务
Cubelet 作为 containerd 的子服务运行,通过 gRPC 暴露 CubeboxMgr 接口:
2.2 local.Create() 的核心步骤
Cubelet/services/cubebox/cube_container_create.go 的 Create() 方法是创建沙箱的核心:
2.3 关键步骤详解
步骤 1:准备 rootfs
go
// cube_container_create.go
func (l *local) prepareRootfs(ctx context.Context, sandbox *Sandbox, container *Container) error {
// 1. 从 storage 层获取快照
// 2. 如果是模板快照,创建 overlay 可写层
// 3. 挂载到指定路径
}步骤 2:构建 OCI spec
go
specOpts := []oci.SpecCreator{
oci.WithProcessArgs(cmd...),
oci.WithEnv(envs),
oci.WithCgroupDir(cgroupPath),
oci.WithCapabilities(caps),
// ...
}步骤 3:创建 containerd 容器
go
container, err := client.NewContainer(ctx, containerID,
containerd.WithSnapshot(snapshotID),
containerd.WithNewSpec(specOpts...),
)步骤 4:启动容器
go
task, err := container.NewTask(ctx, cio.NewCreator(cioOpts...))
err = task.Start(ctx)3. 插件调用链:workflow engine
Cubelet 使用工作流引擎编排创建过程中的各个插件:
4. 沙箱状态管理
4.1 Sandbox 对象
go
// Cubelet/pkg/store/cubebox/
type CubeBox struct {
ID string
Status SandboxStatus
Containers map[string]*Container
NetworkConfig *NetworkConfig
CreateTime time.Time
Labels map[string]string
Annotations map[string]string
}4.2 状态转换
5. 销毁流程:DestroySandbox
Cubelet/services/cubebox/destroy.go 的 Destroy() 方法负责清理沙箱:
销毁步骤
| 步骤 | 代码位置 | 说明 |
|---|---|---|
| 停止 task | destroy.go | task.Kill() 发送 SIGKILL |
| 删除 container | destroy.go | container.Delete() |
| 清理 rootfs | storage/ | 删除 overlay 可写层 |
| 清理网络 | network/ | 移除 TAP 设备 |
| 删除记录 | cubeboxManger.Delete() | 从本地存储删除 |
| 释放存储 | storage/ | 归还快照到池中 |
6. 容器级操作
除了沙箱级的创建/销毁,Cubelet 还支持容器级操作:
7. 定时清理:dead container cleaner
Cubelet 有一个后台清理器,定期清理已销毁的沙箱:
go
// service.go
func (s *service) startCleaner() {
ticker := time.NewTicker(cleanerHeartBeat)
for range ticker.C {
s.cleanDeadContainers()
}
}清理策略:
- 超过
deadContainerTTL(默认 1 小时)的已销毁沙箱会被彻底清理 - 清理包括:删除 rootfs、释放存储、清理元数据
8. 完整生命周期时序
延伸阅读
- 工作流引擎:Cubelet 如何编排插件 — 插件调用机制
- 存储与快照:rootfs 怎么来的 — 存储层详解
- 创建沙箱时 CubeMaster 做了哪些事 — 上游调度流程