一.安装qemu

注意,目前kata-container所要求的qemu最低版本是v2.7.0.在笔者的环境下(Ubuntu16.04 VM),apt-get官方源的最高版本是v2.5.0.所以不要用apt-get install的方式安装qemu.从github下载源码进行安装.这里推荐安装v2.8.1版本.因为更高版本的qemu的依赖无法用apt-get install直接安装.

具体安装步骤为:

1.进入qemu源码目录

执行./configure --enable-virtfs,这里是为了开启虚拟文件系统,如果不添加这个参数.在运行docker启动kata-container时,会报'virtio-9p-pci' is not a valid device model name: unknown的错误

2.执行make&&sudo make install

3.将/usr/local/bin/qemu-system-x86_64拷贝为/usr/bin/qemu-lite-system-x86_64

Kata-container 环境搭建手顺

二.安装kata组件

1.从github下载kata的相关组件,包括runtime,agent,proxy,shim,osbuilder,tests

2.进入kata-containers/runtime目录,执行sudo make&&sudo make install.

执行sudo kata-runtime kata-check,这条指令会给出一组检查结果,这组检查结果告诉用户,当前系统是否满足运行kata-containers的条件.参考结果如下图,

可以看到该主机没有开启虚拟化支持.我的测试环境是一台qemu虚拟机,利用virsh指令编辑其xml文件可以解决这个问题.

在测试主机所在的物理机上执行virsh edit wlh-kata,修改其cpu配置为

<cpu mode='custom' match='exact'>

<model fallback='forbid'>core2duo</model>

<feature policy='require' name='vmx'/>

<feature policy='require' name='sse4.1'/>

</cpu>

这里wlh-kata是这台虚拟机的名字,可以用virsh list --all获得.

修改了xml文件后重启虚拟机,再次执行sudo kata-runtime kata-check,确认所有检查通过.

3.依次在其他kata-containers组件目录下执行make&&sudo make install.

三.生成kata-container.img

1.Create a local rootfs

$ export ROOTFS_DIR=${GOPATH}/src/github.com/kata-containers/osbuilder/rootfs-builder/rootfs

$ sudo rm -rf ${ROOTFS_DIR}

$ cd $GOPATH/src/github.com/kata-containers/osbuilder/rootfs-builder

$ script -fec 'sudo -E GOPATH=$GOPATH USE_DOCKER=true ./rootfs.sh ${distro}'

2.build a rootfs image

$ cd $GOPATH/src/github.com/kata-containers/osbuilder/image-builder

$ script -fec 'sudo -E USE_DOCKER=true ./image_builder.sh ${ROOTFS_DIR}'

3.Install the rootfs image

$ commit=$(git log --format=%h -1 HEAD)

$ date=$(date +%Y-%m-%d-%T.%N%z)

$ image="kata-containers-${date}-${commit}"

$ sudo install -o root -g root -m 0640 -D kata-containers.img "/usr/share/kata-containers/${image}"

$ (cd /usr/share/kata-containers && sudo ln -sf "$image" kata-containers.img)

执行完以上步骤以后,会生成以下文件

wlh-kata@wlhkata-Standard-PC-i440FX-PIIX-1996:/usr/share/kata-containers$ ls -al

total 148020

drwxr-xr-x   2 root root      4096 6月  16 06:00 .

drwxr-xr-x 294 root root     12288 6月  16 05:59 ..

-rw-r-----   1 root root 268435456 6月  16 05:59 kata-containers-2018-06-16-05:59:41.532756720+0800-72dca93

lrwxrwxrwx   1 root root        58 6月  16 06:00 kata-containers.img -> kata-containers-2018-06-16-05:59:41.532756720+0800-72dca93

四.安装guest kernel image

$ go get github.com/kata-containers/tests

$ cd $GOPATH/src/github.com/kata-containers/tests/.ci

$ kernel_arch="$(./kata-arch.sh --golang)"

$ kernel_dir="$(./kata-arch.sh --kernel)"

$ tmpdir="$(mktemp -d)"

$ pushd "$tmpdir"

$ curl -L https://raw.githubusercontent.com/kata-containers/packaging/master/kernel/configs/${kernel_arch}_kata_kvm_4.14.x -o .config

