手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 containerd の基本設定 – Kubernetes 用 CRI runtime を構成する

関連する記事

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 設定を構成する流れをまとめます。

この記事で扱うこと
  • containerd package と service
  • /etc/containerd/config.toml の imports
  • pause:3.10.1 と sandbox image
  • SystemdCgroup = true
  • systemd drop-in による proxy 設定
対象 OSUbuntu 26.04 Server
packagecontainerd
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
参考書籍
参考書籍
Kubernetes完全ガイド 第2版
Kubernetes のノード、Pod、container runtime、運用確認を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見る
このリンクは Amazon アソシエイトリンクです。

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-pager

config ディレクトリを作成する

設定は /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.d

main 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.toml

Kubernetes 用設定を配置する

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.toml

TOML を検証する

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.toml

proxy を 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=Environment

CRI と 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 pause

kubelet との組み合わせを見る

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.tomlconf.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_PROXYHTTPS_PROXYNO_PROXY を渡し、crictl info と pause image の pull まで確認してから Kubernetes ノード準備へ進むと切り分けがしやすくなります。

関連する記事
Ubuntu 26.04 containerd の基本設定 – Kubernetes 用 CRI runtime を構成する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る