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_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
EOF
sudo sysctl --systemnet.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/fstabKubernetes リポジトリを追加する
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 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が導入されている
この後は、containerd の設定、コントロールプレーンの初期化、CNI の導入、ワーカーノードの参加へ進みます。
まとめ
Kubernetes クラスター構築では、kubeadm init の前に OS 側の前提をそろえることが重要です。カーネルモジュール、sysctl、swap、APT リポジトリ、Kubernetes パッケージの状態がそろっていないと、後続のエラー原因が分かりにくくなります。
この記事の作業は、すべての Kubernetes ノードで共通して実施する準備です。個別のクラスタ構築手順へ進む前に、各ノードが同じ前提になっているか確認します。

