以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~
基本概念
在 Kubernetes 中,容器运行时(Container Runtime)是集群 Node 节点的核心组件之一。
Container Runtime 的主要功能包括:
镜像管理
容器生命周期管理,包括容器的创建、启动、停止、删除
资源隔离
网络配置
存储挂载
安全特性
Kubernetes 集群的 Kubelet 组件,可以通过 Container Runtime Interface(CRI)与 Container Runtime 进行交互,确保容器能够按照 Kubernetes 的调度策略和管理要求,在 Node 节点上运行。
主流的容器运行时有 Docker、Containerd 等。Docker 是早期最流行的容器运行时,而 Containerd 最早是 Docker 的组件之一。本文将对 Docker 与 Containerd 的关系、选择等内容进行详细解读。
Docker 简介
笔者在《【Docker】专题一:Docker 基本架构》中做过介绍,点击查看更多详细内容。
行者Sun,公众号:实施运维知识交流【Docker】专题一:Docker 基本架构
Docker Daemon 将高层指令(如 docker run)转换为 Containerd 可以理解的指令 Containerd 则使用 Runc 作为容器运行时(Container Runtime),通过调用 Runc 实际执行这些指令
Containerd 简介
Containerd 是一种行业标准的容器运行时,强调简单性、健壮性和可移植性。
Containerd 最初是 Docker 的组件之一,负责管理容器的生命周期,其设计目标是提供一个简单、高效、安全的容器运行时,专注于核心功能,避免不必要的复杂性。
2017 年,Docker 将 Containerd 作为一个独立的容器运行时项目,捐赠给了云原生计算基金会(CNCF),目前已经成为容器管理领域的标准。
容器运行时的选择
1、Kubernetes 场景下的选择
Kubernetes 弃用对 Docker 的直接支持之前,Kubelet 使用 Containerd 作为高层运行时,中间需要经过 Dockershim 和 Dockerd 两步转发 Kubernetes 弃用对 Docker 的直接支持之后,Kubelet 直接访问 Containerd,提升了容器运行时的调用效率(🔔 CRI-Plugin 运行在 Containerd 进程中,实现类似 Dockershim 的功能)
使用 DinD(Docker in Docker) 使用 docker build、docker push、docker save、docker load 等命令 调用 docker API 使用 Docker Compose、Docker Machine、Docker Swarm 使用 Sealer 部署 Kubernetes 集群,默认使用 Docker 作为容器运行时
Containerd 安装方法(二进制方式)
# AMD架构
wget https://github.com/containerd/containerd/releases/download/v1.7.21/containerd-1.7.21-linux-amd64.tar.gz
tar -xzvf containerd-1.7.21-linux-amd64.tar.gz -C /usr/
systemctl daemon-reload
systemctl enable --now containerd
===================================================================================
# ARM架构
wget https://github.com/containerd/containerd/releases/download/v1.7.21/containerd-1.7.21-linux-arm64.tar.gz
tar -xzvf containerd-1.7.21-linux-amd64.tar.gz -C /usr/
systemctl daemon-reload
systemctl enable --now containerd
Containerd 常用命令
ctr 是 Containerd 自带的客户端工具
crictl 是 CRI 客户端工具,比较接近 docker 命令
此外还有 nerdctl 等类似工具,以后找机会给大家详细介绍。
1、ctr 命令
ctr -n <ns> i xx
ctr i ls
ctr i rm <镜像ID或镜像名>
ctr i pull <镜像名>
ctr i tag <旧镜像名> <新镜像名>
ctr i import xxx.tar
ctr i export xxx.tar <镜像名>
ctr -n <ns> c xx
ctr c ls
ctr c rm <容器ID或容器名>
ctr c info <容器ID或容器名>
ctr c create <镜像ID或镜像名> <容器名>
# 镜像操作命令
crictl img # 查看本地镜像列表
crictl pull <镜像ID或镜像名> # 拉取远程镜像
crictl rmi <镜像ID或镜像名> # 删除本地镜像
# 容器操作命令
crictl ps -a # 查看容器列表
crictl rm <容器ID或容器名> # 删除容器
crictl logs <容器ID或容器名> # 查看容器日志
crictl stats / statsp # 查看容器 / Pod 资源使用情况
书籍推荐
最后推荐一本笔者从 Docker 进阶到 Kubernetes 自学过程中,受益较深的书籍。笔者经常复读,并结合工作实践不断加深理解和体会,可谓常读常新。希望这本书可以帮助到更多对 Kubernetes 感兴趣或刚开始学习的读者。