🗂

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を使用)

詳細な手順は以下が公式のドキュメントです(やや上級者向け)

Creating Highly Available Clusters with kubeadm


🚩 まとめ(初心者向け再確認)

  • 各ノードに共通設定を施し、Masterを初期化後、Workerノードがkubeadm joinで参加。
  • 初心者はまずMaster1台、Worker複数台構成から始めて慣れることを推奨。
  • 本番環境では必ずMasterを冗長化するようにしましょう。

これが、初心者向けに丁寧にまとめた複数のサーバーでKubernetesクラスタを構築する詳細手順です。

Discussion