手当たり次第に書くんだ

飽きっぽいのは本能

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

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

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 list

containerd を再起動する

設定を変更したら、containerd を再起動します。

sudo systemctl restart containerd.service
sudo systemctl enable containerd.service
systemctl status containerd.service

CRI として確認する

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
EOF
sudo crictl info
sudo crictl images

Kubernetes ノード準備との関係

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 initkubeadm join の段階で原因不明のランタイム系トラブルを減らせます。

参考
書籍
参考書籍

Kubernetes完全ガイド 第2版

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

Amazon で見る

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

関連記事

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

コメントを残す

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

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

トップへ戻る