【云原生】容器方案 isula、containerd 基本功能测试

isula、containerd 基本功能测试

测试环境

  • 树莓派 4B
  • CPU: Cortex-A72 4C
  • RAM: 8G
  • SD卡: 128G C10 A1 U3
  • OS: openEuler-22.03
  • Docker: 20.10.17
  • iSula: 2.0.7
  • Containerd: 1.6.6

除 Docker 外没有集成网络组件,isula 与 containerd 均使用 host 网络测试。

测试情况

containerd openEuler 源均为 1.2 版本太低.

  1. 从 docker 官方源安装 containerd.io 1.6.6-3.1.el7 涉及依赖:container-selinux policycoreutils selinux-policy selinux-policy-targeted
  2. 安装 container networking-plugins , oe源版本 0.8.6-5 版本太低, network 组件不可用, 使用来自 nerdctl 仓库源 https://github.com/containerd/nerdctl/releases/download/v0.21.0/nerdctl-full-0.21.0-linux-arm64.tar.gz
  3. 安装 iptables

问题与可能解决方法:

  • 日志:由于 containerd 不支持 docker plugins loki 日志收集服务不可用, 可替换为使用 promtail 直接从本地收集日志.
  • 启动方式:nerdctl compose 代替 docker-compose .

nerdctl compose up -d 启动之后, 基本服务可用(只测试了上传下载)

使用 containerd 替换 docker 需要进行以下操作:

  • containerd 高版本 rpm 打包并推入仓库
  • container networking-plugins 高版本 rpm 打包并推入仓库
  • nerdctl 打包为 rpm 并推入仓库
  • nerdctl iptables container-selinux policycoreutils selinux-policy selinux-policy-targeted containerd containernetworking-plugins 加入 os 构建
  • system-agent 中调整 docker network create 为 nerdctl network create
  • system-agent 中调整 docker-compose 相关操作为 nerdctl compose
  • system-agent 中检测 docker 服务是否启动的相关操作更换为检测 containerd 是否启动
  • system-agent 中监听的 docker0 Ip 需要修改为 nerdctl ip

资源占用:

  • containerd 本身资源占用比 docker 小,但为了兼容 docker-compose 的模式,引入 nerdctl 做 containerd 兼容 docker-compose.yml 文件的解析方式,每个容器都会启动一个 nerdctl 的子进程来存储配置、存储日志、调用 cni 创建网络等,导致实际占用的总体内存稍高于 dockerd + docker-driver + docker-proxy 所占用的内存。
  • containerd 共计 490-510MB,isulad 共计 450-480MB,docker 共计 380M-420M。(如使用 ctr/isula 直接创建 host 模式 containerd/isula 的容器,containerd 守护进程共约 70-80MB,isulad 共计 30-40MB,期中 containerd 和 isula 均无网络等相关配置,仅能使用 host 网络,或使用 cni 接入 bridge 网络。)

启动速度:

  • nerdctl 不支持 healthcheck 和 loki 日志插件,启动速度对比中将 docker-compoase.yml 中引用的 loki 插件和 healthcheck 相关配置去除
  • containerd 使用 nerdctl 启动 docker-compose.yml 速度较快,10s 内
  • docker-compose 启动 docker-compose.yml 速度较快,20s 内,大致差距在与解析 docker-compose.yml 的速度
  • nerdctl 调用链 nerdctl -> containerd + cni -> shim-runc -> runc
  • docker-compose 调用链接 docker-compose -> dockerd -> containerd -> shim-runc -> runc

使用 host 问题与可能解决方法:

  • 使用 ctr 直接创建容器,host 本机网络模式启动,需修改 gateway 转发地址,与各模块容器端口,启动方式无法使用 compose 文件,需要执行命令启动。
  • 端口暴露的问题需要用防火墙处理。
  • 需要考虑端口冲突。

其他遗留问题:

  • isula、containerd、cri-o 不支持 docker-compose
  • redhat-podman openEuler 兼容性目前有问题,依赖库版本太低。
上一篇:基于R语言遥感随机森林建模与空间预测


下一篇:Spring Boot 快速入门与核心原理详解