在arm64环境下测试kata-containers对接firecracker,kata2.0需要使用containerd,不能使用docker,docker将kata版本硬编码成了v1

下载kata-containers

x86可直接下载官方打包好的压缩包,arm64需要自己编译

curl -OL https://github.com/kata-containers/kata-containers/releases/download/2.1.1/kata-static-2.1.1-x86_64.tar.xz

下载源码文件

github慢可以使用github.com.cnpmjs.org,与官方会有一天延迟,也可clone源码,然后git checkout 2.1.1

curl -OL https://github.com/kata-containers/kata-containers/archive/refs/tags/2.1.1.tar.gz

解压并进入代码目录

tar -xf 2.11.tar.gz

cd kata-containers-2.1.1/

拷贝配置文件

kata默认使用的配置文件为/usr/share/defaults/kata-containers/目录下的configuration.toml

将src/runtime/cli/config/configuration-*.toml的所有文件拷贝到ls /usr/share/defaults/kata-containers/目录下,便于之后使用

编译容器运行时

注:需要go环境,可17.4

编译二进制

# make runtime

会在src/runtime/目录下生成如下文件

# ls kata-*

kata-monitor  kata-netmon  kata-runtime

# ls containerd-shim-kata-v2

containerd-shim-kata-v2

将二进制文件拷贝到/usr/bin/下

编译虚拟机系统镜像

创建rootfs镜像

注意:需要docker环境,并且运行时为runc,需要rust环境,脚本会自动安装rust,但容易超时失败,并且不能加速下载依赖包,不使用docker还会出现类似以下错误

losetup: /tmp/tmp.8guQYiN2HY:警告,文件小于 512 个字节,回环设备可能无用或在系统工具中看不到

rust环境安装见rust环境搭建_weixin_42758299的博客-CSDN博客

需要添加aarch64-unknown-linux-musl

rustup target add aarch64-unknown-linux-musl

修改docker国内镜像源

# cat /etc/docker/daemon.json

{

    "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]

}

安装依赖

yum install parted git -y

创建本地rootfs

cd tools/osbuilder/rootfs-builder/

GOPATH=$GOPATH USE_DOCKER=true ./rootfs.sh ${distro}

注:distro可用./rootfs.sh -l查看,表示可创建的虚拟机系统,本次使用的是ubuntu

# ./rootfs.sh -l

alpine

centos

clearlinux

debian

fedora

gentoo

suse

ubuntu

会生成一个rootfs在当前目录下,使用ubuntu生成的是目录名为rootfs-bionic

# ls rootfs-bionic

bin  boot  dev etc  home  lib media  mnt  opt  proc  root  run  sbin srv  sys  tmp  usr  var

编译rootfs镜像

使用上面创建的本地rootfs

cd tools/osbuilder/image-builder/

USE_DOCKER=true ./image_builder.sh ../rootfs-builder/rootfs-bionic

生成的文件在当前目录,为:

kata-containers.img

将文件拷贝到/usr/share/kata-containers/目录下

编译内核

cd tools/packaging/kernel

安装依赖

yum install -y flex bison bc diffutils

修改build-kernel.sh

将cdn.kernel.org改为www.kernel.org

执行如下命令

./build-kernel.sh setup

./build-kernel.sh build

./build-kernel.sh install

生成的文件在/usr/share/kata-containers/

# ls /usr/share/kata-containers/

config-5.10.25 vmlinux-5.10.25-85  vmlinux.container  vmlinuz-5.10.25-85  vmlinuz.container

安装firecracker

下载

curl -OL https://github.com.cnpmjs.org/firecracker-microvm/firecracker/releases/download/v0.23.4/firecracker-v0.23.4-aarch64.tgz

解压

tar -xf firecracker-v0.23.4-aarch64.tgz

有如下文件

# ls release-v0.23.4/

firecracker_spec-v0.23.4.yaml  firecracker-v0.23.4-aarch64  jailer-v0.23.4-aarch64  LICENSE  NOTICE  THIRD-PARTY

将firecracker-v0.23.4-aarch64和jailer-v0.23.4-aarch64拷贝到/usr/bin/,并改名为firecracker和jailer即可

安装containerd

arm64环境下如果containerd没有命令行工具,可以使用如下工具,containerd官方推出的nerdctl,下载full压缩包,里面包含nerdctl和containerd

curl https://github.com/containerd/nerdctl/releases/download/v0.8.3/nerdctl-full-0.8.3-linux-arm64.tar.gz

可以把nerdctl和containerd拷贝到/usr/bin,直接使用containerd启动服务

配置devmapper

AWS Firecracker不支持 virtiofs,只能使用 virtio 块设备

可以使用如下脚本进行配置:

#!/bin/bash

set -ex

DATA_DIR=/var/lib/containerd/io.containerd.snapshotter.v1.devmapper

POOL_NAME=containerd-pool

mkdir -p ${DATA_DIR}

# Create data file

sudo touch "${DATA_DIR}/data"

sudo truncate -s 100G "${DATA_DIR}/data"

# Create metadata file

sudo touch "${DATA_DIR}/meta"

