SOCI 快照器
SOCI 快照器是一个 containerd 快照插件。它使标准 OCI 镜像能够被延迟加载,无需在构建时进行转换步骤。"SOCI" 是 "Seekable OCI" 的缩写,发音为 "so-CHEE"。
启动容器的标准方法从设置阶段开始,在此阶段,容器镜像数据从远程仓库完全下载,并组装文件系统。应用程序直到这个过程完成后才启动。使用一套具有代表性的镜像,Harter 等人 FAST '16 发现镜像下载占容器启动时间的 76%,但平均只有 6.4% 的获取数据实际上是容器开始有用工作所需要的。
解决这个问题的一种方法是消除在启动容器前下载整个镜像的需求,而是按需延迟加载数据,并在后台预取数据。
设计考虑
无镜像转换
现有的延迟加载快照器依赖于构建时的转换步骤来生成新的镜像工件。这对于不想或无法修改其 CI/CD 流程的容器开发人员来说是有问题的,或者他们不想管理以两种格式保存镜像副本的成本和复杂性。它还为镜像签名创造了问题,因为转换步骤会使针对原始 OCI 镜像创建的任何签名失效。
SOCI 通过从原始、未修改的 OCI 镜像加载来解决这些问题。它不是转换镜像,而是构建一个单独的索引工件("SOCI 索引"),该工件位于远程仓库中,就在镜像本身旁边。在容器启动时,SOCI 快照器使用 OCI 引用类型工作组 开发的机制查询仓库是否存在 SOCI 索引。
工作负载特定的加载顺序优化
我们尚未实现/集成到 SOCI 中的另一个重要考虑是基于特定工作负载的镜像加载顺序。更多详情请参见 设计 README。
文档
- 入门指南:浏览 SOCI 设置和功能。
- 构建:如何从源代码构建 SOCI,测试 SOCI(并贡献)。
- 安装:如何将 SOCI 安装为 systemd 单元。
- 调试和有用的命令:访问日志/指标和调试常见错误。
- 术语表:项目中使用的术语表。
特定集成文档
- Kubernetes 上的 SOCI:总体上如何在 Kubernetes 上使用 SOCI 的概述
- Amazon Elastic Kubernetes Service (EKS) 上的 SOCI:在 Amazon EKS 上设置 SOCI 的步骤说明
项目起源
在 containerd 快照器社区中有几个不同的延迟加载项目。本项目始于流行的 Stargz-snapshotter 项目 的一个分支,从提交 743e5e70a7fdec9cd4ab218e1d4782fbbd253803 开始,目的是进行上游补丁。在开发过程中,变更变得非常根本,因此决定将 soci-snapshotter 作为一个独立项目创建。Soci-snapshotter 建立在 stargz 的成功和创新理念之上。长期来看,本项目打算并希望作为非核心项目加入 containerd,并打算遵循 CNCF 最佳实践。