Katacontainer 是 OpenStack 基金会于 2017 KubeCon 峰会上正式发布,在2018年5月份 OpenStack 温哥华峰会上对外发布1.0版本,并且在那届峰会上还有好几个关于 katacontainer 的演讲。我对 KataContainers 的具体实现原理不清楚,只知道它是一个轻量虚拟机实现,可以无缝地与容器生态系统(实现 OCI 接口)进行集成。
katacontainer(包括 Google 的 gVisor)的主要优势是能够对接遗留系统以及提供比传统容器更好的安全性。我在本文后面的实验也可以证明,katacontainer 可以与传统的 runc 并存,为不同性质的应用负载提供了强大的灵活性。
本文不讲原理,而主要是动手实践。
.1. 安装 Kata Container
在 ubuntu 16.04上:
验证安装:
.2. 与 Docker 集成
本文假设你已经安装了 docker。配置 docker,增加对 kata runtime 的支持。
Docker 默认使用 runc 创建容器,可以使用 指定使用其他的 runtime。下面我们创建两个容器,一个使用 kata runtime,另一个使用默认的 runc。创建完容器之后,我们可以查看一下 kata container 的一些信息。
.3. 与 K8S 集成
实际上,kata 不直接与 k8s 通信,因为对于 k8s 来说,它只跟实现了 CRI 接口的容器管理进程打交道,比如 docker-engine,rkt, containerd(使用 cri plugin) 或 CRI-O,而 kata 跟 runc 是同一个级别的进程。所以如果要与 k8s 集成,则需要安装 CRI-O 或 CRI-containerd 来支持 CRI 接口,本文使用 CRI-O。CRI-O 的 O 的意思是 OCI-compatible,即 CRI-O 是实现 CRI 接口来跑 OCI 容器的。
这里(https://www.katacoda.com/courses/kubernetes/getting-started-with-kubeadm-crio) 有关于如何使用 kubeadm 安装使用 CRI-O 的 k8s 集群的教程。
.3.1 安装配置 CRI-O
.3.2 初始化 K8S 集群
假设你已经在 host 上安装了 kubelet(但还没有开始安装整个 k8s 集群),前几个步骤安装配置了 runc, cri-o 和 cni,接下来就需要告诉 kubelet 使用 cri-o (而不是 docker) 创建 pod 中的容器。
准备初始化 k8s:
命令执行成功后,因为系统中没有配置 CNI plugin 所以你会发现 dns pod 一直是 pending。下面安装 Calico,Calico 安装完后一定要重启 cri-o 和 kubelet 服务。此外,目前我们只有一个 master 节点,为了实验目的,我不打算再添加 worker 节点,我们只要允许 master 上可以创建 pod 就行:
等待一段时间,知道使用 kubectl 命令查看系统 pod 全部 running:
可以使用 查看系统创建的镜像和容器,因为我们没有用 docker,所以不能用以前常用的 docker 命令了。虽然不能用 docker,但可以使用 命令查看容器
因为我们配置 cri 默认使用 runc 创建容器,所以使用 命令应该看不到任何容器:
.3.3 测试 pod 操作
为了创建 kata 容器,需要指定 pod 的 annotation: ,如果不定义这个 annotation 或配置为 true,则 cri-o 会使用 runc 创建。
.3.4 测试 Network Policy
虽然现在已经能够调用 kata 创建 pod,但我最担心的还是 kata 跟网络或存储的集成。所以再测试一下安装 calico 后的 network policy 的功能。
默认情况下,系统中所有 pod 是互通的,所以我们先创建一个普通 pod(使用 runc),在 pod 里面访问之前创建的 service:
其中 和 是之前创建的 deployment 中的两个 pod 的 IP 地址。这里虽然我们使用不同的 runtime 创建容器,但默认情况,网络是互通的。
创建 network policy 禁用 pod 之间的网络:
这时在 curl-client pod 里已经不能访问 service 和 pod 了,说明 network policy 生效。
再创建一个 network policy 允许 curl-client pod 访问:
然后你会发现 curl-client pod 里又可以成功访问 service 和 pod 了。
.参考文档
https://github.com/kata-containers/documentation/blob/master/Developer-Guide.md
https://github.com/kata-containers/documentation/blob/master/architecture.md
https://github.com/kubernetes-incubator/cri-o/blob/master/tutorial.md
领取专属 10元无门槛券
私享最新 技术干货