返回

containerd中文翻译系列(六)内容流

后端

存储

容器映像作为只读层存储在称为“内容”的可寻址存储库中。每个图像都可以有一个或多个内容引用它,每个引用都对应一个可变层。用户数据驻留在可变层中。在 pod 启动期间,使用一系列只读层和一个可变层构建 pod 的根文件系统。

内容由存储驱动程序实现。存储驱动程序可以将内容存储在本地文件系统中或远程网络文件系统中。大多数容器运行时使用 overlayfsaufs 将内容联合挂载到一个目录中,以便 root 文件系统可以从该目录中装入。

镜像格式

containerd 使用 distribution 库构建并存储容器映像。distribution 是一个 Go 库,用于创建、签名和验证遵循 OCI 镜像规范的容器映像。

OCI 镜像规范定义了一种标准化格式,用于将容器映像存储为一系列层。每一层都是一个只读文件系统,可以作为其他层的父层。这允许容器映像被有效地存储和传输。

在 containerd 中,映像以其内容的哈希标识。这允许映像被有效地缓存和共享。

标签

containerd 为图像提供两种类型的标签:

  • 仓库标签 是一个字符串,用于标识存储库中的特定映像。例如,ubuntu:16.04 是 Ubuntu 16.04 映像的仓库标签。
  • 内容标签 是一个哈希,用于标识映像的特定内容。例如,sha256:1234567890abcdef1234567890abcdef12345678 是映像内容的哈希。

仓库标签用于引用存储库中的映像。内容标签用于标识映像的特定内容。

快照

containerd 使用快照来跟踪映像的变化。快照是映像内容在特定时间点的不可变副本。这允许用户回滚到映像的先前状态。

containerd 为每个映像自动创建快照。当映像的内容更改时,containerd 会创建新的快照。用户也可以手动创建快照。

从快照创建容器

当用户创建容器时,containerd 从快照创建一个新的容器。这涉及将快照的内容复制到新的可变层。可变层最初为空。当用户向容器写入数据时,数据将存储在可变层中。

当容器被删除时,可变层将被删除。快照将保留,以便以后可以从中创建新的容器。

容器生命周期

容器的生命周期可以分为以下几个阶段:

  • 创建 :当用户创建容器时,containerd 从快照创建一个新的容器。
  • 运行 :容器正在运行。
  • 停止 :容器已停止。
  • 已删除 :容器已删除。

containerd 为每个容器维护一个状态文件。状态文件包含容器的当前状态。当容器的状态发生变化时,状态文件将被更新。

容器操作

containerd 提供了许多用于操作容器的命令。这些命令包括:

  • create:创建一个新的容器。
  • start:启动容器。
  • stop:停止容器。
  • delete:删除容器。
  • list:列出容器。
  • inspect:检查容器。
  • exec:在容器中执行命令。

这些命令可以在命令行或通过 API 使用。

故障排除

当您在使用 containerd 时遇到问题时,可以做一些事情来进行故障排除:

  • 检查容器的状态文件。状态文件将包含有关容器当前状态的信息。
  • 使用 containerd logs 命令查看容器日志。日志文件将包含有关容器运行时发生的事情的信息。
  • 使用 containerd inspect 命令检查容器。检查命令将显示有关容器的详细信息。
  • 使用 containerd events 命令查看容器事件。事件命令将显示有关容器发生的事情的事件列表。

如果您无法解决问题,您可以在 containerd 文档中找到更多帮助信息。