手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 containerd の設定 – Kubernetes ノード向けに SystemdCgroup を有効化する

Ubuntu 22.04 に containerd をインストールし、Kubernetes ノードのコンテナランタイムとして使えるように設定します。containerd は Docker の代替というより、Kubernetes が CRI 経由でコンテナを実行するためのランタイムとして扱うと分かりやすいです。

この記事は、Ubuntu 22.04 の既存環境で containerd と kubelet の前提を見直すための記事です。新規構築では Ubuntu 26.04 側の記事を優先しつつ、22.04 環境の設定確認や古い Kubernetes ノードの読み替えに使ってください。

関連する記事
この記事で確認すること
  • containerd を Kubernetes の CRI runtime として扱う前提
  • SystemdCgroup を有効化する理由
  • sandbox image と Kubernetes バージョンの関係
  • crictl で CRI endpoint を確認する方法
  • kubeadm 前に見るノード側の項目
参考
書籍
参考書籍

Kubernetes完全ガイド 第2版

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

Amazon で見る

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

containerd の位置づけ

Kubernetes ノードでは、containerd を単体のコンテナ実行ツールとしてではなく、kubelet から CRI 経由で呼び出されるランタイムとして見ます。そのため、サービスが起動しているだけでなく、kubelet と cgroup driver が一致しているかが重要です。

  • 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

既存環境では、Kubernetes パッケージのバージョンや kubelet の設定と合わせて確認します。containerd だけを更新すると、pause image や cgroup driver の前提がずれることがあります。

既定設定を生成する

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 側の SystemdCgrouptrue にします。

コマンド
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
grep -n 'SystemdCgroup' /etc/containerd/config.toml

出力が SystemdCgroup = true になっていることを確認します。kubelet 側も systemd cgroup driver を使う前提で揃えます。

sandbox image を確認する

Kubernetes の pause image は、Kubernetes のバージョンによって推奨値が変わることがあります。containerd の既定値と kubeadm 側の期待値が違うと警告が出る場合があります。

コマンド
grep -n 'sandbox_image' /etc/containerd/config.toml
kubeadm config images list

警告が出る場合は、利用している Kubernetes バージョンに合わせて sandbox_image を調整します。固定値として暗記するより、対象の kubeadm が要求するイメージを確認します。

containerd を再起動する

設定を変更したら、containerd を再起動します。既存ノードでは、Pod への影響を見てから作業時間を決めます。

コマンド
sudo systemctl restart containerd.service
sudo systemctl enable containerd.service
systemctl status containerd.service

再起動後に kubelet 側でエラーが出る場合は、containerd の起動状態、CRI endpoint、cgroup driver、sandbox image の順に確認します。

CRI として確認する

Kubernetes から見える CRI ランタイムとして確認するには、crictl を使います。接続先のエンドポイントを明示すると、複数ランタイムがある環境でも切り分けしやすくなります。

コマンド
sudo apt install -y cri-tools
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
EOF
sudo crictl info
sudo crictl images

crictl info が取得できない場合は、containerd の socket、サービス状態、権限を確認します。kubeadm のエラーだけを見るより、CRI 単体で確認した方が原因を分けやすいです。

Kubernetes ノード準備との関係

containerd の設定は、Kubernetes ノードの事前準備とセットで考えます。カーネルモジュール、sysctl、swap 無効化、kubelet / kubeadm の導入が揃って、はじめて kubeadm でクラスター構築へ進めます。

  • containerd が起動している
  • SystemdCgroup = true になっている
  • CRI endpoint が /run/containerd/containerd.sock を向いている
  • swap が無効化されている
  • kubelet と Kubernetes パッケージのバージョンを管理している

22.04 の既存環境を見直す場合は、古い Kubernetes バージョン、containerd の設定差分、kubelet の cgroup driver、swap の状態をまとめて確認します。

まとめ

Ubuntu 22.04 で Kubernetes ノードを構築する場合、containerd は単にインストールするだけではなく、Kubernetes から使うランタイムとして設定する必要があります。特に SystemdCgroup の有効化は、kubelet との整合性という意味で重要です。

containerd の起動、設定ファイル、CRI endpoint、sandbox image を確認しておくと、kubeadm initkubeadm join の段階でランタイム系トラブルを切り分けやすくなります。

関連する記事
Ubuntu 22.04 containerd の設定 – Kubernetes ノード向けに SystemdCgroup を有効化する

コメントを残す

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

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

トップへ戻る