Ubuntu 22.04 上で kubeadm を使って Kubernetes クラスターを構築する前に、各ノード側で共通の事前準備を行います。ここでは、カーネルモジュール、sysctl、swap 無効化、Kubernetes パッケージリポジトリ、kubelet / kubeadm / kubectl の導入までを整理します。
この記事はクラスター初期化そのものではなく、コントロールプレーンとワーカーノードの両方で実行する OS 側の準備です。実際の環境では構成管理ツールで適用することが多いですが、ここでは手動で確認できる形に落としています。
前提条件
- Ubuntu 22.04 がインストール済みである
- 固定 IP、名前解決、時刻同期などの基本設定が完了している
- コントロールプレーン、ワーカーノードの全台で実行する
- コンテナランタイムは containerd を前提にする
- kube-proxy は IPVS モードを使う想定で準備する
Kubernetes のリポジトリやバージョンは時期によって変わります。実際に構築する場合は、使いたい 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
EOFsudo 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_conntrackoverlay はコンテナランタイムで使われる 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
EOFsudo sysctl --systemnet.ipv4.ip_forward は Pod や Service の通信で必要になります。IPv6 を使う構成では、CNI やクラスタ設計に合わせて IPv6 側の転送設定も確認します。
swap を無効化する
kubelet は、従来の標準的な構成では swap 無効化を前提に扱われてきました。まずは swap を停止します。
sudo swapoff -a
free -h再起動後も swap が有効にならないように、/etc/fstab の swap 行をコメントアウトします。既存ファイルを確認してから編集します。
grep -n "swap" /etc/fstab単純な検証環境で swap 行だけをコメントアウトする場合は、次のように置換できます。実環境では、対象行を確認してから実行します。
sudo cp /etc/fstab /etc/fstab.bak
sudo sed -i.bak '/\sswap\s/s/^/#/' /etc/fstabKubernetes リポジトリを追加する
Kubernetes パッケージを取得するため、APT リポジトリを追加します。以下は Kubernetes 1.29 系の例です。利用するバージョンに合わせてパスを変更します。
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gpgsudo 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 kubectlapt-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 versionswapon --show に何も表示されなければ、swap は無効です。kubelet はクラスターへ参加するまで正常起動しない場合がありますが、パッケージとバージョンが確認できれば事前準備としては進められます。
この段階で完了すること
- Kubernetes ノードとして必要なカーネルモジュールを読み込める
- ブリッジ通信と IP forwarding の設定が入っている
- swap が無効化されている
- Kubernetes パッケージリポジトリが追加されている
kubelet、kubeadm、kubectlが導入されている
この後は、コンテナランタイムの設定、コントロールプレーンの初期化、CNI の導入、ワーカーノードの参加へ進みます。
まとめ
Kubernetes クラスター構築では、kubeadm init の前に OS 側の前提をそろえることが重要です。カーネルモジュール、sysctl、swap、APT リポジトリ、Kubernetes パッケージの状態が揃っていないと、後続のエラー原因が分かりにくくなります。
この記事の作業は、すべての Kubernetes ノードで共通して実施する準備です。個別のクラスタ構築手順へ進む前に、各ノードが同じ前提に揃っているか確認します。
書籍
Kubernetes完全ガイド 第2版
Kubernetes の仕組み、リソース、ネットワーク、運用観点を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
関連記事
- Kubernetes クラスター構築
- Ubuntu 22.04 Kubernetes 管理ツールのインストール
- Ubuntu 22.04 Netplan ネットワーク設定 – DHCP / 固定 IP / DNS の基本
- Ubuntu 22.04 chrony の設定 – サーバー運用向けに時刻同期を管理する
- Ubuntu 22.04 apt update / apt upgrade の基本 – 手動アップデートの確認手順




