🗂
Kubernetesクラスタを構築する方法
📌 全体の構成イメージ
複数サーバーでKubernetesを構築する場合、以下の役割分担になります。
-
Masterノード (Control plane)(管理役)
- クラスタ全体を統括する役割。
- 通常1台以上(推奨3台で冗長化)。
-
Workerノード(実際にPodを動かす役割)
- アプリやサービスが動く場所。
- 1台以上(通常複数台)。
今回は初心者向けにシンプルな構成として、以下を例とします。
役割 | ホスト名 | IPアドレス(例) |
---|---|---|
Masterノード | master-node | 192.168.1.10 |
Workerノード | worker-node-1 | 192.168.1.11 |
Workerノード | worker-node-2 | 192.168.1.12 |
🚩 Kubernetesクラスタ構築手順(詳細)
✅ Step 1:全サーバー共通の事前準備
🔹 1.1:ホスト名設定(各サーバで実行)
sudo hostnamectl set-hostname <ホスト名>
例:
sudo hostnamectl set-hostname master-node
🔹 1.2:hostsファイル編集(全ノード共通)
/etc/hosts
に全ノードのIPとホスト名を追加します。
sudo vi /etc/hosts
以下を追記します。
192.168.1.10 master-node
192.168.1.11 worker-node-1
192.168.1.12 worker-node-2
🔹 1.3:Firewall設定を無効化(推奨設定)
sudo systemctl disable firewalld
sudo systemctl stop firewalld
🔹 1.4:swapを無効化(全ノード)
Kubernetesではswapをオフにする必要があります。
sudo swapoff -a
sudo sed -i '/swap/d' /etc/fstab
✅ Step 2:Dockerおよびkubeadmインストール(全ノード共通)
🔹 2.1:Dockerをインストール
sudo yum install -y docker
sudo systemctl enable docker
sudo systemctl start docker
Dockerがインストールされていることを確認:
sudo docker version
🔹 2.2:kubeadm, kubelet, kubectlをインストール
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
EOF
sudo yum install -y kubeadm kubelet kubectl
sudo systemctl enable kubelet
✅ Step 3:Masterノードの初期化(Masterノードのみ実行)
Masterノード(192.168.1.10
)で、Kubernetesクラスタを初期化します。
sudo kubeadm init --apiserver-advertise-address=192.168.1.10 --pod-network-cidr=10.244.0.0/16
-
apiserver-advertise-address
: MasterノードのIPアドレス -
pod-network-cidr
: Podが使用するネットワークアドレス範囲(Flannelを使う場合、10.244.0.0/16を推奨)
完了すると、以下のような出力が得られます(必ずコピー!):
kubeadm join 192.168.1.10:6443 --token XXXXX --discovery-token-ca-cert-hash sha256:XXXXXXXXX
🔹 3.1:kubectlの設定(Masterノード)
一般ユーザーでkubectlを使えるように設定:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
🔹 3.2:Podネットワークの設定(例:Flannel)
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
✅ Step 4:Workerノードのクラスタへの参加(Workerノードのみ実行)
Workerノード(192.168.1.11
, 192.168.1.12
)で、
先ほどコピーしたkubeadm join
コマンドを実行:
sudo kubeadm join 192.168.1.10:6443 --token XXXXX --discovery-token-ca-cert-hash sha256:XXXXXXXXX
※ 上記のtoken情報はMaster初期化後に表示されたものを使用します。
✅ Step 5:クラスタの確認(Masterノード)
Masterノードから以下のコマンドでクラスタ構成を確認します。
kubectl get nodes
結果例:
NAME STATUS ROLES AGE VERSION
master-node Ready control-plane,master 5m v1.28.0
worker-node-1 Ready <none> 3m v1.28.0
worker-node-2 Ready <none> 3m v1.28.0
全ノードがReady
となれば成功です。
📌(応用編)Masterノードを複数にして冗長化したい場合(高可用性)
高可用性を実現する場合は、kubeadm init
の代わりに以下のようなツールを利用します。
- HAProxy + Keepalivedによるロードバランサーを構築
- 3台のMasterを用意し、全てが同じ設定でMasterクラスタを構築
- kubeadmをHA構成で実行(
kubeadm init --control-plane-endpoint
を使用)
詳細な手順は以下が公式のドキュメントです(やや上級者向け)
🚩 まとめ(初心者向け再確認)
- 各ノードに共通設定を施し、Masterを初期化後、Workerノードが
kubeadm join
で参加。 - 初心者はまずMaster1台、Worker複数台構成から始めて慣れることを推奨。
- 本番環境では必ずMasterを冗長化するようにしましょう。
これが、初心者向けに丁寧にまとめた複数のサーバーでKubernetesクラスタを構築する詳細手順です。
Discussion