使用kata container 与docker集成
⒈KataContainers?
Kata Containers是新的虚拟机实现,可以实现和现在容器生态无缝连接,与时下最流行的容器编排工具k8s完美结合,提供容器的快速启动,和虚拟机的安全隔离,与Docker技术相比,容器之间不共用内核,使得隔离性更好。
Kata Containers 项目的主要目标是将虚拟化的安全隔离优势和容器的快速启动特点结合起来。
⒉即生Docker,何来Kata Containers?
Linux 容器轻巧,快速且易于集成到许多不同的应用程序工作流程中。但是,在运行容器时存在一些潜在的安全问题,特别是在单个操作系统中的多租户容器:最终,容器共享一个内核、 I / O 的一条路径、网络和内存等。
使用Docker轻量级的容器时,最大的问题就是会碰到安全性的问题,其中几个不同的容器可以互相的进行攻击,如果把这个内核给攻掉了,其他所有容器都会崩溃。如果使用KVM等虚拟化技术,会完美解决安全性的问题,但是会影响速度。
Kata旨在通过虚拟机管理程序来缓解这种安全问题——创建一个外观和感觉像容器的虚拟机。
Kata Containers项目通过整合Intel Clear Containers和Hyper runV技术,能够支持不同平台的硬件,并且兼容Open Container Initiative(OCI)和Kubernetes container runtime interface(CRI)接口规范。Kata Containers项目现在由OpenStack基金会管理,代码托管在Github(https://github.com/kata-containers)上。
⒊使用Kata Containers替换Docker?
从docker架构上看,kata-container和原来的runc是平级的。大家知道docker只是管理容器生命周期的框架,真正启动容器最早用的是LXC,然后是runc,现在也可以换成kata了。所以说kata-container可以当做docker的一个插件,启动kata-container可以通过docker命令。Kata最大的亮点是解决了传统容器共享内核的安全和隔离问题,办法是让每个容器运行在一个轻量级的虚拟机中,使用单独的内核。
⒋现在开始?
⒈安装Kata Containers容器包(以Centos 7 x86_64为例)
这里使用snap部署
1 | #yum install epel-release |
1 | #snap install kata-containers --classic |
配置Kata Container
默认情况下Kata container以只读文件系统形式挂载在/snap/kata-containers
路径下,因此默认配置文件不能修改,但是kata-runtime
支持从指定路径加载配置文件而不是从默认路径,使用以下命令修改:
1 | #mkdir -p /etc/kata-containers |
可以通过修改/etc/kata-containers/configuration.toml
文件来更改kata container的配置,暂时我们不修改
更改Docker运行时
在更改Docker运行时前,检查一下Docker默认的运行时,运行命令docker info | grep -i runtime
,结果如下所示,现有可供选择的运行时仅有runc
,默认的运行时也为runc
1 | $ docker info | grep -i runtime |
要将runc
更换为kata container提供的kata-runtime
,使用以下两种方法之一进行替换:
注意官方文档上给出的文件路径为/usr/bin/kata-runtime
,这是通过kata-manager
安装kata container时的路径,通过snap安装的kata container,路径应为/snap/kata-containers/current/usr/bin/kata-runtime
通过systemd
文件夹,具体命令为:
1 | #mkdir -p /etc/systemd/system/docker.service.d/ |
通过docker daemon.json
文件,在/etc/docker/daemon.json
文件中添加如下内容:
1 | { |
这里选择看起来更简单些的方式2,我是使用的第一种,都可以,配置好后还需要重启Docker服务使之生效,运行如下命令:
1 | #systemctl daemon-reload |
此时再次查看docker运行时配置,发现可供的选择多了一个kata-runtime
,并且默认为kata-runtime
,如下所示:
1 | $ docker info | grep -i runtime |
运行kata-runtime docker
拉取测试镜像busybox:docker pull busybox 运行测试:
#docker run busybox uname -a
默认的运行时已经改为为
kata-runtime,如果想要使用之前的
runc,可以通过参数
–runtime=runc`来指定:
#docker run –runtime=runc busybox uname -a`
卸载Kata Container
运行命令:
#snap remove kata-containers
删除相关的配置文件:
#rm -r /etc/kata-containers
#rm /etc/docker/daemon.json`