容器

openEuler 1.0 Base 中提供容器运行的基础平台 iSula。iSula 基础容器平台同时提供 Docker engine 与轻量化容器引擎 iSulad,用户可根据需要自主选择。

同时,iSula 容器平台还支持运行 kata-container。Docker、containerd、runc、kata-container 均在社区版本的基础上进行了稳定性增强与 bugfix。

iSulad

iSula 在居住于中南美洲亚马逊丛林的巴西原住民眼里,它是一种非常强大的蚂蚁,学术上称为“子弹蚁”,因为被它咬一口,犹如被子弹打到那般疼痛,它是世界上最强大的昆虫之一。iSulad 作为轻量化的容器底座,可以为多种场景提供最灵活、最稳定、最安全的底层支撑,与子弹蚂蚁“小个头、大能量”的形象不谋而合。

iSula 通用容器引擎(iSulad)是一种新的容器解决方案,提供统一的架构设计来满足CT和IT领域的不同需求。轻量级容器具有轻、灵、巧、快的特点,不受硬件规格和架构的限制,底噪开销更小,可应用领域更为广泛。

iSulad重点能力如下:

容器镜像管理

容器镜像是容器运行的基础,在主机上以分层的形式存放,运行前通过联合挂载的方式挂载成统一视图的rootfs供容器使用。容器的镜像管理包括镜像的拉取、导入、删除以及查询。

容器管理

容器管理功能提供用户创建、运行、停止、删除、重启等操作容器的能力。

CNI网络

实现CRI接口对接CNI网络的能力,包括CNI网络配置文件的解析、CNI网络的加入和退出。

CRI接口

CRI API 接口是由kubernetes 推出的容器运行时接口,CRI定义了容器和镜像的服务接口。iSulad支持CRI接口,实现和kubernetes 的对接。

容器资源管理

对容器使用资源进行动态管理:

  • namespace共享
  • 限制运行时的CPU资源
  • 限制运行时的内存资源
  • 限制运行时的IO资源
  • 限制容器rootfs存储空间
  • 限制容器内文件句柄数
  • 限制容器内可以创建的进程/线程数
  • 配置容器内的ulimit值

Docker

Docker 的英文本意是码头工人,码头工人的工作就是将商品打包到 Container(集装箱)并且搬运 Container、装载 Container。从 Docker 字面上的解释就可以看出 Docker 是干什么的, 对应到 Linux 中,Docker 就是将App打包到 Container,通过 Container 实现 App 在各种平台上 的部署,运行。Docker 通过 Linux Container 技术将 App 变成一个标准化的、可移植的、自管理的组件,实现了应用的 build once、run everywhere。Docker 技术特点是:应用快速发布、应用部署和扩容简单、更高的应用密度、应用管理更简单。

openEuler 1.0 Base 集成 moby 18.09 版本,并在版本基础上进行了 bugfix 和稳定性增强。

安全容器

安全容器是虚拟化技术和容器技术的有机结合,相比普通 Linux 容器,安全容器具有更好的隔离性。

普通 Linux 容器利用 namespace 进行进程间运行环境的隔离,并使用 CGroup 进行资源限制;因此普通 Linux 容器本质上还是共用同一个内核,单个容器有意或无意影响到内核都会影响到整台宿主机上的容器。

安全容器是使用虚拟化层进行容器间的隔离,同一个主机上不同的容器间运行互相不受影响。

iSula 容器平台支持创建安全容器,使用 kata-container 作为容器的运行时。

openEuler 1.0 Base 集成了 kata-container 1.7 版本,该版本主要特性如下:

  • 在社区版本的基础上,进行了稳定性和可靠性加固
  • 重构了社区Host Cgroup资源限制方案,支持CPU、Memory和Blkio资源限制,更适用于生产环境
  • 更灵活的网络配置方案,支持通过kata-network接口创建和更新网卡和路由表
  • 支持DPDK/SPDK高性能网络
  • 支持容器网络状态信息监控

系统容器

系统容器主要应对在重计算、高性能、大并发的场景下,重型应用和业务云化的问题,相比较虚拟化技术,系统容器可直接继承物理机特性,同时具备性能更优良,较少底噪的优点。从系统资源分配来看,系统容器在有限资源上相比虚拟机可分配更多计算单元,降低成本,通过系统容器可以构建产品的差异化竞争力,提供计算密度更高,价格更便宜,性能更优良的的计算单元实例。

iSula 容器平台支持创建系统容器,并能支持在系统容器内动态调整设备、运行资源,且提供更优秀的 user namespace 隔离。

系统容器相比于普通容器,提供了如下增强特性:

本地文件系统启动

普通容器只能通过远端pull镜像到本地启动,pull镜像过程可能会因网络问题导致耗时较长,而系统容器支持本地文件系统启动,可实现快速部署

容器内运行systemd

系统容器与普通容器最大的差异就在于容器的init进程启动,普通容器无法实现容器启动时自动拉起systemd,而系统容器具备这个能力

增强隔离性

  • 支持使用lxcfs插件实现容器内资源视图隔离,同时支持lxcfs插件热插拔和高可用
  • 支持多对应user namespace,实现容器和主机uid/gid隔离
  • 支持配置容器内namespace化内核参数可读写,在容器内可动态配置namespace化内核参数值

控制容器访问权限

支持通过TLS认证方式来对用户身份进行验证,并通过对接authz插件服务控制用户的操作权限

容器资源动态管理

  • 动态添加/删除/更新容器内的设备
  • 动态添加/删除/更新容器内的网卡
  • 动态添加/删除容器内的路由
  • 动态添加/删除容器内的卷

其它特性列表

  • 环境变量持久化
  • 限制容器内句柄数
  • 执行reboot/shudown命令
  • 动态加载内核模块
  • 共享内存通信