Skip to content

Kubernetes 01 - 容器、运行时、引擎与编排工具

zzh0u

不要死扣概念,先跑一个最小实现,再逐步深入。这个过程中遇到问题和新概念,再回看,会有新的理解。

最近在买了一台服务器,所以想着用它系统学习和上手一下 Kubernetes。首先,k8s 是一个容器编排工具,那为了避免误解,我们需要厘清下面几个概念:容器、容器运行时、容器引擎以及容器编排工具。

容器、容器运行时、容器引擎以及容器编排工具

1. 容器(Container)

容器是一个标准化的软件单元,将应用代码及其依赖(运行时、库、环境变量、配置文件)打包在一起,在宿主机操作系统上以轻量级进程形式运行,通过 Linux 内核的 namespace 和 cgroup 实现隔离与资源限制。我会使用 Docker 作为示例。他们有下面这些特征:

2. 容器运行时(Container Runtime)

负责直接执行容器的底层软件,管理容器的完整生命周期(创建、启动、停止、删除),配置隔离环境(namespace、cgroups、网络、存储)。

类型作用代表
低级运行时直接调用操作系统内核创建容器进程,实现真正的隔离runc、crun、Kata Containers
高级运行时管理镜像拉取/存储、容器生命周期,调用低级运行时执行containerd、CRI-O、Docker Engine(内含运行时)

Kubernetes 通过 CRI(Container Runtime Interface)与高级运行时交互,不再直接操作 Docker。

3. 容器引擎(Container Engine)

面向用户的交互层软件,提供 CLI/API 接口,支持镜像构建、分发、容器管理等完整功能集。典型的有 Docker Engine。这是一个完整的容器引擎,它内部使用 containerd 作为高级运行时,再调用 runc 作为低级运行时。

维度容器引擎容器运行时
定位用户入口,提供完整工具链底层执行层,专注生命周期
功能构建镜像、管理网络卷、编排支持运行容器、管理 namespace/cgroups
范围包含运行时作为组件被引擎调用,或直接被 Kubernetes 调用
代表Docker Engine、Podmancontainerd、CRI-O、runc

4. 容器编排工具(Container Orchestration)

集群层面自动化管理多容器、多主机的工具,负责调度、服务发现、负载均衡、扩缩容、故障恢复等。

核心能力:

与运行时的关系:编排器不直接运行容器,而是调用节点上的容器运行时(通过 CRI)来执行。

工具定位特点
Kubernetes事实标准的编排平台支持多运行时(containerd/CRI-O)、功能最全
Docker SwarmDocker 内置的轻量编排与 Docker CLI 集成,适合中小规模

关键区别

参考链接

Next
[译]Go 中处理文件上传的正确姿势