専用ノードプールを構成する

ノードプールについて

ノードプールとは、同じクラスタ内のすべて同一に構成されたノードのグループです。通常、リソース要件が異なるポッドがある場合は、別々のノードプールを定義します。たとえば、apigee-cassandra ポッドには永続ストレージが必要ですが、その他の Apigee Hybrid ポッドには永続ストレージは必要ありません。

このトピックでは、Hybrid インストール環境に専用ノードプールを構成する方法について説明します。

デフォルトの nodeSelector の使用

おすすめの方法は、Cassandra ポッド用とその他すべてのランタイム ポッド用に 1 つずつ、計 2 つの専用ノードプールを用意することです。インストール時にデフォルトの nodeSelector 構成を使用すると、Cassandra ポッドは apigee-data というステートフル ノードプールに割り当てられ、その他すべてのポッドは apigee-runtime というステートレス ノードプールに割り当てられます。これらの名前を持つノードプールを作成するだけで、ポッドのスケジューリングの詳細が自動的に処理されます。

デフォルトのノードプール名 説明
apigee-data ステートフル ノードプール。
apigee-runtime ステートレス ノードプール。

次にデフォルトの nodeSelector 構成を示します。apigeeData プロパティは、Cassandra ポッドのノードプールを指定します。apigeeRuntime は、その他すべてのポッドのノードプールを指定します。後述するように、これらのデフォルト設定をオーバーライド ファイルで変更できます。

nodeSelector:
      requiredForScheduling: false
      apigeeRuntime:
        key: "cloud.google.com/gke-nodepool"
        value: "apigee-runtime"
      apigeeData:
        key: "cloud.google.com/gke-nodepool"
        value: "apigee-data"

重ねて言いますが、ポッドが正しいノードでスケジュールされるようにするために必要な作業は、apigee-dataapigee-runtime という名前で 2 つのノードプールを作成することだけです。

requiredForScheduling プロパティ

nodeSelector 構成セクションには requiredForScheduling というプロパティがあります。

nodeSelector:
      requiredForScheduling: false
      apigeeRuntime:
        key: "cloud.google.com/gke-nodepool"
        value: "apigee-runtime"
      apigeeData:
        key: "cloud.google.com/gke-nodepool"
        value: "apigee-data"
これが false(デフォルト)に設定されている場合、基になるポッドは、ノードプールが必要な名前で定義されているかどうかにかかわらずスケジュールされます。つまり、ノードプールを作成し忘れた場合や、誤ってノードプールに apigee-runtime または apigee-data 以外の名前を付けてしまった場合でも、Hybrid ランタイムは正常に機能します。ポッドがどこで実行されるかは Kubernetes によって決定されます。

requiredForSchedulingtrue に設定すると、nodeSelector に設定されたキーと値に一致するノードプールが存在しない場合、Hybrid ランタイムは機能しません。

カスタム ノードプール名の使用

ノードプールの名前をデフォルトとは異なる名前にする場合は、カスタム名を持つノードプールを作成し、それらの名前を nodeSelector スタンザで指定します。たとえば、次の構成では、Cassandra ポッドを my-cassandra-pool というノードプールに割り当て、その他すべてのポッドを my-runtime-pool というノードプールに割り当てています。

nodeSelector:
      requiredForScheduling: false
      apigeeRuntime:
        key: "cloud.google.com/gke-nodepool"
        value: "my-runtime-pool"
      apigeeData:
        key: "cloud.google.com/gke-nodepool"
        value: "my-cassandra-pool"

GKE 上の特定のコンポーネント用のノードプールをオーバーライドする

ノードプールの構成を個々のコンポーネント レベルでオーバーライドすることもできます。たとえば、次の構成では、値が apigee-custom であるノードプールを runtime コンポーネントに割り当てています。

runtime:
      nodeSelector:
        key: cloud.google.com/gke-nodepool
        value: apigee-custom

カスタム ノードプールは次のコンポーネントで指定できます。

  • istio
  • mart
  • synchronizer
  • runtime
  • cassandra
  • udca
  • logger

GKE ノードプール構成

GKE では、ノードプールの作成時に一意の名前を付ける必要があります。そうすると、各ノードに自動的に次のようなラベルが付けられます。

cloud.google.com/gke-nodepool=the_node_pool_name

ノードプールを apigee-dataapigee-runtime という名前で作成する場合には、それ以上の構成は必要ありません。カスタムノード名を使用する場合は、カスタム ノードプール名の使用をご覧ください。

Anthos ノードプール構成

Apigee Hybrid は現在、Anthos 1.1.1 でのみサポートされています。このバージョンの Anthos はノードプール機能をサポートしていません。そのため、次の手順に従ってワーカーノードに手動でラベルを付ける必要があります。Hybrid クラスタが稼働した後、次の手順を行います。

  1. 次のコマンドを実行して、クラスタ内のワーカーノードのリストを取得します。
    kubectl -n apigee get nodes

    出力例:

    NAME                   STATUS   ROLES    AGE     VERSION
        apigee-092d639a-4hqt   Ready       7d      v1.14.6-gke.2
        apigee-092d639a-ffd0   Ready       7d      v1.14.6-gke.2
        apigee-109b55fc-5tjf   Ready       7d      v1.14.6-gke.2
        apigee-c2a9203a-8h27   Ready       7d      v1.14.6-gke.2
        apigee-c70aedae-t366   Ready       7d      v1.14.6-gke.2
        apigee-d349e89b-hv2b   Ready       7d      v1.14.6-gke.2
        
  2. 各ノードにラベルを付けてランタイム ノードとデータノードを区別します。

    ノードにラベルを付けるには、次のコマンドを使用します。

    kubectl label node node_name key=value

    次に例を示します。

        $ kubectl label node apigee-092d639a-4hqt apigee.com/apigee-nodepool=apigee-runtime
        $ kubectl label node apigee-092d639a-ffd0 apigee.com/apigee-nodepool=apigee-runtime
        $ kubectl label node apigee-109b55fc-5tjf apigee.com/apigee-nodepool=apigee-runtime
        $ kubectl label node apigee-c2a9203a-8h27 apigee.com/apigee-nodepool=apigee-data
        $ kubectl label node apigee-c70aedae-t366 apigee.com/apigee-nodepool=apigee-data
        $ kubectl label node apigee-d349e89b-hv2b apigee.com/apigee-nodepool=apigee-data
        

Anthos GKE 上の特定のコンポーネント用のノードプールをオーバーライドする

ノードプールの構成を Anthos GKE 上の個々のコンポーネント レベルでオーバーライドすることもできます。たとえば、次の構成では、値が apigee-custom であるノードプールを runtime コンポーネントに割り当てています。

runtime:
      nodeSelector:
        key: apigee.com/apigee-nodepool
        value: apigee-custom

カスタム ノードプールは次のコンポーネントで指定できます。

  • istio
  • mart
  • synchronizer
  • runtime
  • cassandra
  • udca
  • logger