sudo truncate -s 40G "${DATA_DIR}/meta"

# Allocate loop devices

DATA_DEV=$(sudo losetup --find --show "${DATA_DIR}/data")

META_DEV=$(sudo losetup --find --show "${DATA_DIR}/meta")

# Define thin-pool parameters.

# See https://www.kernel.org/doc/Documentation/device-mapper/thin-provisioning.txt for details.

SECTOR_SIZE=512

DATA_SIZE="$(sudo blockdev --getsize64 -q ${DATA_DEV})"

LENGTH_IN_SECTORS=$(bc <<< "${DATA_SIZE}/${SECTOR_SIZE}")

DATA_BLOCK_SIZE=128

LOW_WATER_MARK=32768

# Create a thin-pool device

sudo dmsetup create "${POOL_NAME}" \

    --table "0 ${LENGTH_IN_SECTORS} thin-pool ${META_DEV} ${DATA_DEV} ${DATA_BLOCK_SIZE} ${LOW_WATER_MARK}"

cat << EOF

#

# Add this to your config.toml configuration file and restart containerd daemon

#

[plugins]

  [plugins.devmapper]

    pool_name = "${POOL_NAME}"

    root_path = "${DATA_DIR}"

    base_image_size = "40GB"

EOF

注意需要将最后的输出的plugins这一段添加到/etc/containerd/config.toml,没有文件则手动创建

为了使devmapper在机器重启之后继续生效,可使用以下脚本

#!/bin/bash

set -ex

DATA_DIR=/var/lib/containerd/io.containerd.snapshotter.v1.devmapper

POOL_NAME=containerd-pool

# Allocate loop devices

DATA_DEV=$(sudo losetup --find --show "${DATA_DIR}/data")

META_DEV=$(sudo losetup --find --show "${DATA_DIR}/meta")

# Define thin-pool parameters.

# See https://www.kernel.org/doc/Documentation/device-mapper/thin-provisioning.txt for details.

SECTOR_SIZE=512

DATA_SIZE="$(sudo blockdev --getsize64 -q ${DATA_DEV})"

LENGTH_IN_SECTORS=$(bc <<< "${DATA_SIZE}/${SECTOR_SIZE}")

DATA_BLOCK_SIZE=128

LOW_WATER_MARK=32768

# Create a thin-pool device

sudo dmsetup create "${POOL_NAME}" \

    --table "0 ${LENGTH_IN_SECTORS} thin-pool ${META_DEV} ${DATA_DEV} ${DATA_BLOCK_SIZE} ${LOW_WATER_MARK}"

重启containerd服务

kata配置

为了区分对接的不同vmm,可以进行如下操作

创建文件/usr/bin/containerd-shim-kata-fc-v2,并赋予可执行权限,否则将/usr/share/defaults/kata-containers/configuration-fc.toml文件改为configure.toml即可

文件内容为:

#!/bin/bash

KATA_CONF_FILE=/usr/share/defaults/kata-containers/configuration-fc.toml /usr/bin/containerd-shim-kata-v2 $@

修改/etc/containerd/config.toml,把以下内容加到[plugins]下

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]

  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-fc]

    runtime_type = "io.containerd.kata-fc.v2"

重启containerd

测试

拉取镜像并使用kata容器运行时启动容器

# nerdctl pull --snapshotter devmapper docker.io/library/ubuntu:latest

# nerdctl run --snapshotter devmapper --runtime io.containerd.run.kata-fc.v2 -ti --rm  docker.io/library/ubuntu:latest  bash

root@1b4ebd9fbd52:/#

root@1b4ebd9fbd52:/# uname -a

Linux 1b4ebd9fbd52 5.10.25 #1 SMP Wed Dec 15 13:39:55 CST 2021 aarch64 aarch64 aarch64 GNU/Linux

其他vmm

如果要使用其他vmm的话,只需要下载对应vmm的二进制文件,与configuration.toml匹配即可,另外需要看用的vmm是否支持virtiofs,否则需要devmapper

如果需要使用virtiofs,比如使用qemu或者cloud-hypervisor时,需要编译virtiofsd

编译virtiofsd

如果github访问慢,可以将build-base-qemu.sh里qemu_repo="https://github.com.cnpmjs.org/qemu/qemu.git",然后将Dockerfile里的github.com都改为github.com.cnpmjs.org

# cd tools/packaging/static-build/qemu

# make

会生成一个压缩包kata-static-qemu.tar.gz

解压之后是一个opt目录,virtiofsd文件在opt/kata/libexec/kata-qemu/virtiofsd

同理,也可以直接通过该目录下的firecracker和cloud-hypervisor获取firecracker和cloud-hypervisor的二进制,不用去单独下载firecracker和cloud-hypervisor了,其实这两个脚本内容也是去github下载编译好的二进制

如下为使用cloud-hypervisor,不用使用devmapper

# nerdctl run --runtime io.containerd.run.kata-clh.v2 -ti --rm busybox:latest  sh

/ #

/ # uname -a

Linux f52317cfb826 5.10.25 #1 SMP Thu Dec 16 10:07:47 CST 2021 aarch64 GNU/Linux

