Containerd 容器技术详解
一、Containerd 核心概念扩展版1.1 定义与定位Containerd是 CNCF 托管的开源轻量级容器运行时专注容器全生命周期管理遵循OCI 运行时 镜像规范是 Kubernetes 默认底层运行时。1.2 核心能力原文 扩展容器生命周期创建 / 运行 / 暂停 / 恢复 / 停止 / 删除镜像管理拉取 / 推送 / 导出 / 导入 / 校验 / 挂载标准化接口兼容 CRI、OCI对接 K8s、Docker插件化架构存储、网络、运行时、监控可扩展安全隔离基于 Linux Namespace Cgroups 强隔离高可用Shim 解耦守护进程重启不影响容器运行1.3 关键生态关系必懂知识点表格组件作用与 Containerd 关系runcOCI 标准运行时真正创建容器进程Containerd 通过 Shim 调用 runccontainerd-shim-v2容器垫片解耦 daemon 与容器每个容器独立 shimdaemon 崩溃容器不掉线CRIK8s 容器运行时接口Containerd 实现 CRI直接被 kubelet 调用ctrContainerd 原生 CLI底层调试不兼容 docker 命令crictlCRI 客户端K8s 场景专用管理 Pod / 容器 / 镜像nerdctl兼容 docker 命令的 CLI生产推荐替代 ctr知识点Containerd ≠ DockerDocker 是完整容器平台含构建、网络、编排现代 Docker 底层依然用 ContainerdContainerd 是专注运行时的最小核心更轻、更稳、更适合 K8s。二、运行架构深度解析2.1 整体架构C/S 架构服务端暴露 Unix Socket /gRPC单节点管理一个 Containerd 管控一台宿主机三层核心存储层、元数据层、运行时层2.2 核心组件详解Storage存储Content镜像层数据内容寻址存储Snapshot容器读写层OverlayFS 默认驱动Diff层差异计算用于提交与构建Metadata元数据Images镜像标签、digest、大小、平台Containers容器配置、命名空间、运行时Runtime运行时Tasks容器内进程组对应运行中实例Events容器事件流用于监控与告警2.3 Runtime v2 Shim 原理重磅扩展Containerd 不直接调用 runc而是启动containerd-shim-runc-v2独立进程Shim 负责挂接 Namespace、调用 runc、转发标准输入输出、监听退出码价值daemon 重启 / 崩溃容器继续运行可重连管理实现高可用隔离三、安装与配置含所有命令 扩展3.1 安装 ContainerdCentOS / EulerOS 24bash运行# Step1 配置阿里云 Docker 源 curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step2 替换变量适配系统 sed -i s/$releasever/8/g /etc/yum.repos.d/docker-ce.repo sed -i s/$basearch/x86_64/g /etc/yum.repos.d/docker-ce.repo # Step3 查看可用版本 yum list containerd.io --showduplicates # Step4 安装 yum -y install containerd.io3.2 生成默认配置bash运行mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml3.3 镜像加速配置原文完整 扩展说明bash运行# 编辑配置启用 certs.d 配置目录 vim /etc/containerd/config.toml # 找到 [plugins.io.containerd.grpc.v1.cri.registry] # 添加config_path /etc/containerd/certs.d # 创建目录 mkdir -p /etc/containerd/certs.d/docker.io mkdir -p /etc/containerd/certs.d/registry.k8s.io # 配置 docker.io 加速 cat EOF | sudo tee /etc/containerd/certs.d/docker.io/hosts.toml server docker.io [host.https://docker.m.daocloud.io] capabilities [pull, resolve] EOF # 配置 k8s 镜像加速 cat EOF | sudo tee /etc/containerd/certs.d/registry.k8s.io/hosts.toml server registry.k8s.io [host.https://registry.aliyuncs.com/google_containers] capabilities [pull, resolve] override_path true EOF3.4 启动与校验bash运行systemctl daemon-reload systemctl enable --now containerd systemctl status containerd # 查看版本 ctr version3.5 配置扩展知识点生产必备root /var/lib/containerd镜像 / 层数据存储路径state /run/containerd运行时状态、socket 路径version 3最新配置版本v1 已废弃SystemdCgroup trueK8s 必须开启适配 systemd 驱动snapshotter overlayfs生产推荐性能最优四、镜像管理原文所有命令 扩展4.1 拉取镜像bash运行# 全平台 ctr images pull docker.io/library/nginx:latest \ --all-platforms \ --hosts-dir/etc/containerd/certs.d/ # 指定架构 ctr images pull docker.io/library/nginx:latest \ --platform linux/amd64 \ --hosts-dir/etc/containerd/certs.d/4.2 查看 / 检查镜像bash运行# 查看 default 命名空间 ctr images ls # 查看 k8s.io 命名空间K8s 镜像 ctr -n k8s.io images ls # 检查完整性 ctr images check4.3 标签 / 删除 / 挂载 / 导出 / 导入bash运行# 打标签 ctr images tag docker.io/library/nginx:latest nginx:v1 # 删除镜像 ctr images rm nginx:v1 # 挂载镜像到主机 ctr images mount nginx:v1 /mnt # 卸载 ctr images unmount /mnt # 导出全平台 ctr images export --all-platforms nginx_latest.tar docker.io/library/nginx:latest # 导入 ctr images import nginx_latest.tar镜像知识点扩展ctr必须写完整镜像路径docker.io/library/xxx不能省略镜像导出导入可用于离线环境分发镜像挂载可直接查看文件系统用于调试与审计五、容器与任务管理原文全命令 原理5.1 核心概念Container静态配置资源、镜像、命令Task运行中的进程实例真正承载业务5.2 完整操作流程bash运行# 1 创建容器静态 ctr containers create nginx:v1 nginx # 2 启动任务运行 ctr task start -d nginx # 3 查看运行中任务 ctr task ls # 4 进入容器 ctr task exec --exec-id 0 -t nginx sh # 5 暂停/恢复 ctr task pause nginx ctr task resume nginx # 6 停止kill ctr task kill nginx # 7 删除任务 ctr task rm nginx # 8 删除容器 ctr containers rm nginx # 9 查看资源 metrics ctr task metrics nginx # 10 查看容器内进程宿主机 PID ctr task ps nginx关键知识点ctr 没有stop只有kill优雅停止需在容器内处理--exec-id必须唯一用于区分多个 exec 会话metrics 输出内存 / CPU/PID 限额与实时用量可做监控六、插件与命名空间扩展原理6.1 插件体系bash运行# 列出所有插件 ctr plugins ls常见插件类型Snapshotteroverlayfs/devmapper/btrfsRuntimerunc v2、kata、gVisorContent内容存储CRI对接 Kubernetes插件化让 Containerd 成为统一运行时骨架可替换底层实现。6.2 命名空间资源隔离bash运行# 查看 ctr ns ls # 创建 ctr ns create test # 删除 ctr ns rm test # 指定命名空间操作 ctr -n test images pull ... ctr -n test containers create ...知识点K8s 固定使用 k8s.io 命名空间与 default 完全隔离不可混用。七、安全与生产最佳实践补充禁用非 HTTPS 镜像仓库toml[plugins.io.containerd.grpc.v1.cri.registry.configs.docker.io.tls] insecure_skip_verify false使用 SystemdCgroup防止资源逃逸OverlayFS 快照驱动性能与稳定性最优限制镜像并发拉取数避免带宽打满定期清理闲置镜像、快照释放磁盘八、常见问题速查扩展拉取镜像超时检查 certs.d 配置、加速地址、网络连通性task start 失败确认容器已 create、无重名、镜像完整K8s 看不到镜像用ctr -n k8s.io images ls查看必须在 k8s.io 命名空间daemon 重启后容器消失未使用 Runtime v2或 shim 异常重装新版 containerd本章总结本文完整覆盖原文安装、配置、镜像、容器、任务、插件、命名空间所有代码并补充OCI/CRI 生态关系Runtime v2 Shim 高可用原理生产配置与安全基线常见问题排障ctr/crictl/nerdctl 定位区别Containerd 是云原生底层基石掌握它可彻底理解容器运行机制为 K8s 运维、性能调优、安全加固打下坚实基础。