$ kernel_version=$(grep "Linux/[${kernel_arch}]*" .config | cut -d' ' -f3 | tail -1)

$ kernel_tar_file="linux-${kernel_version}.tar.xz"

$ kernel_url="https://cdn.kernel.org/pub/linux/kernel/v$(echo $kernel_version | cut -f1 -d.).x/${kernel_tar_file}"

$ curl -LOk ${kernel_url}

$ tar -xf ${kernel_tar_file}

$ mv .config "linux-${kernel_version}"

$ pushd "linux-${kernel_version}"

$ curl -L https://raw.githubusercontent.com/kata-containers/packaging/master/kernel/patches/0001-NO-UPSTREAM-9P-always-use-cached-inode-to-fill-in-v9.patch | patch -p1

$ make ARCH=${kernel_dir} -j$(nproc)

$ kata_kernel_dir="/usr/share/kata-containers"

$ kata_vmlinuz="${kata_kernel_dir}/kata-vmlinuz-${kernel_version}.container"

$ [ $kernel_arch = ppc64le ] && kernel_file="$(realpath ./vmlinux)" || kernel_file="$(realpath arch/${kernel_arch}/boot/bzImage)"

$ sudo install -o root -g root -m 0755 -D "${kernel_file}" "${kata_vmlinuz}"

$ sudo ln -sf "${kata_vmlinuz}" "${kata_kernel_dir}/vmlinuz.container"

$ kata_vmlinux="${kata_kernel_dir}/kata-vmlinux-${kernel_version}"

$ sudo install -o root -g root -m 0755 -D "$(realpath vmlinux)" "${kata_vmlinux}"

$ sudo ln -sf "${kata_vmlinux}" "${kata_kernel_dir}/vmlinux.container"

$ popd

$ popd

$ rm -rf "${tmpdir}"

这一长串安装步骤来自于:

https://github.com/kata-containers/documentation/blob/master/Developer-Guide.md#install-guest-kernel-images

注意以下指令:

curl -L https://raw.githubusercontent.com/kata-containers/packaging/master/kernel/configs/${kernel_arch}_kata_kvm_4.14.x -o .config

这条指令用到了kernel_arch参数,kernel_arch的值是通过kernel_arch=”$(./kata_arch.sh --golang)”确定的.在笔者的机器上,执行这条指令得到的kernel_arch的值是amd64,然而并不存在文件.../configs/amd64_kata_kvm_4.14.x.如果是这样的话,直接让kernel_arch的值为x86_64.

五.配置docker

$ dir=/etc/systemd/system/docker.service.d

$ file="$dir/kata-containers.conf"

$ sudo mkdir -p "$dir"

$ sudo test -e "$file" || echo -e "[Service]\nType=simple\nExecStart=\nExecStart=/usr/bin/dockerd -D --default-runtime runc" | sudo tee "$file"

$ sudo grep -q "kata-runtime=" $file || sudo sed -i 's!^\(ExecStart=[^$].*$\)!\1 --add-runtime kata-runtime=/usr/local/bin/kata-runtime!g' "$file"

$ sudo systemctl daemon-reload

$ sudo systemctl restart docker

至此kata-containers搭建完成

执行 sudo docker run -ti --runtime kata-runtime busybox sh启动kata-container

参考:https://github.com/kata-containers/documentation/blob/master/Developer-Guide.md

