containerd は Kubernetes でよく使われる container runtime です。Ubuntu 26.04 を Kubernetes ノードとして使う場合は、単に package を入れるだけでなく、CRI plugin、pause image、cgroup driver、proxy 環境を確認しておく必要があります。
この記事では、Ubuntu 26.04 に containerd を導入し、/etc/containerd/config.toml と /etc/containerd/conf.d/10-kubernetes.toml で Kubernetes 向けの CRI runtime 設定を構成する流れをまとめます。
containerdpackage と service/etc/containerd/config.tomlの importspause:3.10.1と sandbox imageSystemdCgroup = true- systemd drop-in による proxy 設定
| 対象 OS | Ubuntu 26.04 Server |
|---|---|
| package | containerd |
| main config | /etc/containerd/config.toml |
| Kubernetes config | /etc/containerd/conf.d/10-kubernetes.toml |
| proxy drop-in | /etc/systemd/system/containerd.service.d/proxy.conf |
containerd の役割を確認する
containerd はコンテナの実行、image 管理、snapshot、runtime 呼び出しを担います。Kubernetes からは CRI plugin 経由で利用されます。Docker Engine の一部として見るのではなく、Kubernetes ノードの runtime として分けて確認します。
- Kubernetes から CRI runtime として使う
kubeletの cgroup driver と合わせる- sandbox image の version を確認する
- proxy 環境では image pull への影響を見る
containerd をインストールする
Ubuntu の package として containerd を導入し、service を有効化します。
sudo apt update
sudo apt install -y containerd
sudo systemctl enable --now containerd.service
systemctl status containerd.service --no-pagerconfig ディレクトリを作成する
設定は /etc/containerd/config.toml と drop-in 用の /etc/containerd/conf.d に分けます。
sudo install -d -o root -g root -m 0755 /etc/containerd
sudo install -d -o root -g root -m 0755 /etc/containerd/conf.d
ls -ld /etc/containerd /etc/containerd/conf.dmain config で imports を使う
/etc/containerd/config.toml は最小構成にし、Kubernetes 向けの設定を conf.d 側へ分けます。
sudo tee /etc/containerd/config.toml >/dev/null <<'EOF'
version = 3
imports = ['/etc/containerd/conf.d/*.toml']
EOF
sudo chown root:root /etc/containerd/config.toml
sudo chmod 0644 /etc/containerd/config.tomlKubernetes 用設定を配置する
Kubernetes では sandbox image と cgroup driver が重要です。pause image は Kubernetes 側の version と合わせて確認し、cgroup driver は systemd にそろえます。
sudo tee /etc/containerd/conf.d/10-kubernetes.toml >/dev/null <<'EOF'
version = 3
[plugins.'io.containerd.cri.v1.images'.pinned_images]
sandbox = 'registry.k8s.io/pause:3.10.1'
[plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.runc.options]
SystemdCgroup = true
EOF
sudo chown root:root /etc/containerd/conf.d/10-kubernetes.toml
sudo chmod 0644 /etc/containerd/conf.d/10-kubernetes.tomlTOML を検証する
containerd の設定は TOML なので、反映前に構文を確認します。Ubuntu 26.04 の Python では tomllib を使えます。
python3 -c 'import sys, tomllib; tomllib.load(open(sys.argv[1], "rb"))' /etc/containerd/config.toml
python3 -c 'import sys, tomllib; tomllib.load(open(sys.argv[1], "rb"))' /etc/containerd/conf.d/10-kubernetes.tomlproxy を systemd drop-in で設定する
proxy 環境で image を取得する場合は、containerd service に環境変数を渡します。内部宛先やクラスタ内アドレスは NO_PROXY に入れます。
sudo install -d -o root -g root -m 0755 /etc/systemd/system/containerd.service.d
sudo tee /etc/systemd/system/containerd.service.d/proxy.conf >/dev/null <<'EOF'
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080"
Environment="HTTPS_PROXY=http://proxy.example.com:8080"
Environment="NO_PROXY=localhost,127.0.0.1,::1,10.0.0.0/8,192.168.0.0/16,.example.com"
EOF
sudo chown root:root /etc/systemd/system/containerd.service.d/proxy.conf
sudo chmod 0644 /etc/systemd/system/containerd.service.d/proxy.conf設定を反映する
systemd drop-in を変更した場合は daemon-reload が必要です。その後 containerd を再起動し、状態を確認します。
sudo systemctl daemon-reload
sudo systemctl restart containerd.service
systemctl status containerd.service --no-pager
systemctl show containerd.service --property=EnvironmentCRI と image pull を確認する
Kubernetes ノードとして使う前に、CRI と image pull の確認をします。crictl を使う場合は runtime endpoint も確認します。
sudo crictl info
sudo crictl pull registry.k8s.io/pause:3.10.1
sudo crictl images | grep pausekubelet との組み合わせを見る
Kubernetes では kubelet と containerd の cgroup driver の不一致が問題になります。kubeadm 側の KubeletConfiguration と合わせて確認します。
grep -n "SystemdCgroup" /etc/containerd/conf.d/10-kubernetes.toml
sudo crictl info | grep -i cgroup
kubelet --version確認ポイント
containerd.serviceが enabled / active になっている/etc/containerd/config.tomlでconf.dを import しているregistry.k8s.io/pause:3.10.1を指定しているSystemdCgroup = trueになっている- proxy 環境では systemd drop-in を設定している
crictl infoと image pull を確認している
まとめ
Ubuntu 26.04 で containerd を Kubernetes 用 CRI runtime として使う場合、package の導入だけでは不十分です。/etc/containerd/config.toml で drop-in を読み込み、10-kubernetes.toml で sandbox image と SystemdCgroup を明示します。
proxy 環境では systemd drop-in で HTTP_PROXY、HTTPS_PROXY、NO_PROXY を渡し、crictl info と pause image の pull まで確認してから Kubernetes ノード準備へ進むと切り分けがしやすくなります。

