6 Kubernetesクラスタのスケーリング
Kubernetesクラスタは単一または複数のコントロール・プレーン・ノードとワーカー・ノードで構成されています。 クラスタで実行するアプリケーションが多くなると、多くのリソース(ノード数)が必要になります。 大量のワークロードやトラフィックを処理するために追加のリソースが必要な場合や、さらに多くのサービスをクラスタにデプロイする場合に、実行することは何でしょうか。 クラスタに新しいノードを追加することです。 また、クラスタ内に障害が発生したノードがある場合は何をするでしょうか。 それを削除します。
Kubernetesクラスタのスケーリングとは、ノードの追加または削除によってクラスタを更新することです。 Kubernetesクラスタにノードを追加すると、クラスタをスケール・アップすることになり、クラスタからノードを削除すると、クラスタをスケール・ダウンすることになります。
クラスタ内のノードを置換する場合は、最初にクラスタをスケール・アップ(新しいノードを追加)してから、クラスタをスケール・ダウン(古いノードを削除)します。
ノート:
クラスタのスケール・アップとスケール・ダウンは同時に実行しないようすることをお薦めします。 2つの個別のコマンドで、スケール・アップしてからスケール・ダウンするようにしてください。 スプリットブレイン・シナリオを回避するには、Kubernetesクラスタのコントロール・プレーン・ノードを奇数でスケーリングします。 たとえば、3、5または7のコントロール・プレーン・ノードは、クラスタの信頼性を保証します。
--apiserver-advertise-address
オプションを使用した場合、単一のコントロール・プレーン・ノードを備えたクラスタから、複数のコントロール・プレーン・ノードを備えた高可用性(HA)クラスタにスケール・アップすることはできません。 ただし、--virtual-ip
オプションまたは--load-balancer
オプションを使用した場合は、単一のコントロール・プレーン・ノードのクラスタのみである場合もスケール・アップできます。
重要:
--apiserver-advertise-address
オプションは非推奨になりました。 --control-plane-nodes
オプションを使用します。
Kubernetesクラスタのスケーリング時には、次の作業を実行します。
-
クラスタをバックアップします。 スケール・アップまたはスケール・ダウンの実行中に問題が発生した場合は、前の状態に戻するようにクラスタをリストアできます。 Kubernetesクラスタのバックアップおよびリストアの詳細は、「Kubernetesクラスタのバックアップおよびリストア」を参照してください。
-
クラスタに追加するノードを検証します。 ノードの検証に問題があると(ファイアウォールの問題など)、クラスタの更新が続行できなくなり、そのノードはクラスタに追加できなくなります。 クラスタにノードを追加できるようにするために、検証の問題を解決する操作を求めるプロンプトが表示されます。
-
コントロール・プレーン・ノードおよびワーカー・ノードをクラスタに追加するか、クラスタから削除します。
-
クラスタをチェックして、すべてのノードが正常であることを確認します。 クラスタの検証が完了したら、クラスタをスケーリングして、そのクラスタにアクセスします。
ヒント:
この章の例では、--control-plane-nodes
および--worker-nodes
オプションを使用してクラスタに含めるすべてのノードを指定することによって、コントロール・プレーン・ノードとワーカー・ノードを同時に変更してスケール・アップおよびスケール・ダウンする方法を示しています。 コントロール・プレーン・ノードのみをスケーリングする場合は、--control-plane-nodes
オプションを使用してクラスタに含めるコントロール・プレーン・ノードのリストのみを指定する必要があります(すべてのワーカー・ノードを指定する必要はありません)。 同様に、ワーカー・ノードのみをスケーリングする場合は、--worker-nodes
オプションのみを使用してワーカー・ノードのリストを指定します。
Kubernetesクラスタのスケール・アップ
Kubernetesクラスタのスケール・アップ前に、新しいノードをクラスタに追加できるように設定します。
ノードを準備するには:
-
Kubernetesクラスタに追加できるようにノードを設定します。 Kubernetesノードの設定の詳細は、スタート・ガイドを参照してください。
-
ノードにプライベートX.509証明書を使用している場合は、証明書をノードにコピーする必要があります。 Vaultを使用してノードの証明書を提供する場合、必要な処理はありません。 X.509証明書の使用の詳細は、スタート・ガイドを参照してください。
-
Platform Agentサービスを起動します。 Platform Agentの起動の詳細は、スタート・ガイドを参照してください。
これらの作業を完了したら、この手順の説明を使用してKubernetesクラスタにノードを追加します。
Kubernetesクラスタをスケール・アップするには:
-
Kubernetesクラスタのコントロール・プレーン・ノードから、
kubectl get nodes
コマンドを使用して、クラスタのコントロール・プレーン・ノードおよびワーカー・ノードを表示します。kubectl get nodes NAME STATUS ROLE AGE VERSION control1.example.com Ready control-plane 26h v1.21.x+x.x.x.el8 control2.example.com Ready control-plane 26h v1.21.x+x.x.x.el8 control3.example.com Ready control-plane 26h v1.21.x+x.x.x.el8 worker1.example.com Ready <none> 26h v1.21.x+x.x.x.el8 worker2.example.com Ready <none> 26h v1.21.x+x.x.x.el8 worker3.example.com Ready <none> 26h v1.21.x+x.x.x.el8
この例では、Kubernetesクラスタに3つのコントロール・プレーン・ノードがあります。
-
control1.example.com
-
control2.example.com
-
control3.example.com
また、このクラスタには3つのワーカー・ノードもあります。
-
worker1.example.com
-
worker2.example.com
-
worker3.example.com
-
-
olcnectl module update
コマンドを使用して、Kubernetesクラスタをスケール・アップします。この例では、Kubernetesクラスタは、コントロール・プレーン・ノードが4つ、ワーカー・ノードが5つになるようにスケール・アップされます。 この例では、新しいコントロール・プレーン・ノード(
control.example.com
)と2つの新しいワーカー・ノード(worker4.example.com
およびworker5.example.com
)をmycluster
というKubernetesモジュールに追加します。 オペレータ・ノードで次のコマンドを実行します。olcnectl module update \ --environment-name myenvironment \ --name mycluster \ --control-plane-nodes control1.example.com:8090,control2.example.com:8090,control3.example.com:8090,\ control4.example.com:8090 \ --worker-nodes worker1.example.com:8090,worker2.example.com:8090,worker3.example.com:8090,\ worker4.example.com:8090,worker5.example.com:8090
単一のコントロール・プレーン・ノードから高可用性クラスタにスケール・アップする場合は、クラスタのロード・バランサを指定していることを確認してください。 ロード・バランサを指定していないと、コントロール・プレーン・ノードをスケール・アップできません。 つまり、ロード・バランサがないと、単一のコントロール・プレーン・ノードから高可用性クラスタに移動できません。
必要に応じて、
--generate-scripts
オプションを指定できます。 このオプションは、スケーリング時に検証の失敗が発生した場合に各ノードに対して実行できるスクリプトを生成します。 モジュール内の各ノードに対してスクリプトが作成され、ローカル・ディレクトリに保存され、hostname:8090.sh
という名前が付けられます。必要に応じて、
--force
オプションを指定し、クラスタのスケーリングの続行を確認するプロンプトを非表示にすることもできます。 -
Kubernetesクラスタのコントロール・プレーン・ノードで、
kubectl get nodes
コマンドを使用して、新しいコントロール・プレーン・ノードおよびワーカー・ノードを含めるようにクラスタがスケール・アップされていることを確認します。kubectl get nodes NAME STATUS ROLE AGE VERSION control1.example.com Ready control-plane 26h v1.21.x+x.x.x.el8 control2.example.com Ready control-plane 26h v1.21.x+x.x.x.el8 control3.example.com Ready control-plane 26h v1.21.x+x.x.x.el8 control4.example.com Ready control-plane 2m38s v1.21.x+x.x.x.el8 worker1.example.com Ready <none> 26h v1.21.x+x.x.x.el8 worker2.example.com Ready <none> 26h v1.21.x+x.x.x.el8 worker3.example.com Ready <none> 26h v1.21.x+x.x.x.el8 worker4.example.com Ready <none> 2m38s v1.21.x+x.x.x.el8 worker5.example.com Ready <none> 2m38s v1.21.x+x.x.x.el8
Kubernetesクラスタのスケール・ダウン
この手順では、Kubernetesクラスタからノードを削除する方法を示します。
注意:
クラスタのコントロール・プレーン・ノードをスケール・ダウンする場合は注意してください。 2つのコントロール・プレーン・ノードがあり、スケール・ダウンしてコントロール・プレーン・ノードを1つのみにすると、シングル・ポイント障害になります。
Kubernetesクラスタをスケール・ダウンするには:
-
Kubernetesクラスタのコントロール・プレーン・ノードから、
kubectl get nodes
コマンドを使用して、クラスタのコントロール・プレーン・ノードおよびワーカー・ノードを表示します。kubectl get nodes NAME STATUS ROLE AGE VERSION control1.example.com Ready control-plane 26h v1.21.x+x.x.x.el8 control2.example.com Ready control-plane 26h v1.21.x+x.x.x.el8 control3.example.com Ready control-plane 26h v1.21.x+x.x.x.el8 control4.example.com Ready control-plane 2m38s v1.21.x+x.x.x.el8 worker1.example.com Ready <none> 26h v1.21.x+x.x.x.el8 worker2.example.com Ready <none> 26h v1.21.x+x.x.x.el8 worker3.example.com Ready <none> 26h v1.21.x+x.x.x.el8 worker4.example.com Ready <none> 2m38s v1.21.x+x.x.x.el8 worker5.example.com Ready <none> 2m38s v1.21.x+x.x.x.el8
この例では、Kubernetesクラスタに4つのコントロール・プレーン・ノードがあります。
-
control1.example.com
-
control2.example.com
-
control3.example.com
-
control4.example.com
また、このクラスタには5つのワーカー・ノードもあります。
-
worker1.example.com
-
worker2.example.com
-
worker3.example.com
-
worker4.example.com
-
worker5.example.com
-
-
olcnectl module update
コマンドを使用して、Kubernetesクラスタをスケール・ダウンします。この例では、Kubernetesクラスタは、コントロール・プレーン・ノードが3つ、ワーカー・ノードが3つになるようにスケール・ダウンされます。 この例では、コントロール・プレーン・ノード(
control4.example.com
)と2つのワーカー・ノード(worker4.example.com
およびworker5.example.com
)をmycluster
というKubernetesモジュールから削除します。 ノードは--control-plane-nodes
または--worker-nodes
オプションに一覧表示されなくなったため、クラスタから削除されます。 オペレータ・ノードで次のコマンドを実行します。olcnectl module update \ --environment-name myenvironment \ --name mycluster \ --control-plane-nodes control1.example.com:8090,control2.example.com:8090,control3.example.com:8090 \ --worker-nodes worker1.example.com:8090,worker2.example.com:8090,worker3.example.com:8090
-
Kubernetesクラスタのコントロール・プレーン・ノードで、
kubectl get nodes
コマンドを使用して、クラスタがスケール・ダウンされ、コントロール・プレーン・ノードおよびワーカー・ノードが削除されていることを確認します。kubectl get nodes NAME STATUS ROLE AGE VERSION control1.example.com Ready control-plane 26h v1.21.x+x.x.x.el8 control2.example.com Ready control-plane 26h v1.21.x+x.x.x.el8 control3.example.com Ready control-plane 26h v1.21.x+x.x.x.el8 worker1.example.com Ready <none> 26h v1.21.x+x.x.x.el8 worker2.example.com Ready <none> 26h v1.21.x+x.x.x.el8 worker3.example.com Ready <none> 26h v1.21.x+x.x.x.el8