Kubernetesクラスタは1つまたは複数のマスター・ノードとワーカー・ノードで構成されています。クラスタで実行するアプリケーションが多くなると、多くのリソース(ノード数)が必要になります。大量のワークロードやトラフィックを処理するために追加のリソースが必要な場合や、さらに多くのサービスをクラスタにデプロイする場合に、実行することは何でしょうか。クラスタに新しいノードを追加することです。また、クラスタ内に障害が発生したノードがある場合は何をするでしょうか。それを削除します。
Kubernetesクラスタのスケーリングとは、ノードの追加または削除によってクラスタを更新することです。Kubernetesクラスタにノードを追加すると、クラスタをスケール・アップすることになり、クラスタからノードを削除すると、クラスタをスケール・ダウンすることになります。
Kubernetesクラスタのマスター・ノードまたはワーカー・ノードを別のノードに置き換えることが必要になる場合があります。その場合は、まず、新しいノードを導入するためにスケール・アップしてから、古いノードを削除するためにスケール・ダウンします。
クラスタのスケール・アップとスケール・ダウンは同時に実行しないようすることをお薦めします。2つの個別のコマンドで、スケール・アップしてからスケール・ダウンするようにしてください。
Kubernetesモジュールの作成時に--apiserver-advertise-address
オプションを使用していた場合は、シングル・マスター・クラスタからマルチ・マスター・クラスタにスケール・アップできません。ただし、--virtual-ip
オプションまたは--load-balancer
オプションを使用していた場合は、シングル・マスター・クラスタであってもスケール・アップできます。--apiserver-advertise-address
オプション、--virtual-ip
オプションまたは--load-balancer
オプションの詳細は、4.6「マルチ・マスター(HA) Kubernetesクラスタの作成」を参照してください。
Kubernetesクラスタのスケーリング時には、次の作業を実行します。
クラスタのバックアップを作成します。スケール・アップまたはスケール・ダウンの実行中に問題が発生した場合(クラスタのスケーリング中の障害発生など)、クラスタをリストアできるようにしておくことで前の状態に戻せるようになります。Kubernetesクラスタのバックアップとリストアの詳細は、コンテナ・オーケストレーションを参照してください。
クラスタに追加するノードを検証します。ノードの検証に問題があると(ファイアウォールの問題など)、クラスタの更新が続行できなくなり、そのノードはクラスタに追加できなくなります。クラスタにノードを追加できるようにするために、検証の問題を解決する操作を求めるプロンプトが表示されます。
マスター・ノードおよびワーカー・ノードをクラスタに追加するか、クラスタから削除します。
すべての新しいノードと既存のノードが正常に動作していることを確認するために、クラスタを検査します。クラスタの検証が完了したら、クラスタをスケーリングして、そのクラスタにアクセスします。
次の手順では、Kubernetesクラスタのスケール・アップおよびスケール・ダウンの方法について説明します。
Kubernetesクラスタのスケール・アップ前に、新しいノードをクラスタに追加できるように設定します。
ノードを準備するには:
Oracle Linux Cloud Native Environmentに追加できるように、ノードを設定します。3.4.2「Kubernetesノードの設定」を参照してください。
ノードのX.509証明書を設定して、そのノードとKubernetesクラスタの別のノードとの安全な通信ができるようにします。3.5「X.509証明書の設定」を参照してください。
Platform Agentサービスを起動します。3.6「Platform API ServerとPlatform Agentサービスの起動」を参照してください。
これらの作業を完了したら、この手順の説明を使用してKubernetesクラスタにノードを追加します。
Kubernetesクラスタをスケール・アップするには:
Kubernetesクラスタのマスター・ノードからkubectl get nodesコマンドを使用して、クラスタのマスター・ノードとワーカー・ノードを確認します。
$
kubectl get nodes
NAME STATUS ROLE AGE VERSION master1.example.com Ready master 26h v1.17.x+x.x.x.el7 master2.example.com Ready master 26h v1.17.x+x.x.x.el7 master3.example.com Ready master 26h v1.17.x+x.x.x.el7 worker1.example.com Ready <none> 26h v1.17.x+x.x.x.el7 worker2.example.com Ready <none> 26h v1.17.x+x.x.x.el7 worker3.example.com Ready <none> 26h v1.17.x+x.x.x.el7この例では、Kubernetesクラスタに3つのマスター・ノードがあります。
master1.example.com
master2.example.com
master3.example.com
また、このクラスタには3つのワーカー・ノードもあります。
worker1.example.com
worker2.example.com
worker3.example.com
スケール・アップによってKubernetesクラスタを更新するには、olcnectl module updateコマンドを使用します。
たとえば、
mycluster
というkubernetes
モジュールに、マスター・ノードmaster4.example.com
と、ワーカー・ノードworker4.example.com
およびworker5.example.com
を追加するには、Kubernetesクラスタのオペレータ・ノードにアクセスして、次のコマンドを実行します。$
olcnectl --api-server 127.0.0.1:8091 module update --environment-name myenvironment \ --name mycluster \ --master-nodes master1.example.com:8090,master2.example.com:8090,master3.example.com:8090,\ master4.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
この例では、マスター・ノードが4つ、ワーカー・ノードが5つになるようにKubernetesクラスタをスケール・アップしています。シングル・マスターからマルチ・マスターのクラスタにスケール・アップする場合は、そのクラスタにロード・バランサを指定していることを確認してください。ロード・バランサを指定していないと、マスター・ノードのスケール・アップはできません。
Kubernetesクラスタのスケーリング時には、その他にも役立つことがあるオプションがあります。次の例では、より複雑なクラスタのスケーリング方法を示しています。
$
olcnectl --api-server 127.0.0.1:8091 module update --environment-name myenvironment \ --name mycluster \ --master-nodes master1.example.com:8090,master2.example.com:8090,master3.example.com:8090,\ master4.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 \ --force
--generate-scripts
オプションでは、スケーリング時に検証の失敗が発生した場合に、ノードごとに実行できるスクリプトを生成します。スクリプトはモジュール内のノードごとに作成され、ローカル・ディレクトリに
という名前で保存されます。hostname
:8090.sh--force
オプションは、クラスタのスケーリングを続行するかどうかを確認するプロンプトを非表示にします。Kubernetesクラスタのマスター・ノードに戻ってから、kubectl get nodesコマンドを使用して、新しいマスター・ノードとワーカー・ノードを取り込んでクラスタがスケール・アップされたことを確認します。
$
kubectl get nodes
NAME STATUS ROLE AGE VERSION master1.example.com Ready master 26h v1.17.x+x.x.x.el7 master2.example.com Ready master 26h v1.17.x+x.x.x.el7 master3.example.com Ready master 26h v1.17.x+x.x.x.el7 master4.example.com Ready master 2m38s v1.17.x+x.x.x.el7 worker1.example.com Ready <none> 26h v1.17.x+x.x.x.el7 worker2.example.com Ready <none> 26h v1.17.x+x.x.x.el7 worker3.example.com Ready <none> 26h v1.17.x+x.x.x.el7 worker4.example.com Ready <none> 2m38s v1.17.x+x.x.x.el7 worker5.example.com Ready <none> 2m38s v1.17.x+x.x.x.el7