![見出し画像](https://assets.st-note.com/production/uploads/images/129076031/rectangle_large_type_2_c02e6b952c6df05a9ef7487a0c12ce49.png?width=1200)
conainerd/nerdctl ルートレスモード
前提条件については、https://rootlesscontaine.rs/getting-started/common/ を参照してください。
デーモン (containerd)
containerd-rootless-setuptool.sh を使用して、rootless containerd を設定します。
$ containerd-rootless-setuptool.sh install
[INFO] Checking RootlessKit functionality
[INFO] Checking cgroup v2
[INFO] Checking overlayfs
[INFO] Creating /home/testuser/.config/systemd/user/containerd.service
...
[INFO] Installed containerd.service successfully.
[INFO] To control containerd.service, run: `systemctl --user (start|stop|restart) containerd.service`
[INFO] To run containerd.service on system startup, run: `sudo loginctl enable-linger testuser`
[INFO] Use `nerdctl` to connect to the rootless containerd.
[INFO] You do NOT need to specify $CONTAINERD_ADDRESS explicitly.
containerd-rootless-setuptool.sh の使い方は dockerd-rootless-setuptool.sh とほぼ同じです。
nerdctl run --memory などのリソース制限フラグには、systemd と cgroup v2 が必要です。参考 https://rootlesscontaine.rs/getting-started/common/cgroup2/
クライアント (nerdctl)
nerdctlを実行するだけです。ソケットアドレスを手動で指定する必要はありません。
$ nerdctl run -it --rm alpine
カーネルのバージョンによっては、FUSE-OverlayFS を有効にするか、export CONTAINERD_SNAPSHOTTER=native を設定する必要があります。 (下記参照)
アドオン
BuildKit
BuildKit を有効にするには、次のコマンドを実行します。
$ containerd-rootless-setuptool.sh install-buildkit
Snapshotters
OverlayFS
デフォルトの overlayfs スナップショット機能は、次のホストでのみ機能します。 - カーネル >= 5.13 の任意のディストリビューション - 非 SELinux ディストリビューション、カーネル >= 5.11 - 2015年以来のUbuntu
他のホストでは、代わりに fuse-overlayfs snapshotter を使用する必要があります。
FUSE-OverlayFS
fuse-overlayfs スナップショット機能を有効にするには、次のコマンドを実行します。
$ containerd-rootless-setuptool.sh install-fuse-overlayfs
次に、次の構成を ~/.config/containerd/config.toml に追加し、systemctl --user restart containerd.service を実行します。
[proxy_plugins]
[proxy_plugins."fuse-overlayfs"]
type = "snapshot"
# NOTE: replace "1000" with your actual UID
address = "/run/user/1000/containerd-fuse-overlayfs.sock"
snapshotterは $CONTAINERD_SNAPSHOTTER として指定できます。
$ export CONTAINERD_SNAPSHOTTER=fuse-overlayfs
$ nerdctl run -it --rm alpine
fuse-overlayfs が機能しない場合は、export CONTAINERD_SNAPSHOTTER=native を試してください。
Stargz Snapshotter
Stargz Snapshotter は、イメージの遅延プルを可能にします。
Stargz スナップショットを有効にするには、次のコマンドを実行します。
$ containerd-rootless-setuptool.sh install-stargz
次に、次の構成を ~/.config/containerd/config.toml に追加し、systemctl --user restart containerd.service を実行します。
[proxy_plugins]
[proxy_plugins."stargz"]
type = "snapshot"
# NOTE: replace "1000" with your actual UID
address = "/run/user/1000/containerd-stargz-grpc/containerd-stargz-grpc.sock"
snapshotterは $CONTAINERD_SNAPSHOTTER として指定できます。
$ export CONTAINERD_SNAPSHOTTER=stargz
$ nerdctl run -it --rm ghcr.io/stargz-containers/alpine:3.10.2-esgz
イメージ リストについては、https://github.com/containerd/stargz-snapshotter/blob/main/docs/pre-converted-images.md を参照してください。
bypass4netns
必要条件 nerdctl >= 0.17
bypass4netns(https://github.com/rootless-containers/bypass4netns) は、ルートレスネットワークのためのアクセラレータです。
これにより、送信または受信 (--publish オプションを使用) のネットワークパフォーマンスが向上します。
Hyper-V VM 上の Ubuntu 21.10 での iperf3 のパフォーマンス ベンチマークを以下に示します。 | iperf3 benchmark | without bypass4netns | with bypass4netns | | ----------------- | -------------------- | ----------------- | | container -> host | 0.398 Gbps | 42.2 Gbps | | host -> container | 20.6 Gbps | 47.4 Gbps |
bypass4netns による高速化は、--label nerdctl/bypass4netns=true で利用できます。また、bypass4netnsd (bypass4netns デーモン) も実行する必要があります。 例
$ containerd-rootless-setuptool.sh install-bypass4netnsd
$ nerdctl run -it --rm -p 8080:80 --label nerdctl/bypass4netns=true alpine
詳細については、https://github.com/rootless-containers/bypass4netns/blob/master/README.md をご覧ください。
トラブルシューティング
Fedoraユーザーへのヒント
ホストで SELinux が有効になっていて、カーネルが 5.13 より古い場合は、 overlayfsの代わりに fuse-overlayfsを使用する必要があります。
Made with Material for MkDocs