参考

Running containers on Firecracker microVMs using kata on kubernetes | CloudKernels

https://github.com/kata-containers/kata-containers/blob/main/docs/Developer-Guide.md

https://github.com.cnpmjs.org/kata-containers/kata-containers/blob/main/tools/packaging/kernel/README.md#build-kata-containers-kernel

Kata Containers - ArchWiki

kata-containers对接firecracker相关推荐

  1. 从零开始入门 K8s | Kata Containers 创始人带你入门安全容器技术

    作者 | 王旭  蚂蚁金服资深技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 28 讲,点击直达课程页面. 关注"阿里巴巴云原生"公众号,回复 ...

  2. Kata Containers及相关vmm介绍

    Kata Containers介绍 Kata Containers 是轻量级虚拟机的一种新颖实现,可无缝集成到容器生态系统中. Kata Containers 与容器一样轻巧快速,并与容器管理层集成, ...

  3. Kata Containers创始人:安全容器导论

    从2015年5月初开始创业开发 HyperContainer (runV) 到现在,也快五年了,在这个时候还来写一篇什么是安全容器,显得略有尴尬.不过,也正是经过这五年,越来越多到人开始感到,我需要它 ...

  4. OpenStack基金会携手Intel、Hyper发布开源Kata Containers项目

    OpenStack基金会本周二发布了新的开源项目Kata Containers,其目标是将虚拟机(VM)的安全优势与容器的高速及可管理性结合起来,为用户带来最出色的容器解决方案,同时提供最强大的虚拟机 ...

  5. 基于 Kata Containers 与 iSulad 的云容器实践解析

    在 4 月 9 号结束的 OpenStack 基金会董事会议上,董事们投票批准了 Kata Containers 成为基金会旗下第一个新的顶级开放基础设施(Open Infrastructure)项目 ...

  6. Kata Containers介绍

    美国东部时间12月5日早上8点,OpenStack基金会于KubeCon峰会正式发布基于Apache 2.0协议的容器技术Kata Containers项目(https://katacontainer ...

  7. 虚拟机容器嵌合体—— Kata Containers正式走出实验室

    将虚拟机的安全优势与基于软件的容器的部署和管理优势相结合在一起的开源的Kata Containers项目,在周二达到了1.0的里程碑. 由于去年12月宣布的英特尔Clear Containers和Hy ...

  8. Kata Containers 2.0 的进击之路

    Kata Containers 开源项目于2017年底正式启动,其目标是将虚拟机(VM)的安全优势与容器的高速及可管理性相结合,为用户带来出色的容器解决方案.该项目在过去两年取得了哪些进展?下一版本的 ...

  9. 配置Docker以使用Kata Containers

    Kata Containers是一种轻量级的虚拟化技术,它进一步加强了容器的安全性和隔离性.在Linux系统中,可以通过以下步骤安装Kata Containers: 添加Kata Containers ...

  10. Docker集成kata containers

    我现在机器是Linux mint 20.1 对标的是Ubuntu20.04 所以使用20.04的镜像源 echo "deb http://download.opensuse.org/repo ...

最新文章

  1. arXiv爆款:想了解Attention就看它!
  2. Linux驱动程序中的file,inode,file_operations三大结构体
  3. Codeforces 757C - Felicity is Coming!
  4. 评价指标:目标检测的评价指标 - mAP
  5. 一个程序员的职业规划
  6. 从CLR GC到CoreCLR GC看.NET Core对云原生的支持
  7. 李国庆离开当当,广东消委会告长隆,智能校服提供定位功能,全球首个5G火车站来了,这就是今天的大新闻...
  8. shell学习脚本-tomcat停止脚本
  9. java零碎总结---java实现截图并保存到本地
  10. 在LINUX上,Apache安装记
  11. Java分布式面试题集合(收藏篇)
  12. 关于在IDEA中Tomcat乱码的解决办法
  13. Android分享wifi给电脑,使用Android手机共享手机网络给PC上网
  14. GAN-cls:具有匹配感知的判别器
  15. Zakas大神:LeanPub自出版一年记
  16. 信号处理之FIR数字滤波器(Matlab仿真)
  17. Google服务和软件大全
  18. 2018Java阿里编程测验_2018阿里编程测验题:最短汉密尔顿回路
  19. 【程序源代码】微信小程序商城
  20. Lombok @RequiredArgsConstructor @Qualifier

热门文章

  1. 2014年华为收入122亿美元
  2. 请假代码java web_学生请假管理系统
  3. sql注入漏洞--sqlmap使用
  4. 移动硬盘坏点测试软件,移动硬盘坏道检测工具
  5. 揭秘阿里CDN核心技术(http://wenku.baidu.com/view/ffc63474b4daa58da1114a45.html?re=view)
  6. 【MATLAB笔记】对矩阵进行满秩分解
  7. SEP8266 由零开始(一),最小系统,下载,与WiFi建立
  8. apple id两步验证服务器,apple id两步验证 苹果Apple ID两步式验证设置使用教程
  9. Web mfw Writeup
  10. 【嵌入式系统】STM32时钟系统+时钟配置函数解析