kata-container环境搭建的更多相关文章

  1. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十三)kafka+spark streaming打包好的程序提交时提示虚拟内存不足(Container is running beyond virtual memory limits. Current usage: 119.5 MB of 1 GB physical memory used; 2.2 GB of 2.1 G)

    异常问题:Container is running beyond virtual memory limits. Current usage: 119.5 MB of 1 GB physical mem ...

  2. .Net Core 系列:1、环境搭建

    前言: 2016年6月28日微软宣布发布 .NET Core 1.0.ASP.NET Core 1.0 和 Entity Framework Core 1.0. .NET Core是微软在两年前发起的 ...

  3. 跨平台开发之阿里Weex框架环境搭建(一)

    转载自:http://www.cnblogs.com/fozero/p/5995122.html 一.介绍 Weex是阿里今年6月份推出的跨平台解决方案,6月底正式开源.官网 https://alib ...

  4. GJM : 用JIRA管理你的项目(一)JIRA环境搭建 [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  5. Hadoop.2.x_伪分布环境搭建

    一. 基本环境搭建 1. 设置主机名.静态IP/DNS.主机映射.windows主机映射(方便ssh访问与IP修改)等 设置主机名: vi /etc/sysconfig/network # 重启系统生 ...

  6. [原]项目进阶 之 持续构建环境搭建(四)Jenkins环境搭建

    在之前的几篇文章中,我给大家分别介绍了这次的持续化构建环境搭建的相关前提内容.如果说前面的文章都是小菜的话,那么今天的这篇文章就是我们这个系列文章的主菜. 1.前提 安装jenkins需要安装JDK. ...

  7. .Net Core 环境搭建

    .Net Core 系列:1.环境搭建 前言: 2016年6月28日微软宣布发布 .NET Core 1.0.ASP.NET Core 1.0 和 Entity Framework Core 1.0. ...

  8. scala lift环境搭建

    Intellij IDEA + scala插件 工欲善其事,必先利其器! 学习scala已经有一段时间了,对scala这门语言爱不释手,但同时也为scala糟糕的IDE工具支持感到懊恼(我是一个100 ...

  9. 基于docker的 Hyperledger Fabric 多机环境搭建(上)

    环境:ubuntu 16.04 Docker  17.04.0-ce go 1.7.4 consoul v0.8.0.4 ======================================= ...

随机推荐

  1. 洛谷树剖模板题 P3384 | 树链剖分

    原题链接 对于以u为根的子树,后代节点的dfn显然比他的dfn大,我们可以记录一下回溯到u的dfn,显然这两个dfn构成了一个连续区间,代表u及u的子树 剩下的就和树剖一样了 #include< ...

  2. BZOJ1025 [SCOI2009]游戏 【置换群 + 背包dp】

    题目链接 BZOJ1025 题解 题意就是问一个\(1....n\)的排列在同一个置换不断重复下回到\(1...n\)可能需要的次数的个数 和置换群也没太大关系 我们只需知道同一个置换不断重复,实际上 ...

  3. 洛谷 P3437 [POI2006]TET-Tetris 3D 解题报告

    P3437 [POI2006]TET-Tetris 3D 题目描述 The authors of the game "Tetris" have decided to make a ...

  4. 用iFrame模拟Ajax上传文件

    前段时间在解决ajax上传文件时折腾了好一阵.直接用$.post上传文本信息肯定是没有问题的.但是$.post直接上传图片是不可行的. 后来看到网上的一些解决方案,有现成的ajax上传文件的封装的方法 ...

  5. for 循环里的i++

    写代码的时间也不短了,今天看快速排序的算法的时候才去更深层次得理解... for (语句 1; 语句 2; 语句 3) {     被执行的代码块 } 语句 1 (代码块)开始前执行 语句 2 定义运 ...

  6. 结构型设计模式之外观模式(Facade)

    结构 意图 为子系统中的一组接口提供一个一致的界面,F a c a d e 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 适用性 当你要为一个复杂子系统提供一个简单接口时.子系统往往因 ...

  7. LPTSTR\LPCTSTR\LPWSTR\LPCWSTR 字母的意思 及 区别

    标签: 杂谈 分类: VC     char*   是指向ANSI字符数组的指针,其中每个字符占据8位(有效数据是除掉最高位的其他7位),这里保持了与传统的C,C++的兼容.        LP的含义 ...

  8. TCP/IP、Http、Socket 简单理解

    转自:http://blog.csdn.net/guyan0319 https://blog.csdn.net/guyan0319/article/details/79404216 一. 什么是TCP ...

  9. Xamarin XAML语言教程使用属性设置进度条的当前进度

    Xamarin XAML语言教程使用属性设置进度条的当前进度 在图12.19~12.21中我们看到的是没有实现加载的进度条,即进度条的当前进度为0,如果开发者想要修改当前进度,可以使用两种方式:一种是 ...

  10. 网页结构——head标签内

    之前写网页都很标准的格式,最近一个项目出现了页面闪动等一系列问题[项目不是前后端分离], 所以这边有后台的功劳,有部分后台是不管你页面结构的,在他们操作的时候可能会在,你的head内meta前加内联c ...