kata-与原生docker集成使用

使用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最大的亮点是解决了传统容器共享内核的安全和隔离问题,办法是让每个容器运行在一个轻量级的虚拟机中,使用单独的内核。

img

img

⒋现在开始?

  ⒈安装Kata Containers容器包(以Centos 7 x86_64为例)

这里使用snap部署

1
2
3
4
#yum install epel-release
#yum install snapd
#systemctl enable --now snapd.socket
#ln -s /var/lib/snapd/snap /snap
1
2
3
4
#snap install kata-containers --classic
遇到报错:error: too early for operation, device not yet seeded or device model not acknowledged
再执行一次 #yum -y install snapd 就可以了
#snap install kata-containers --classic

配置Kata Container

默认情况下Kata container以只读文件系统形式挂载在/snap/kata-containers路径下,因此默认配置文件不能修改,但是kata-runtime支持从指定路径加载配置文件而不是从默认路径,使用以下命令修改:

1
2
3
#mkdir -p /etc/kata-containers
#cp /snap/kata-containers/current/usr/share/defaults/kata-containers/configuration.toml /etc/kata-containers/
#cat /etc/kata-containers/configuration.toml

可以通过修改/etc/kata-containers/configuration.toml文件来更改kata container的配置,暂时我们不修改

更改Docker运行时

在更改Docker运行时前,检查一下Docker默认的运行时,运行命令docker info | grep -i runtime,结果如下所示,现有可供选择的运行时仅有runc,默认的运行时也为runc

1
2
3
$ docker info | grep -i runtime
Runtimes: runc
Default Runtime: runc

要将runc更换为kata container提供的kata-runtime,使用以下两种方法之一进行替换:

注意官方文档上给出的文件路径为/usr/bin/kata-runtime,这是通过kata-manager安装kata container时的路径,通过snap安装的kata container,路径应为/snap/kata-containers/current/usr/bin/kata-runtime

:one: 通过systemd文件夹,具体命令为:

1
2
3
4
5
6
#mkdir -p /etc/systemd/system/docker.service.d/
#cat <<EOF | sudo tee /etc/systemd/system/docker.service.d/kata-containers.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -D --add-runtime kata-runtime=/snap/kata-containers/current/usr/bin/kata-runtime --default-runtime=kata-runtime
EOF

:two: 通过docker daemon.json文件,在/etc/docker/daemon.json文件中添加如下内容:

1
2
3
4
5
6
7
8
{
"default-runtime": "kata-runtime",
"runtimes": {
"kata-runtime": {
"path": "/snap/kata-containers/current/usr/bin/kata-runtime"
}
}
}

这里选择看起来更简单些的方式2,我是使用的第一种,都可以,配置好后还需要重启Docker服务使之生效,运行如下命令:

1
2
#systemctl daemon-reload
#systemctl restart docker

此时再次查看docker运行时配置,发现可供的选择多了一个kata-runtime,并且默认为kata-runtime,如下所示:

1
2
3
$ docker info | grep -i runtime
Runtimes: kata-runtime runc
Default Runtime: kata-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`

参考:https://snapcraft.io/install/kata-containers/centos