【专题】Linux 容器介绍

2010-03-12 topic container

Linux 内核提供了 cgroup 以及 namespace 的基本隔离手段,然后在此基础上,提供了更上层的封装,包括了 Docker、rkt、PouchContainer 以及最新的 Podman 等等。

Docker

Docker Logo

一个开源的应用容器引擎,可以让开发者将应用及其依赖包打包到一个可移植的镜像中。

  • 简单介绍 简单介绍基本概念,环境安装,基础命令等信息。
  • Volume 容器是不会保存数据的,不过可以通过 Volume 持久化数据。
  • Network 支持多种配置,默认有 host bridge 等。
  • Compose 一个基于 Docker 的简单编排实现,可以用于本地的简单环境。
  • Dockerfile 主要是通过基础镜像如何构建新的服务或者镜像。
  • Containerd 作为 Docker 运行时的替换,较新的 K8S 版本中已经默认使用该组件。
  • RunC 通过 OCI 定义了容器运行时标准,这是具体的实现。

示例

  • sshd 基于 Alpine 以及 OpenSSH 搭建简单的 SSHD 服务。

LXC

直接通过内核提供的机制实现隔离,相比 Docker 更加简单,但相对来说,Docker 的生态要更加丰富。最初 Docker 依赖 LXC 运行,不过慢慢提供自己的运行态,也就是 libcontainer,当前是 runc 的一部分。

  • 基本介绍 对 Linux Container 的简单介绍,包括如何安装、新建、启动容器等操作。
  • 网络配置 类似于 Docker 的网络部署,主要介绍 veth、vlan、macvlan 等概念。
  • 使用示例 介绍如何启动一个 sshd 单进程,对于高密度的资源隔离有很大参考意义。

其它

  • 镜像分析 容器的镜像是一层层叠加的,默认提供的工具不方便使用,这里介绍 Dive 工具。
  • 主机映射 如果没有提供 DNS 解析或者只是测试用环境,可以简单通过 /etc/hosts 进行映射。
  • CGroup 容器底层依赖的内核实现,用于在内核层实现资源隔离,还可以参考 cpuset 子模块。
  • Namespace 通过网络命名空间可以隔离不同的网络设备。
  • Podman 其提供的功能与 Docker 类似,但是不再以 root 用户运行,而且非常驻进程。
  • 资源限制 在 Linux 中最原始的一种资源限制方法,也就是 ulimits 。
  • Chroot 这实际上是做目录隔离的方法,也是最初的一种方式。

Kubernetes

K8S Logo

一个开源用于管理容器化应用的平台,其目标是让部署容器化的应用简单并且高效,提供了应用部署、规划、更新、维护,一个扩展性很高的容器管理平台。

  • 基本介绍 与 K8S 相关的基本介绍,例如客户端等。
  • 权限管理 这里主要介绍 RBAC 的使用。
  • 网络部署
  • 配置上下文 通过 kubeconfig 维护集群、用户、命名空间、身份认证相关的信息,可以用来快速切换访问的集群。

常用命令

  • 基础命令 整理常用的命令,也就是 K8S 的 CheatSheet 列表。
  • Patch 可以对集群中的资源进行部分更新,也就是以补丁 (Patch) 方式修改、更新某资源的字段。
  • Kustomize 这是 K8S 的原生配置管理,以无模板方式来定制应用的配置。

简单部署

最常见的 MiniKube 是需要虚拟机的,这里先简单介绍如何只在单机上以最简单的方式安装并启动 K8S 服务,然后介绍另外一种更加简单常用的单机部署方式,其只依赖 Docker 服务即可。

  • 简单安装 如何在机器上以独立进程方式部署 K8S 的基础服务,这里只是简单介绍。
  • 本地测试 一个可以在本地快速创建 K8S 集群的工具,也就是 Kind,这里介绍其基本原理和使用方式。
  • 离线镜像 单纯通过离线无需联网制作镜像,也就意味着无需依赖基础镜像。

示例

  • Nginx 通过 Nginx 镜像介绍与网络相关的配置。

常用资源

  • Pod/Deployment 在 K8S 中的最小单元,封装了一个或多个应用程序的容器、存储资源、网络 IP 以及管理容器的选项。
  • ConfigMapSecret 用来管理集群中的配置信息,通常前者用于非保密信息,后者保存的是加密信息,例如密码。
  • Ingress 也包括了 Port 的相关介绍。

源码介绍

  • 客户端 简单介绍一个 GoLang 编写的客户端使用技巧。

自定义资源

在 K8S 1.7 开始支持 Custom Resource Define, CRD 自定义资源,这样可以动态注册到集群中,就与其它资源类似可以通过 kubectl 来管理该资源了。

  • 基本介绍 简单介绍基本概念,同时包含了简单的示例。
  • Controller 详细介绍如何通过常用的三方库构建复杂的 Controller 实现。

其它

  • Pause 这是 K8S 中作为 init 的管理进程存在,会作为其它容器的父容器。
  • helm 这是 K8S 中的包管理器,可以非常方便的完成应用的安装、卸载、升级等。

参考

  • OperatorHub 包含了各类 Operator 的实现,可供参考。

其它

  • KVM 基于内核模块的虚拟机,介绍其基本原理和使用,还可参考 网络配置 内容。
  • YAML 当前 K8S 的大部分配置都是采用该格式,这里详细介绍下。
  • Chroot 用来构建一个最小的运行系统,通常用于运行环境的隔离。