Ubuntu 22.04 に containerd をインストールし、Kubernetes ノードのコンテナランタイムとして使えるように設定します。containerd は Docker の代替というより、Kubernetes が CRI 経由でコンテナを実行するためのランタイムとして扱うのが分かりやすいです。
Kubernetes ノードでは、containerd を入れるだけでなく、SystemdCgroup を有効にして kubelet と cgroup driver を揃えることが重要です。この記事では、インストール、既定設定の生成、SystemdCgroup の有効化、サービス再起動、確認までを整理します。
containerd の位置づけ
- Kubernetes が CRI 経由で利用するコンテナランタイムである
- Docker デーモンを前提にせずコンテナを実行できる
- Kubernetes ノードでは kubelet と連携して動作する
- 単体利用より Kubernetes のランタイムとして導入する場面が多い
- cgroup driver の整合性が重要になる
containerd をインストールする
Ubuntu 標準リポジトリから containerd を導入します。
sudo apt update
sudo apt install -y containerd
containerd --versionインストール後、サービス状態を確認します。
systemctl status containerd.service既定設定を生成する
containerd の設定ファイルを生成します。既存ファイルがある場合はバックアップしてから作業します。
sudo mkdir -p /etc/containerd
if [ -f /etc/containerd/config.toml ]; then
sudo cp /etc/containerd/config.toml /etc/containerd/config.toml.bak
fi
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null生成された /etc/containerd/config.toml を元に、Kubernetes ノード向けの設定を入れます。
SystemdCgroup を有効化する
Kubernetes では、kubelet と containerd の cgroup driver を揃える必要があります。Ubuntu 22.04 では systemd を使う構成が自然なので、containerd 側の SystemdCgroup を true にします。
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
grep -n 'SystemdCgroup' /etc/containerd/config.toml出力が SystemdCgroup = true になっていることを確認します。
sandbox image を確認する
Kubernetes の pause image は、Kubernetes のバージョンによって推奨値が変わることがあります。containerd の既定値と kubeadm 側の期待値が違うと警告が出る場合があります。
grep -n 'sandbox_image' /etc/containerd/config.toml警告が出る場合は、利用している Kubernetes バージョンに合わせて sandbox_image を調整します。ここは固定値として暗記するより、kubeadm config images list で確認する方が安全です。
kubeadm config images listcontainerd を再起動する
設定を変更したら、containerd を再起動します。
sudo systemctl restart containerd.service
sudo systemctl enable containerd.service
systemctl status containerd.serviceCRI として確認する
Kubernetes から見える CRI ランタイムとして確認するには、crictl を使います。未導入の場合はインストールします。
sudo apt install -y cri-tools
sudo crictl info | head接続先のエンドポイントを明示したい場合は、/etc/crictl.yaml を作成します。
sudo tee /etc/crictl.yaml >/dev/null <<'EOF'
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOFsudo crictl info
sudo crictl imagesKubernetes ノード準備との関係
containerd の設定は、Kubernetes ノードの事前準備とセットで考えます。カーネルモジュール、sysctl、swap 無効化、kubelet / kubeadm の導入が揃って、はじめて kubeadm でクラスター構築へ進めます。
- containerd が起動している
SystemdCgroup = trueになっている- CRI endpoint が
/run/containerd/containerd.sockを向いている - swap が無効化されている
- kubelet と Kubernetes パッケージのバージョンを管理している
まとめ
Ubuntu 22.04 で Kubernetes ノードを構築する場合、containerd は単にインストールするだけではなく、Kubernetes から使うランタイムとして設定する必要があります。特に SystemdCgroup の有効化は、kubelet との整合性という意味で重要です。
containerd の起動、設定ファイル、CRI endpoint、sandbox image を確認しておくと、kubeadm init や kubeadm join の段階で原因不明のランタイム系トラブルを減らせます。
書籍
Kubernetes完全ガイド 第2版
Kubernetes の仕組み、リソース、ネットワーク、運用観点を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
関連記事
- Ubuntu 22.04 Kubernetes クラスター構築の事前準備 – kubeadm ノードの前提を整える
- Kubernetes クラスター構築 – kubeadm で controlPlaneEndpoint と CNI を整理する
- Ubuntu 22.04 Kubernetes 管理ツールのインストール – kubectl / Helm / calicoctl を整理する
- Ubuntu 22.04 Netplan ネットワーク設定 – DHCP / 固定 IP / DNS の基本
- Ubuntu 22.04 chrony の設定 – サーバー運用向けに時刻同期を管理する


