手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 Kubernetes クラスター構築の事前準備 – kubeadm ノードの前提を確認する

Ubuntu 22.04 上で kubeadm を使って Kubernetes クラスターを構築する前に、各ノード側で共通の事前準備を行います。ここでは、カーネルモジュール、sysctl、swap 無効化、Kubernetes パッケージリポジトリ、kubelet / kubeadm / kubectl の導入までを確認します。

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

関連する記事
この記事で確認すること
  • kubeadm ノードに必要な OS 側の前提
  • カーネルモジュールと sysctl
  • swap 無効化と再起動後の確認
  • Kubernetes パッケージリポジトリ
  • 導入後に見る確認コマンド
参考
書籍
参考書籍

Kubernetes完全ガイド 第2版

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

Amazon で見る

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

前提条件

この記事はクラスター初期化そのものではなく、コントロールプレーンとワーカーノードの両方で実行する OS 側の準備です。実際の環境では構成管理ツールで適用することが多いですが、ここでは手動で確認できる形にします。

  • Ubuntu 22.04 がインストール済みである
  • 固定 IP、名前解決、時刻同期などの基本設定が完了している
  • コントロールプレーン、ワーカーノードの全台で実行する
  • コンテナランタイムは containerd を前提にする
  • kube-proxy は IPVS モードを使う想定で準備する

Kubernetes のリポジトリやバージョンは時期によって変わります。22.04 の既存環境では、利用中の Kubernetes バージョンとリポジトリの系統を確認してから作業します。

カーネルモジュールを読み込む

Kubernetes ノードで必要になるカーネルモジュールを、起動時に読み込むように設定します。

コマンド
sudo tee /etc/modules-load.d/k8s.conf >/dev/null <<'EOF'
overlay
br_netfilter
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
sudo modprobe ip_vs
sudo modprobe ip_vs_rr
sudo modprobe ip_vs_wrr
sudo modprobe ip_vs_sh
sudo modprobe nf_conntrack

overlay はコンテナランタイムで使われる OverlayFS 用です。br_netfilter はブリッジを通る通信を iptables / nftables 側で扱うために必要になります。ip_vs 系は kube-proxy の IPVS モードで使います。

sysctl を設定する

Kubernetes のネットワーク処理で必要になるカーネルパラメータを設定します。

コマンド
sudo tee /etc/sysctl.d/99-kubernetes.conf >/dev/null <<'EOF'
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system

net.ipv4.ip_forward は Pod や Service の通信で必要になります。IPv6 を使う構成では、CNI やクラスタ設計に合わせて IPv6 側の転送設定も確認します。

swap を無効化する

kubelet は、従来の標準的な構成では swap 無効化を前提に扱われてきました。既存の 22.04 ノードでは、現在のクラスタ方針を確認したうえで swap の状態を見ます。

コマンド
sudo swapoff -a
free -h
swapon --show
grep -n "swap" /etc/fstab

再起動後も swap が有効にならないようにする場合は、対象行を確認してから /etc/fstab を変更します。検証環境で swap 行だけを無効化する例は次の通りです。

コマンド
sudo cp /etc/fstab /etc/fstab.bak
sudo sed -i.bak '/\sswap\s/s/^/#/' /etc/fstab

Kubernetes リポジトリを追加する

Kubernetes パッケージを取得するため、APT リポジトリを追加します。以下は v1.29 系の例です。既存環境では、利用中または維持対象の Kubernetes バージョンに合わせてパスを変更します。

コマンド
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gpg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list >/dev/null
sudo apt update

古い手順では apt-key を使う例がありますが、現在は keyring と signed-by を使ってリポジトリ単位で鍵を分ける構成にします。

kubelet / kubeadm / kubectl をインストールする

Kubernetes ノードで使う基本パッケージをインストールします。既存環境では、導入するバージョンを先に決めます。

コマンド
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

apt-mark hold は、意図しない Kubernetes コンポーネントのバージョン更新を避けるために設定します。Kubernetes はコンポーネント間のバージョン関係が重要なので、通常の OS パッケージのように無造作に更新しない方が安全です。

設定を確認する

ここまでの設定が入っているか確認します。

コマンド
lsmod | grep -E 'overlay|br_netfilter|ip_vs|nf_conntrack'
sysctl net.bridge.bridge-nf-call-iptables
sysctl net.bridge.bridge-nf-call-ip6tables
sysctl net.ipv4.ip_forward
swapon --show
kubelet --version
kubeadm version

swapon --show に何も表示されなければ、swap は無効です。kubelet はクラスターへ参加するまで正常起動しない場合がありますが、パッケージとバージョンが確認できれば事前準備としては進められます。

この段階で完了すること

  • Kubernetes ノードとして必要なカーネルモジュールを読み込める
  • ブリッジ通信と IP forwarding の設定が入っている
  • swap が無効化されている
  • Kubernetes パッケージリポジトリが追加されている
  • kubeletkubeadmkubectl が導入されている

この後は、containerd の設定、コントロールプレーンの初期化、CNI の導入、ワーカーノードの参加へ進みます。

まとめ

Kubernetes クラスター構築では、kubeadm init の前に OS 側の前提をそろえることが重要です。カーネルモジュール、sysctl、swap、APT リポジトリ、Kubernetes パッケージの状態がそろっていないと、後続のエラー原因が分かりにくくなります。

この記事の作業は、すべての Kubernetes ノードで共通して実施する準備です。個別のクラスタ構築手順へ進む前に、各ノードが同じ前提になっているか確認します。

関連する記事
Ubuntu 22.04 Kubernetes クラスター構築の事前準備 – kubeadm ノードの前提を確認する

コメントを残す

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

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

トップへ戻る