如何在 Kubernetes 集群中集成 Kata

Kubernetes 集群集成 Kata

安装 Kubernetes 集群

使用 Kubeadm 安装集群非常方便,可以参考在ubuntu中安装k8s集群

也可以直接参考官方文档:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

  • 查看安装的 Kubernetes 版本
$ kubectl version

Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.9", GitCommit:"4fb7ed12476d57b8437ada90b4f93b17ffaeed99", GitTreeState:"clean", BuildDate:"2020-07-15T16:18:16Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.9", GitCommit:"4fb7ed12476d57b8437ada90b4f93b17ffaeed99", GitTreeState:"clean", BuildDate:"2020-07-15T16:10:45Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}

安装 Kata 命令行工具

以 CentOS 操作系统为例:

$ source /etc/os-release
$ yum -y install yum-utils
$ ARCH=$(arch)
$ BRANCH="${BRANCH:-master}"
$ yum-config-manager --add-repo "http://download.opensuse.org/repositories/home:/katacontainers:/releases:/${ARCH}:/${BRANCH}/CentOS_${VERSION_ID}/home:katacontainers:releases:${ARCH}:${BRANCH}.repo"
$ yum -y install kata-runtime kata-proxy kata-shim

在Ubuntu中(参考官方文档):

$ ARCH=$(arch)
$ BRANCH="${BRANCH:-master}"
$ sudo sh -c "echo 'deb http://download.opensuse.org/repositories/home:/katacontainers:/releases:/${ARCH}:/${BRANCH}/xUbuntu_$(lsb_release -rs)/ /' > /etc/apt/sources.list.d/kata-containers.list"
$ curl -sL  http://download.opensuse.org/repositories/home:/katacontainers:/releases:/${ARCH}:/${BRANCH}/xUbuntu_$(lsb_release -rs)/Release.key | sudo apt-key add -
$ sudo -E apt-get update
$ sudo -E apt-get -y install kata-runtime kata-proxy kata-shim

检测硬件是否支持 Kata

Kata 对硬件的要求需要满足以下任意条件:

  • Intel VT-x technology.
  • ARM Hyp mode (virtualization extension).
  • IBM Power Systems.
  • IBM Z mainframes.

安装完 kata-runtime 之后,执行检测命令:

$ kata-runtime kata-check

System is capable of running Kata Containers
System can currently create Kata Containers

这里的输出表示,运行环境支持 Kata Containers

配置并测试 Docker(官方文档)

  • 配置 kata-runtime 参数
$ vim /etc/docker/daemon.json

新增如下内容,默认依然使用 runc,但是通过指定 runtime 参数可以使用 Kata 。

{
  "runtimes": {"kata-runtime": {
      "path": "/usr/bin/kata-runtime"}
  }}

重启 Docker 服务

$ systemctl daemon-reload
$ systemctl restart docker

测试 Kata 是否安装成功

$ docker run --runtime=kata-runtime  busybox uname -a

Linux 249a23f53475 5.4.60-65.1.container #1 SMP Thu Jan 1 00:00:00 UTC 1970 x86_64 GNU/Linux

$  docker run busybox uname -a

Linux b4812ed8990c 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 GNU/Linux

kata-runtime 容器使用的内核版本与宿主机不同,这就说明 kata-runtime 配置成功了。

配置 Kubelet

  • 新增配置文件
$ mkdir -p  /etc/systemd/system/kubelet.service.d/
$ cat << EOF | sudo tee  /etc/systemd/system/kubelet.service.d/0-containerd.conf
[Service]                                                 
Environment="KUBELET_EXTRA_ARGS=--container-runtime=remote --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock"EOF
  • 重启生效
$ systemctl daemon-reload
$ systemctl restart kubelet

这里使用的是 containerd 。如果使用 CRI-O ,配置会不一样。

给 Kubernetes 提供 kata-runtime

通过直接创建 Container 可以使用 kata-runtime 。但在集群中,我们该如何告诉 Kubernetes 哪些负载需要使用 kata-runtime 呢?根据不同的版本,Kata 提供了不同的方式。

首先都需要生成 containerd 配置文件

$ containerd config default > /etc/containerd/config.toml
  • RuntimeClass 的方式

这种方式对相关组件版本有要求:

Kata Containers v1.5.0 or above (including 1.5.0-rc)
Containerd v1.2.0 or above
Kubernetes v1.12.0 or above

在 config.toml 配置文件中,增加如下内容:

    [plugins.cri.containerd]
      no_pivot = false[plugins.cri.containerd.runtimes]
      [plugins.cri.containerd.runtimes.runc]
         runtime_type = "io.containerd.runc.v1"
         [plugins.cri.containerd.runtimes.runc.options]
           NoPivotRoot = false
           NoNewKeyring = false
           ShimCgroup = ""
           IoUid = 0
           IoGid = 0
           BinaryName = "runc"
           Root = ""
           CriuPath = ""
           SystemdCgroup = false
      [plugins.cri.containerd.runtimes.kata]
         runtime_type = "io.containerd.kata.v2"
      [plugins.cri.containerd.runtimes.katacli]
         runtime_type = "io.containerd.runc.v1"
         [plugins.cri.containerd.runtimes.katacli.options]
           NoPivotRoot = false
           NoNewKeyring = false
           ShimCgroup = ""
           IoUid = 0
           IoGid = 0
           BinaryName = "/usr/bin/kata-runtime"
           Root = ""
           CriuPath = ""
           SystemdCgroup = false

