Kata コンテナ
Kata Containers(以前の Clear Containers)は、OCI 互換のアプリケーションコンテナランタイムで、仮想化を利用して、潜在的に信頼できないプロセスを、ホストシステムや他のプロセスから隔離することを目的としています。現在、上流でサポートされているハイパーバイザーは、qemu、firecracker-binAUR と cloud-hypervisorAUR です。
アーキテクチャ
kata-agent
- ハイパーバイザー化されたゲストサンドボックスで実行されるスーパーバイザープロセスで、そのライフタイムを管理する役割を持つkata-runtime
- OCIランタイム仕様で指定されたコマンドを処理し、シムの起動を担当するコンテナランタイムコンポーネントkata-proxy
(2.0以前) - gRPC を使用してゲスト側のエージェントとホスト側のプロセス間で I/O ストリームとシグナルをルーティングするkata-shim
(2.0以前) - コンテナプロセスの監視とリーパーkata-ksm-throttler
(オプション, 2.0以前) -kata-linux-container
- コンテナ/ポッドサンドボックスとして機能するVMを起動するために使用されるパッチ済みカーネルkata-containers-image
- VMサンドボックスを生成するために使用される initramfs および rootfs イメージ
使用方法
Kata はデフォルトでは /etc/kata-containers/configuration.toml
から設定を拾いますが、環境変数 KATA_CONF_FILE
で設定のパスを指定することで、これをオーバーライドすることができます。必ず /usr/share/defaults/kata-containers/configuration-qemu.toml
からの設定を初期化してください。
v1
ランタイム kata-runtime-binAUR, kata-proxy-binAUR[リンク切れ: package not found], kata-shim-binAUR[リンク切れ: package not found], カーネル kata-linux-container-binAUR および initrd と rootfs のセット kata-containers-image-binAUR をインストールします。
Docker
Docker で Kata コンテナを使用するには、/etc/docker/daemon.json
に対応するランタイムを追加する必要があります:
{ "runtimes": { "kata": { "path": "/usr/bin/kata-runtime" } } }
Docker のデフォルトランタイムとして使用するには: {"default-runtime": "kata"}
。
Firecracker ハイパーバイザーを使用するには、その制限のために devicemapper
ストレージドライバ [1] を使用する必要があります: {"storage-driver": "devicemapper"}
。
その後、ランタイムキーを使用して実行できます: docker run --runtime kata --rm -ti archlinux/base /bin/bash
。
Podman
コンテナを実行するには: podman --runtime /usr/bin/kata-runtime run --rm -ti archlinux/base /bin/bash
。
Kata VM サンドボックスは、概念的には Kubernetes のポッドや共有ネットワーク名前空間に対応し、個々のコンテナに対応するわけではないことに注意してください。
v2
バージョン2.0以降、Kata コンテナは専ら OCI ランタイムシム API v2 を使用していますが、Docker はその API バージョンを v1 にハードコードしているため、この組み合わせを使用することは現時点では不可能です。
ランタイム kata2-runtime-binAUR, カーネル kata2-linux-container-binAUR および initrd と rootfs のセット kata2-containers-image-binAUR をインストールします。
Containerd CLI
# ctr image pull docker.io/archlinux/base:latest # ctr run --rm -t --runtime io.containerd.kata.v2 docker.io/archlinux/base:latest example-container-name date