跳到主要内容

容器运行时

你需要在每个边缘节点上安装一个容器运行时,以使边缘引擎EdgeCore能够成功安装,并且边缘Pod可以运行在边缘节点上。

本页简要介绍在KubeEdge中常见的几种容器运行时的安装与配置过程。

containerd

安装与配置containerd

首先你需要安装containerd,请参考containerd安装指南进行操作。

提示

如果你使用KubeEdge v1.15.0以及以上版本,请安装v1.6.0或更高版本的containerd。

如果在/etc/containerd/目录下没有containerd的配置文件,你可以执行如下命令生成配置文件并重启containerd。

containerd config default > /etc/containerd/config.toml
systemctl restart containerd
提示

如果你从软件包(例如RPM或者.deb)中安装 containerd,你可能会发现其中默认禁止了 CRI 集成插件。

你需要启用 CRI 支持在KubeEdge场景下使用 containerd。 要确保 cri 没有出现在 /etc/containerd/config.toml 文件中 disabled_plugins 列表内。如果你更改了这个文件,也请记得要重启 containerd。

如果你需要更新沙箱(pause)镜像,你也可以通过在containerd的配置文件中修改如下设置来实现:

[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "kubeedge/pause:3.6"

你还可以通过containerd的配置文件查看或更新containerd的cgroup驱动

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
提示

如果你修改了配置文件,请确保重新启动 containerd。

使用Keadm安装EdgeCore的运行时配置

如果你使用Keadm安装EdgeCore时,你需要设置--remote-runtime-endpoint=unix:///run/containerd/containerd.sock。

提示

如果你使用的是KubeEdge v1.12或之前的版本,你还需要在执行keadm join时设置--runtimetype=remote

在Windows上,请使用--remote-runtime-endpoint=npipe://./pipe/containerd-containerd来配置CRI端点

KubeEdge默认使用cgroupfs cgroup驱动,如果你需要使用systemd cgroup驱动,你需要保证containerd配置了systemd cgroup,在执行keadm join时设置--cgroupdriver=systemd。

使用二进制安装EdgeCore的运行时配置

如果使用二进制方式安装EdgeCore,你需要更新EdgeCore的配置文件edgecore.yaml,修改如下参数:

KubeEdge v1.15以及之前的版本:

modules:
edged:
containerRuntime: remote
remoteImageEndpoint: unix:///run/containerd/containerd.sock
remoteRuntimeEndpoint: unix:///run/containerd/containerd.sock

KubeEdge默认使用cgroupfs cgroup驱动,如果你需要使用systemd cgroup驱动,你需要保证containerd配置了systemd cgroup,并且修改edgecore.yaml的如下参数”:

modules:
edged:
tailoredKubeletConfig:
cgroupDriver: systemd

CRI-O

安装与配置CRI-O

请先按照CRI-O安装指南安装CRI-O。

如果你需要更新沙箱(pause)镜像,你也可以通过在CRI-O的配置文件(通常是/etc/crio/crio.conf)中修改如下设置来实现:

[crio.image]
pause_image="kubeedge/pause:3.6"

CRI-O默认使用systemd cgroup驱动,如果需要切换到cgroupfs cgroup驱动,可通过编辑CRI-O的配置文件实现。

[crio.runtime]
conmon_cgroup = "pod"
cgroup_manager = "cgroupfs"
提示

当使用 CRI-O时,并且CRI-O的cgroup设置为cgroupfs时,必须将conmon_cgroup设置为值 pod。

使用Keadm安装EdgeCore的运行时配置

如果你使用Keadm安装EdgeCore时,你需要设置--remote-runtime-endpoint=unix:///var/run/crio/crio.sock。

提示

如果你使用的是KubeEdge v1.12或之前的版本,你还需要在执行keadm join时设置--runtimetype=remote

KubeEdge默认使用cgroupfs cgroup驱动,如果你使用systemd cgroup驱动,你需要保证CRI-O配置了systemd cgroup,在执行keadm join时设置--cgroupdriver=systemd。

使用二进制安装EdgeCore的运行时配置

如果使用二进制方式安装EdgeCore,你需要更新EdgeCore的配置文件edgecore.yaml,修改如下参数:

KubeEdge v1.15以及之前的版本:

modules:
edged:
containerRuntime: remote
remoteImageEndpoint: unix:///var/run/crio/crio.sock
remoteRuntimeEndpoint: unix:///var/run/crio/crio.sock

KubeEdge默认使用cgroupfs cgroup驱动,如果你使用systemd cgroup驱动,你需要保证CRI-O配置了systemd cgroup,并且修改edgecore.yaml的如下参数”

modules:
edged:
tailoredKubeletConfig:
cgroupDriver: systemd

Docker Engine

提示

自KubeEdge v1.14版本起,KubeEdge移除了对dockershim的支持,不再支持直接使用docker运行时管理边缘容器。阅读Dockershim移除的常见问题了解更多详情。

安装与配置Docker和cri-dockerd

以下安装步骤只针对KubeEdge v1.14以及之后的版本,如果你使用的是更早的版本,你只需要安装docker,执行keadm join时配置--runtimetype=docker以及--remote-runtime-endpoint=unix:///var/run/dockershim.sock即可。

  1. 遵循Docker Engine安装指南安装Docker。

  2. 按照cri-dockerd安装指南安装cri-dockerd。

  3. 安装CNI Plugin。

你可以参考kubeedge脚本中的install_cni_plugins函数安装CNI Plugin,仅供参考。

使用Keadm安装EdgeCore的运行时配置

如果你使用Keadm安装EdgeCore时,你需要设置--remote-runtime-endpoint=unix:///var/run/cri-dockerd.sock。

提示

当使用cri-dockerd时,对应的runtimetype也是remote,而不是docker。

KubeEdge默认使用cgroupfs cgroup驱动,如果你使用systemd cgroup驱动,你需要保证docker配置了systemd cgroup,在执行keadm join时设置--cgroupdriver=systemd。

使用二进制安装EdgeCore的运行时配置

如果使用二进制方式安装EdgeCore,你需要更新EdgeCore的配置文件edgecore.yaml,修改如下参数:

KubeEdge v1.15以及之前的版本:

modules:
edged:
containerRuntime: remote
remoteImageEndpoint: unix:///var/run/cri-dockerd.sock
remoteRuntimeEndpoint: unix:///var/run/cri-dockerd.sock

KubeEdge默认使用cgroupfs cgroup驱动,如果你使用systemd cgroup驱动,你需要保证docker配置了systemd cgroup,并且修改edgecore.yaml的如下参数”

modules:
edged:
tailoredKubeletConfig:
cgroupDriver: systemd

Kata Containers

Kata Containers is a container runtime created to address security challenges in the multi-tenant, untrusted cloud environment. However, multi-tenancy support is still in KubeEdge’s backlog. If you have a downstream customized KubeEdge which supports multi-tenancy already then Kata Containers is a good option for a lightweight and secure container runtime.

Follow the install guide to install and configure containerd and Kata Containers.

If you have “kata-runtime” installed, run this command to check if your host system can run and create a Kata Container:

kata-runtime kata-check

RuntimeClass is a feature for selecting the container runtime configuration to use to run a pod’s containers that is supported since containerd v1.2.0. If your containerd version is later than v1.2.0, you have two choices to configure containerd to use Kata Containers:

  • Kata Containers as a RuntimeClass
  • Kata Containers as a runtime for untrusted workloads

Suppose you have configured Kata Containers as the runtime for untrusted workloads. In order to verify whether it works on your edge node, you can run:

cat nginx-untrusted.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-untrusted
annotations:
io.kubernetes.cri.untrusted-workload: "true"
spec:
containers:
- name: nginx
image: nginx
kubectl create -f nginx-untrusted.yaml

# verify the container is running with qemu hypervisor on edge side,
ps aux | grep qemu
root 3941 3.0 1.0 2971576 174648 ? Sl 17:38 0:02 /usr/bin/qemu-system-aarch64

crictl pods
POD ID CREATED STATE NAME NAMESPACE ATTEMPT
b1c0911644cb9 About a minute ago Ready nginx-untrusted default 0

Virtlet

Make sure no libvirt is running on the worker nodes.

Steps

  1. Install CNI plugin:

    Download CNI plugin release and extract it:

    $ wget https://github.com/containernetworking/plugins/releases/download/v0.8.2/cni-plugins-linux-amd64-v0.8.2.tgz

    # Extract the tarball
    $ mkdir cni
    $ tar -zxvf v0.2.0.tar.gz -C cni

    $ mkdir -p /opt/cni/bin
    $ cp ./cni/* /opt/cni/bin/

    Configure CNI plugin:

    $ mkdir -p /etc/cni/net.d/

    $ cat >/etc/cni/net.d/bridge.conf <<EOF
    {
    "cniVersion": "0.3.1",
    "name": "containerd-net",
    "type": "bridge",
    "bridge": "cni0",
    "isGateway": true,
    "ipMasq": true,
    "ipam": {
    "type": "host-local",
    "subnet": "10.88.0.0/16",
    "routes": [
    { "dst": "0.0.0.0/0" }
    ]
    }
    }
    EOF
  2. Setup VM runtime: Use the script hack/setup-vmruntime.sh to set up a VM runtime. It makes use of the Arktos Runtime release to start three containers:

    vmruntime_vms vmruntime_libvirt vmruntime_virtlet