这里 [plugins.cri.containerd.runtimes.kata] 中的 kata 将被作为 RuntimeClass handler 关键字。

  • 使用 untrusted_workload_runtime 的方式

对于不符合上述版本要求的环境,可以使用之前的方式。

在配置文件中新增如下内容:

    [plugins.cri.containerd.untrusted_workload_runtime]
      runtime_type = "io.containerd.runtime.v1.linux"
      runtime_engine = "/usr/bin/kata-runtime"

最后,都需要重启 containerd。

$ containerd systemctl daemon-reload
$ systemctl restart containerd

然后讲kubelet配置文件拷贝到用户目录下面

sudo mkdir -p /home/xrw/.kube && sudo cp /etc/kubernetes/admin.conf /home/xrw/.kube/config

使用 kata-runtime

RuntimeClass 方式

  • 创建 RuntimeClass

kata-runtime.yaml

kind: RuntimeClass
apiVersion: node.k8s.io/v1beta1
metadata:
  name: kata-containers
handler: kata

也可以为 runc 创建 RuntimeClass

$ kubectl get runtimeclass

NAME              CREATED AT
kata-containers   2020-08-30

创建负载 kata-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: kata-nginx
spec:
  runtimeClassName: kata-containers
  containers:
  - name: nginx
    image: nginx
    ports:- containerPort: 80
$ kubectl apply -f kata-pod.yaml

查看负载是否是kata运行的

# 获取pod中的Container ID 
$  sudo kubectl decribe pod kata-nginx
# 查看容器的容器运行时是不是kata
$  sudo crictl inspect [Container ID]

untrusted_workload_runtime 使用 annotations 告诉 Kubernetes 集群哪些负载需要使用 kata-runtime。

annotations:
  io.kubernetes.cri.untrusted-workload: "true"
下面是一个示例 kata-pod-untrusted.yaml

apiVersion: v1
kind: Pod
metadata:
  name: kata-nginx-untrusted
  annotations:
    io.kubernetes.cri.untrusted-workload: "true"
spec:
  containers:
  - name: nginx
    image: nginx
    ports:- containerPort: 80
$ kubectl apply -f kata-pod-untrusted.yaml
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 事实上,isulad容器引擎是支持kata安全容器的。isulad是一个开源的轻量级容器运行时,它可以与不同的容器技术进行集成,包括katakata是一个基于虚拟化技术的安全容器,它可以提供更高的安全性和隔离性。isulad集成kata,可以使用kata安全容器来运行容器。这样可以在保持轻量级的同时,提供更高的安全性。 ### 回答2: isulad容器引擎是一款在国开发的轻量级容器引擎,主要用于在Linux操作系统上运行容器。它的设计目标是为了提供高性能、高可靠性和高扩展性的容器运行环境。然而,目前isulad容器引擎并不支持kata安全容器。 kata安全容器是一种基于虚拟化技术的安全容器方案。它通过在每个容器实例内部运行一个轻量级虚拟机来提供隔离和安全性。kata容器与传统容器相比,能够提供更高的安全性和隔离性,保护容器内部的数据和环境免受攻击和恶意代码的侵害。 尽管kata容器在安全性方面具有很大优势,但由于技术实现上的差异,isulad容器引擎并不支持它。这意味着在使用isulad容器引擎时,无法直接使用kata容器提供的安全特性。 如果用户需要使用kata安全容器,可以考虑使用其他容器引擎,例如Docker或者Kubernetes,它们都提供了对kata容器的支持。通过使用这些容器引擎,用户可以轻松地创建、部署和管理kata容器,同时享受到kata容器提供的额外安全性和隔离性。 ### 回答3: isulad容器引擎目前不支持kata安全容器。isulad是华为公司开源的一款容器运行时引擎,它主要用于在Linux操作系统上创建和管理容器实例。isulad注重轻量性和高性能,提供了一系列功能丰富的容器管理工具和API,以满足用户对容器化应用的需求。 但是,isulad并不支持kata安全容器。kata是一个针对安全性和性能进行优化的容器运行时,它采用虚拟化技术,通过在宿主机上创建虚拟机来运行容器,提供了更高的隔离性和安全性。 尽管kata安全容器具有许多优点,但是isulad目前还没有整合kata运行时的能力。这可能是因为isulad的设计目标和使用场景与kata不完全一致,或者是因为isulad的开发者团队还没有将kata集成到isulad。因此,如果用户有需要在isulad使用kata安全容器的需求,可能需要考虑其他容器引擎或解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值