Kubernetes

Kubernetes クラスタ構築ガイド:kubeadmでシングルノードからHAまでの手順

ⓘ本ページはプロモーションが含まれています

お得なお知らせ

スポンサードリンク
1ヶ月で資格+現場入り

インフラエンジニアへの最短ルート

未経験でもAWS・Linux・ネットワーク資格を最短で取り、現場入りまでサポート。SREやクラウドエンジニアの入口。

CODE×CODEスピード転職|無料面談▶ SRE/クラウドのフリーランス案件▶

▶ AWS/GCP/Kubernetesの独学には Kindle Unlimited の技術書読み放題がコスパ最強。


Contents

スポンサードリンク

前提条件とハードウェア・ネットワーク要件

結論:本番環境で安定稼働させる最小構成は以下の通りです。

項目 推奨スペック
CPU 2 コア以上(4 コア推奨)
メモリ 4 GiB 以上(8 GiB 推奨)
ディスク SSD 20 GiB 空き容量 ※ワークロードやログ保管の要件に応じて増量が必要
OS Ubuntu 24.04 LTS (kernel 6.5 系)
ネットワーク 各ノードに固定 IP、プライベート CIDR(例: 10.0.0.0/24
DNS 外部 DNS が正引きできること(Google 8.8.8.8 等)
時刻同期 NTP または systemd-timesyncd による自動同期

補足:ディスク容量について

  • 最低: コンテナイメージと etcd のスナップショットだけで約 15 GiB が必要です。
  • 実務的には: アプリケーションのイメージサイズや永続ボリューム(PV)を考慮し、50 GiB 以上、可能なら 100 GiB を確保すると安全です。

必須ソフトウェアのインストールとシステム設定

2‑1. containerd の公式パッケージによるインストール

Docker リポジトリ経由ではなく、Ubuntu が提供する 公式 containerd パッケージ を利用します。これにより署名や依存関係が保証され、将来的なアップデートもシームレスです。

ポイント
- systemd_cgroup = true が推奨設定です。Kubelet と同一の cgroup ドライバを使用することで、将来のアップグレード時に互換性が保たれます。
- Ubuntu 24.04 の公式リポジトリは containerd.io パッケージとして提供されているため、外部リポジトリ追加は不要です。

2‑2. kubelet・kubeadm・kubectl の取得(apt リポジトリ)

以前の「kubernetes-xenial」表記は古く、Ubuntu 24.04 でも同様に機能しますが混乱を招きます。公式ドキュメントでは ディストリビューション名を動的に取得 することが推奨されています。

注意書き
- 本稿執筆時点(2025‑08)は v1.30 系が最新安定版 です。v1.31 はまだリリースされていない可能性があります。将来のバージョンをインストールする際は、公式リリースノートで対応可否を必ず確認してください。

2‑3. Swap 無効化と sysctl 推奨設定

ポイント
- bridge-nf-call-iptables 系は CNI がパケットフィルタリングを行うために必須です。
- ip_forward を有効化しないと、Pod ネットワークが外部へ通信できません。


シングルノードクラスタ構築(kubeadm init)

3‑1. 初期化コマンド例

以下は 単一ノード(master と worker を同一マシンで実行)を想定した kubeadm init の最小構成です。IP アドレスや CIDR は環境に合わせて変更してください。

主なオプションの意味

オプション 説明
--apiserver-advertise-address API Server がリッスンする IP(マスタの固定アドレス)
--control-plane-endpoint HA 構成時に外部ロードバランサが提供するエンドポイント。シングルノードでも明示すると後工程で変更が楽です
--pod-network-cidr CNI が割り当てる Pod 用 IP 範囲(Calico のデフォルトは 192.168.0.0/16)
--cri-socket 使用するコンテナランタイムのソケットパス。containerd の場合は /run/containerd/containerd.sock

3‑2. kubeconfig の設定(一般ユーザーで利用できるように)

3‑3. CNI プラグインのデプロイと動作確認

Calico(推奨)

Weave Net(代替例)

動作確認


マルチノード・高可用性構成の構築

4‑1. HA 用 control‑plane の設計ポイント

項目 推奨
コントロールプレーン数 奇数台(最低 3 台)
ロードバランサ 外部 HAProxy / nginx / MetalLB (外部)
etcd データストレージ 各マスタにローカル SSD、バックアップは定期的に取得

4‑2. 初回 init(ロードバランサエンドポイント指定)

  • --upload-certs:以降の control‑plane ノードが証明書を取得できるようにするフラグ
  • 初回実行後、証明書キーkubeadm join コマンド が標準出力に表示されます。必ずコピーして安全な場所に保管してください。

4‑3. 2 台目・3 台目の control‑plane ノードでの join

注意点

  • 各マスタは 同一バージョン(例: v1.30.0)である必要があります。
  • --certificate-key が無いと etcd の証明書が取得できず、join に失敗します。

4‑4. kubeadm Config File を使った再利用可能なテンプレート

4‑5. ワーカーノードの参加手順とトラブルシューティング

参加コマンド取得(マスタ側)

ワーカーノードで実行

症状 確認ポイント
kubeadm join がタイムアウト timedatectl status → NTP 同期が有効か
kubelet が起動しない systemctl status kubeletfree -h で swap が残っていないか
CNI が機能せず Pod が Pending kubectl get pods -n kube-system で calico/weave の状態確認、iptables に DROP ルールが無いか

運用・保守ガイド(検証、アップグレード、クリーンアップ)

5‑1. クラスタ全体のヘルスチェック

サンプルアプリで動作検証

5‑2. バージョン管理とアップグレード手順

バージョンスキューポリシー

  • サポート対象は「直前のマイナーバージョン」まで。例: v1.30v1.31 は可能だが、v1.30v1.32 は非対応。
  • 注意:執筆時点(2025‑08)では v1.31 がリリースされていない可能性があります。実際に適用する前に公式リリースノートで確認してください。

アップグレードフロー(例: v1.30 → v1.31)

重要
- kubeadm upgrade apply が完了したら、必ず kubectl get cskubectl get pods -A で全コンポーネントが正常に起動しているか検証してください。
- 重大な変更(etcd バージョンアップ等)が含まれる場合は事前にバックアップを取得し、テスト環境でリハーサルすることを推奨します。

5‑3. 障害復旧・ログ取得・クリーンアップ

ログ収集のベストプラクティス

ソース コマンド例
systemd ジャーナル(kubelet) journalctl -u kubelet -n 200 --no-pager
API Server ログ journalctl -u kube-apiserver -n 200
etcd ログ journalctl -u etcd -n 200
コンテナランタイム(containerd) journalctl -u containerd -n 200
Kubernetes マニフェストのイベント kubectl describe pod <pod> -n kube-system

障害復旧フロー

  1. コントロールプレーンの状態確認
    bash
    kubectl get componentstatuses
    journalctl -u kube-apiserver -n 100
  2. ワーカーノードで kubelet エラーを特定
    bash
    ssh user@worker01 "journalctl -u kubelet -n 200"
  3. リソースの詳細情報取得(イベント含む)
    bash
    kubectl describe pod <pod-name> -n <namespace>
  4. 必要に応じてパッケージ再インストール(例: containerd のバグ修正)
    bash
    sudo apt-get reinstall -y containerd kubelet
    sudo systemctl restart containerd kubelet
  5. 最終手段:kubeadm reset + 完全クリーンアップ

bash
# ローカル設定・データの削除(注意: 永続ボリュームは残ります)
sudo kubeadm reset --force

# パッケージとディレクトリを完全に除去
sudo apt-get purge -y kubelet kubeadm kubectl containerd
sudo rm -rf /etc/kubernetes /var/lib/etcd /var/lib/kubelet /var/run/kubernetes \
/var/lib/containerd

# ログの保存(障害報告用に tar アーカイブ化)
journalctl > ~/k8s-journal.log
tar czf ~/k8s-logs-$(date +%F).tgz /var/log/kubernetes ~/.kube

注意kubeadm reset はローカルの設定のみを削除します。外部 etcd クラスタやクラウドプロバイダ上のリソースは手動で削除してください。


まとめ

  • ハードウェア要件は CPU 2 コア、メモリ 4 GiB、SSD 20 GiB(実運用では余裕を持って増量)を最低ラインとし、ネットワークは固定 IP とプライベート CIDR を採用。
  • containerd は Ubuntu 公式パッケージからインストールし、systemd_cgroup = true を必ず有効化。Docker リポジトリは使用せず、安全性を確保。
  • Kubernetes apt リポジトリはディストリビューション名を自動取得し、古い kubernetes-xenial 表記は廃止。
  • **バージョン例として v1.31 を挙げる際は「将来のリリースである可能性がある」旨の注意書きを必ず付与。
  • ディスク容量は最低 20 GiB に加えて、イメージやログ・永続データを想定した余裕分を確保することが推奨。
  • HA 構成ではロードバランサエンドポイントの明示と --upload-certs の利用で証明書共有を自動化し、kubeadm-config.yaml による再利用可能なテンプレート化でヒューマンエラーを削減。
  • 運用フェーズはヘルスチェック・サンプルアプリによる検証、バージョンスキューに沿った段階的アップグレード、障害時のログ取得と kubeadm reset による安全なクリーンアップ手順を標準化することが重要です。

以上の手順とベストプラクティスに従えば、シングルノードから HA クラスタまで、Ubuntu 24.04 上で安全かつ再現性の高い Kubernetes 環境を構築・運用できます。


本稿は 2025‑08 の公式リリース情報に基づき執筆していますが、Kubernetes は頻繁にアップデートされます。実装前には必ず最新の公式ドキュメントをご確認ください。

スポンサードリンク

お得なお知らせ

スポンサードリンク
1ヶ月で資格+現場入り

インフラエンジニアへの最短ルート

未経験でもAWS・Linux・ネットワーク資格を最短で取り、現場入りまでサポート。SREやクラウドエンジニアの入口。

CODE×CODEスピード転職|無料面談▶ SRE/クラウドのフリーランス案件▶

▶ AWS/GCP/Kubernetesの独学には Kindle Unlimited の技術書読み放題がコスパ最強。


-Kubernetes