Kubernetes

Ubuntu22.04で始めるKubernetes構築ガイド – シングルマスターからHAまで

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

お得なお知らせ

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

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

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

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

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


スポンサードリンク

1️⃣ 前提条件・ハードウェア要件

項目 推奨設定
OS Ubuntu 22.04 LTS (64‑bit)
CPU 2 コア以上(4 コア推奨)
メモリ 4 GiB 以上(8 GiB 推奨)
ストレージ SSD ≥ 100 GB
ネットワーク TCP/UDP 443, 6443, 2379‑2380, 10250, 10251, 10252 を相互に開放
時刻同期 chrony または ntp による NTP 同期

ポイント
Ubuntu 22.04 は Kubernetes が公式にサポートしている LTS ディストリビューションです。CPU・メモリの最低要件は各コンポーネントが 1 GiB 程度を必要とすることから、上表のスペックで本番レベルのシングルマスタ/小規模 HA 環境が十分に確保できます。

必須 OS 設定

備考
swapoff -a のみで一時的に無効化できますが、再起動後もスワップを使用しないよう /etc/fstab にコメントを書き込んでおくことがベストプラクティスです。


2️⃣ コンテナランタイム – containerd の導入

Docker が非推奨になった背景(正確なバージョン)

containerd のインストール手順

ポイント
containerd のデフォルト設定は CRI ソケット /run/containerd/containerd.sock を提供します。以後の kubeadm initjoin ではこのパスを明示してください。


3️⃣ Kubernetes コアコンポーネント(kubeadm/kubelet/kubectl)インストール

バージョン統一とアップデート防止

kubelet の有効化

注意
kubelet は起動時に /run/containerd/containerd.sock を自動検出しますが、明示的に指定したい場合は /etc/default/kubeletKUBELET_EXTRA_ARGS=--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock を追記してください。


4️⃣ シングルマスタ構成でのクラスタ初期化

kubeadm init の必須フラグ

フラグ 用途
--pod-network-cidr=192.168.0.0/16 Calico など CNI が使用する Pod IP 範囲
--cri-socket=/run/containerd/containerd.sock Docker ではなく containerd を利用させる
--control-plane-endpoint=<IP>:6443 (任意) 後で外部ロードバランサを導入する際の固定エンドポイント

管理者用 kubeconfig の設定

結果確認
bash
kubectl get nodes # Master が Ready と表示されるはずです


5️⃣ CNI デプロイ – Calico

ポイント
Calico は BGP ルーティングと NetworkPolicy を提供し、Kubernetes が推奨する CNI のひとつです。Pod CIDR と一致させるだけで即座にネットワークが有効になります。


6️⃣ 外部 etcd(本番向け)

重要
apt-get install -y etcd はテスト環境向きです。本番では公式バイナリを直接ダウンロードし、検証済みの設定で systemd 管理することが推奨されます。

公式バイナリによるインストール手順

確認
bash
ETCDCTL_API=3 etcdctl endpoint health --endpoints=http://10.0.0.11:2379

kubeadm で外部 etcd を利用する設定

kubeadm init 時に以下のフラグを追加:

ポイント
証明書は kubeadm init phase certs all で事前に生成しておくとスムーズです。


7️⃣ コントロールプレーンの増設(HA)

新しいマスターで実行(IP は対象ノードの IP)

結果確認
bash
kubectl get nodes -o wide # 2 台以上が Ready になるはずです


8️⃣ ワーカーノード参加手順

ワーカー側:

ポイント
kubeadm join--cri-socket を省略すると自動的に /run/containerd/containerd.sock が使用されます(Docker がインストールされていても影響なし)。


9️⃣ Conformance テストの実行(containerd 環境)

(1) Conformance イメージ取得

Kubernetes の公式 Conformance イメージは Docker/ctr 両方でプル可能です。runtime が containerd でも docker pull だけでローカルにキャッシュされ、後続の sonobuoy が利用します。

(2) Sonobuoy でテスト実行

(3) 結果取得

合格基準
All tests passed が出力され、plugins/e2e/results/ 配下にエラーが無いことを確認すれば Conformance 合格です。


10️⃣ セキュリティベストプラクティス

項目 推奨設定
RBAC デフォルトで有効。最小権限のロールを作成し、ClusterRoleBinding は必要最小限に限定
API 認証・監査 kube-apiserver--authorization-mode=Node,RBAC --audit-policy-file=/etc/kubernetes/audit-policy.yaml を付与。ログは外部 SIEM へ転送
TLS 強化 etcd・kubelet·apiserver の通信は TLS 1.3 以上を使用し、証明書は cert-manager で自動更新
トークン管理 kubeadm token create --ttl 0 は長期間の運用では危険。定期的にローテーションし、不要になったトークンは kubeadm token delete <token> で削除
etcd バックアップ ETCDCTL_API=3 etcdctl snapshot save /var/backups/etcd-$(date +%F).db を cron に登録。復元手順もドキュメント化

11️⃣ アップグレード戦略(例:v1.30 → v1.31)

必須:アップグレード前に必ず etcd snapshot を取得し、テストクラスターでリハーサルを行うこと。


12️⃣ まとめ(要点)

  1. Swap 無効化containerd の導入 が kubeadm 実行の前提条件。
  2. 本番環境では etcd を公式バイナリでデプロイ し、apt install etcd は避ける。
  3. Docker は Conformance イメージ取得にだけ使用(runtime は containerd)。
  4. kubeadm init の必須フラグは --pod-network-cidr--cri-socket、必要なら --control-plane-endpoint
  5. Calico で Pod ネットワークと NetworkPolicy を即座に有効化。
  6. 外部 etcd + kubeadm join --control-plane により HA(複数コントロールプレーン) が数ステップで実現できる。
  7. ワーカーノードはトークン共有だけで参加可能、Conformance テストは Sonobuoy で自動化。
  8. RBAC・TLS・監査ログなど セキュリティ設定 を忘れずに適用し、定期的なバックアップとバージョン管理で運用を安定させる。

これらの手順をそのまま実行すれば、2026 年時点でも 本番向け高可用性セキュア な Kubernetes クラスタが構築できます。 Happy K8s!

スポンサードリンク

お得なお知らせ

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

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

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

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

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


-Kubernetes