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 || truecontainerd をインストールする
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.dcontainerd の主設定を作成する
主設定では、設定バージョンと 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-reloadproxy を使わない環境では、この 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.serviceCRI として確認する
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 || trueKubernetes が動き始めると、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 サーバー管理ガイド
- Ubuntu 26.04 Kubernetes ノードの事前準備
- Ubuntu 26.04 Kubernetes コントロールプレーン構築
- Ubuntu 26.04 Kubernetes ワーカーノード参加
- Ubuntu 26.04 kubeconfig の基本
- Ubuntu 26.04 Docker の基本設定
- Ubuntu 26.04 MicroK8s の基本


