4.7 Kubernetesクラスタのスケーリング

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クラスタのスケーリング時には、次の作業を実行します。

  1. クラスタのバックアップを作成します。スケール・アップまたはスケール・ダウンの実行中に問題が発生した場合(クラスタのスケーリング中の障害発生など)、クラスタをリストアできるようにしておくことで前の状態に戻せるようになります。Kubernetesクラスタのバックアップとリストアの詳細は、コンテナ・オーケストレーションを参照してください。

  2. クラスタに追加するノードを検証します。ノードの検証に問題があると(ファイアウォールの問題など)、クラスタの更新が続行できなくなり、そのノードはクラスタに追加できなくなります。クラスタにノードを追加できるようにするために、検証の問題を解決する操作を求めるプロンプトが表示されます。

  3. マスター・ノードおよびワーカー・ノードをクラスタに追加するか、クラスタから削除します。

  4. すべての新しいノードと既存のノードが正常に動作していることを確認するために、クラスタを検査します。クラスタの検証が完了したら、クラスタをスケーリングして、そのクラスタにアクセスします。

次の手順では、Kubernetesクラスタのスケール・アップおよびスケール・ダウンの方法について説明します。

4.7.1 Kubernetesクラスタのスケール・アップ

Kubernetesクラスタのスケール・アップ前に、新しいノードをクラスタに追加できるように設定します。

ノードを準備するには:

  1. Oracle Linux Cloud Native Environmentに追加できるように、ノードを設定します。3.4.2「Kubernetesノードの設定」を参照してください。

  2. ノードのX.509証明書を設定して、そのノードとKubernetesクラスタの別のノードとの安全な通信ができるようにします。3.5「X.509証明書の設定」を参照してください。

  3. Platform Agentサービスを起動します。3.6「Platform API ServerとPlatform Agentサービスの起動」を参照してください。

これらの作業を完了したら、この手順の説明を使用してKubernetesクラスタにノードを追加します。

Kubernetesクラスタをスケール・アップするには:

  1. 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

  2. スケール・アップによって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オプションは、クラスタのスケーリングを続行するかどうかを確認するプロンプトを非表示にします。

  3. 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