手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 containerd の基本設定 – Kubernetes 用 CRI runtime を整える

Ubuntu 26.04 で containerd を Kubernetes 用の CRI runtime として使うための基本設定を整理します。containerd は Docker の裏側でも使われるコンテナ runtime ですが、Kubernetes では Docker ではなく containerd を直接 CRI runtime として使う構成が一般的です。

この記事では、単に containerd パッケージを導入するだけでなく、Kubernetes ノードとして使うために、設定ファイルの分離、sandbox image、systemd cgroup、proxy、サービス確認までを扱います。

参考
書籍
参考書籍

Kubernetes完全ガイド 第2版

Kubernetes の仕組み、リソース、ネットワーク、運用観点を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

containerd の位置づけ

containerd は、コンテナイメージの取得、snapshot、コンテナ実行、runtime 呼び出しを担う低レイヤのコンテナ runtime です。Kubernetes からは CRI 経由で containerd を操作します。

  • Docker CLI を提供するものではない
  • Kubernetes の kubelet から CRI runtime として使われる
  • 実際のコンテナ実行には runc などの OCI runtime を使う
  • Kubernetes 用には sandbox image と cgroup driver の設定が重要になる

現在の状態を確認する

まず、containerd が導入済みか、サービスが起動しているか、設定ファイルがあるかを確認します。

dpkg -l containerd || true
systemctl --no-pager --full status containerd.service || true
ls -l /etc/containerd /etc/containerd/conf.d 2>/dev/null || true
containerd --version 2>/dev/null || true

containerd をインストールする

Ubuntu のパッケージから containerd を導入します。Kubernetes ノードとして使う場合は、後続で kubelet から CRI socket として参照します。

sudo apt update
sudo apt install -y containerd

containerd --version

設定ディレクトリを用意する

containerd の主設定と Kubernetes 用の追加設定を分けて管理します。ここでは /etc/containerd/config.toml から /etc/containerd/conf.d/*.toml を読み込む形にします。

sudo mkdir -p /etc/containerd/conf.d
sudo chown root:root /etc/containerd /etc/containerd/conf.d
sudo chmod 0755 /etc/containerd /etc/containerd/conf.d

containerd の主設定を作成する

主設定では、設定バージョンと drop-in 設定の import だけを置きます。Kubernetes 用の細かい設定は別ファイルに分けます。

sudo tee /etc/containerd/config.toml <<'EOF'
version = 3
imports = ['/etc/containerd/conf.d/*.toml']
EOF

python3 -c 'import tomllib; tomllib.load(open("/etc/containerd/config.toml", "rb"))'

Kubernetes 用設定を追加する

Kubernetes 用の設定では、sandbox image と SystemdCgroup を設定します。kubelet 側も systemd cgroup driver を使う前提なら、containerd 側も合わせておきます。

sudo tee /etc/containerd/conf.d/10-kubernetes.toml <<'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

python3 -c 'import tomllib; tomllib.load(open("/etc/containerd/conf.d/10-kubernetes.toml", "rb"))'

sandbox image は Kubernetes の Pod sandbox に使われます。Kubernetes のバージョンやクラスタ方針に合わせて、pause image のバージョンをそろえます。

proxy 環境を設定する場合

外部レジストリへの通信に proxy が必要な環境では、containerd の systemd drop-in として proxy を設定します。

sudo mkdir -p /etc/systemd/system/containerd.service.d

sudo tee /etc/systemd/system/containerd.service.d/proxy.conf <<'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,fd00::/8"
EOF

sudo systemctl daemon-reload

proxy を使わない環境では、この drop-in は不要です。Kubernetes ノードでは、container image registry、private registry、cluster 内 service CIDR などを NO_PROXY に含めるかを設計します。

containerd を起動する

設定ファイルを配置したら、containerd を再起動して有効化します。

sudo systemctl enable --now containerd.service
sudo systemctl restart containerd.service
systemctl --no-pager --full status containerd.service

CRI として確認する

Kubernetes 用 runtime として確認する場合、crictl があると状態を見やすくなります。ここでは socket の存在と containerd 側の namespace を確認します。

ls -l /run/containerd/containerd.sock
sudo ctr version
sudo ctr namespaces list
sudo ctr -n k8s.io images list || true

Kubernetes が動き始めると、k8s.io namespace に Pod sandbox や container image が見えるようになります。containerd 単体の確認と Kubernetes 経由の確認は分けて考えます。

Kubernetes ノードとしての確認観点

  • /run/containerd/containerd.sock が存在する
  • containerd.service が起動している
  • Kubernetes 用 TOML が構文エラーなく読み込める
  • pause image がクラスタ方針と合っている
  • SystemdCgroup = true が kubelet 側の cgroup driver と合っている
  • proxy 環境では registry への通信と NO_PROXY を確認する

Docker との違い

containerd を設定しても、Docker CLI や Docker daemon が使えるようになるわけではありません。Docker を使いたい場合は別途 Docker Engine の設定が必要です。Kubernetes ノードの runtime としては、containerd を直接使う方が構成が明確になります。

まとめ

Ubuntu 26.04 の containerd 設定では、Kubernetes 用 CRI runtime として使う前提を明確にすることが重要です。単にインストールするだけでなく、設定ファイルを分け、sandbox image、systemd cgroup、proxy、CRI socket を確認しておくと、後続の Kubernetes ノード構築で切り分けしやすくなります。

次は Docker の基本設定を整理し、containerd と Docker の役割の違いを明確にします。

関連記事

Ubuntu 26.04 containerd の基本設定 – Kubernetes 用 CRI runtime を整える

コメントを残す

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

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

トップへ戻る