ルートベース クラスタの作成


このページでは、Google Kubernetes Engine でルートベース クラスタを作成する方法について説明します。

概要

Google Kubernetes Engine では、ある Pod から別の Pod にトラフィックをルーティングする方法によってクラスタを区別できます。Google Cloud のルートを使用するクラスタは、ルートベース クラスタと呼ばれています。エイリアス IP を使用するクラスタは、VPC ネイティブ クラスタと呼ばれています。

VPC ネイティブは推奨のタイプであり、新しいクラスタのデフォルトです。ルートベース クラスタを作成するには、VPC ネイティブ オプションを明示的にオフにする必要があります。

始める前に

作業を始める前に、次のことを確認してください。

次のいずれかの方法で gcloud のデフォルトの設定を指定します。

  • gcloud init。デフォルトの設定全般を確認する場合に使用します。
  • gcloud config。プロジェクト ID、ゾーン、リージョンを個別に設定する場合に使用します。

gcloud init の使用

エラー One of [--zone, --region] must be supplied: Please specify location を受信した場合は、このセクションの内容を実施します。

  1. gcloud init を実行して、次の操作を行います。

    gcloud init

    リモート サーバーで SSH を使用している場合は、--console-only フラグを指定して、コマンドがブラウザを起動しないようにします。

    gcloud init --console-only
  2. 手順に従って gcloud を承認し、Google Cloud アカウントを使用します。
  3. 新しい構成を作成するか、既存の構成を選択します。
  4. Google Cloud プロジェクトを選択します。
  5. ゾーンクラスタの場合はデフォルトの Compute Engine ゾーン、リージョン クラスタまたは Autopilot クラスタの場合はデフォルトの Compute Engine リージョンを選択します。

gcloud config の使用

  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project PROJECT_ID
  • ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone COMPUTE_ZONE
  • Autopilot クラスタまたはリージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
    gcloud config set compute/region COMPUTE_REGION
  • gcloud を最新バージョンに更新します。
    gcloud components update

ルートベースのクラスタの作成

gcloud ツールや Google Cloud Console を使用して、ルートベース クラスタを作成できます。

gcloud

ルートベースのクラスタを作成するには、クラスタ作成コマンドに --no-enable-ip-alias フラグを追加します。

gcloud container clusters create [CLUSTER_NAME] --no-enable-ip-alias

ここで、[CLUSTER_NAME] はクラスタに付ける名前です。

Console

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. [ 作成] をクリックします。

  3. クラスタの名前を入力します。

  4. ナビゲーション パネルの [クラスタ] の下の [ネットワーキング] をクリックします。

  5. [高度なネットワーキングのオプション] で、[VPC ネイティブのトラフィック ルーティングを有効にする(エイリアス IP を使用)] チェックボックスをオフにします。

  6. [作成] をクリックします。

クラスタがルートを使用していることを確認する

gcloud

クラスタノードを一覧表示します。

kubectl get nodes

ノードの名前が出力に表示されます。

NAME                                 STATUS   ...     AGE    VERSION
gke-xxx-default-pool-83e239a7-kcg8   Ready    ...     42m    v1.9.7-gke.6
gke-xxx-default-pool-83e239a7-qm6b   Ready    ...     42m    v1.9.7-gke.6
gke-xxx-default-pool-83e239a7-wnrq   Ready    ...     42m    1.9.7-gke.6

ルートを一覧表示します。

gcloud compute routes list

出力の NEXT_HOP 列で、いずれかのクラスタノードの名前を探します。

NAME                 NETWORK        DEST_RANGE         NEXT_HOP
...
[ROUTE_NAME]         default        10.24.0.0/24       [YOUR_NODE_NAME]
...

出力では、ルートが特定のポッドアドレス範囲を宛先とするすべてのパケットに対して 1 つのネクストホップを提供していることがわかります。

Console

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. クラスタリストで、検査するクラスタの名前をクリックします。

  3. [クラスタの詳細] ページで [ノード] タブをクリックします。

  4. [ノード] セクションで、任意のノードの名前をメモします。

  5. Cloud Console の [ルート] ページにアクセスします。

    [ルート] ページに移動

  6. ルートの一覧の [ネクストホップ] 列で、いずれかのクラスタノードの名前を探します。その行のルート名をクリックします。

  7. [ルートの詳細] ページで [ネクストホップ] セクションを確認し、ルートが特定の Pod アドレス範囲宛てのパケットにネクストホップを提供していることを確認します。

ノードあたりの Pod 数

ルートベースのクラスタでは、各ノードのポッドに対して IP アドレスの /24 の範囲が割り当てられます。/24 の範囲では、256 個のアドレスが存在しますが、ノードあたりの最大ポッド数は 110 です。指定できるポッドの約 2 倍の数の利用可能な IP アドレスを指定すると、ポッドがノードに追加されたりノードから削除されたりするときに、Kubernetes での IP アドレスの再利用が楽になります。

ポッドのアドレス範囲

ルートベースのクラスタには、ポッドとサービスのために使用される IP アドレスの範囲が存在します。この範囲はポッドとサービスの両方に使用されますが、ポッドアドレス範囲と呼ばれています。ポッドアドレス範囲の最後の /20 がサービスに使用されます。/20 の範囲の場合、212 = 4,096 個のアドレスが存在します。そのため、4,096 個のアドレスがサービスに使用され、残りの範囲はポッドに使用されます。

コマンド出力では、ポッドアドレス範囲は clusterIpv4Cidr と呼ばれ、サービスに使用されるアドレス範囲は servicesIpv4Cidr と呼ばれます。たとえば、gcloud container clusters describe の出力には次のような出力が含まれます。

clusterIpv4Cidr: 10.96.0.0/16
...
servicesIpv4Cidr: 10.96.240.0/20

GKE バージョン 1.7 以降の場合、ポッドアドレス範囲は任意の RFC 1918 ブロック(10.0.0.0/8、172.16.0.0/12、または 192.168.0.0/16)から指定できます。以前のバージョンでは、ポッドアドレス範囲は 10.0.0.0/8 から指定する必要があります。

CIDR 範囲を指定して、ポッドアドレス範囲をカスタマイズできます。たとえば、10.96.0.0/16 の範囲を指定できます。

gcloud

gcloud container clusters create [CLUSTER_NAME] --no-enable-ip-alias \
    --cluster-ipv4-cidr 10.96.0.0/16

ここで、[CLUSTER_NAME] はクラスタに付ける名前です。

Console

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. [ 作成] をクリックします。

  3. クラスタの名前を入力します。

  4. ナビゲーション パネルの [クラスタ] の下の [ネットワーキング] をクリックします。

  5. [高度なネットワーキングのオプション] で、[VPC ネイティブのトラフィック ルーティングを有効にする(エイリアス IP を使用)] チェックボックスをオフにします。

  6. [Pod のアドレス範囲] フィールドに「10.96.0.0/16」と入力します。

  7. [作成] をクリックします。

クラスタのサイズに関する考慮事項

所定の GKE クラスタのノード、ポッド、サービスの最大数は、クラスタ サブネットのサイズとポッドアドレス範囲のサイズによって決まります。ポッドアドレス範囲のサイズは、クラスタを作成した後は変更できません。クラスタを作成する際、クラスタの予想される増大に対応できる十分な大きさのポッドアドレス範囲を選択するようにしてください。

次の表は、900 ノードのクラスタに十分なアドレス範囲を選択する方法を説明しています。

範囲 ガイダンス
ノード

ノード IP アドレスは、クラスタ サブネットのプライマリ範囲から取得されます。クラスタ サブネットは、クラスタ内のノードの総数を保持するのに十分な大きさである必要があります。

たとえば、900 ノードのクラスタを作成する予定であれば、クラスタ サブネットは少なくとも /22 のサイズである必要があります。/22 の範囲の場合、210 = 1,024 個のアドレスが存在します。4 個の予約済み IP アドレスを差し引くと 1,020 個になり、これは 900 ノードに対して十分です。

ポッドのアドレス範囲

各ノードには、ポッド用に IP アドレスの /24 の範囲があります。/24 の範囲の場合、28 = 256 個のアドレスが存在します。ポッドアドレス範囲内の 4,096 個のアドレスがサービスに使用されていることを思い出してください。ポッドアドレス範囲の残りの部分はポッド用に使用され、ノード数 x 256 個のアドレスを保持するのに十分な大きさでなければなりません。

たとえば、900 ノードのクラスタを作成するとします。その場合、ポッド用に 900 x 256 = 230,400 個のアドレスが必要です。今度は /14 のポッドアドレス範囲があるとします。/14 の範囲の場合、218 = 262,144 個のアドレスが存在します。サービスに使用される 4,096 個のアドレスを引くと、258,048 になります。これは 900 ノードに対して十分です。

範囲サイズのデフォルトと制限

次の表は、クラスタ サブネットとポッドアドレス範囲の最小、最大、およびデフォルトのサイズを示しています。

範囲 デフォルト サイズ 最小サイズ 最大サイズ
ノード

/20、つまり 212 = 4,096 個のアドレス。4 個の予約済みアドレスを差し引くと、ノード用のアドレスは 4,092 個です。

/29、つまり 23 = 8 個のアドレス。4 個の予約済みアドレスを差し引くと、ノード用のアドレスは 4 個です。

/7、つまり 225 個のアドレス。これはノードに対して約 3,300 万個のアドレスです。

ポッドのアドレス範囲

/14、つまり 218 = 262,144 個のアドレス。

/19、つまり 213 = 8,192 個のアドレス。

/9、つまり 223 = 8,388,608 個のアドレス。

制限事項

  • VPC ネイティブ クラスタは、ルートベースのクラスタに移行できません。
  • ルートベース クラスタは、VPC ネイティブ クラスタに移行できません。
  • ルートベース クラスタでは、プライベート IP アドレスに RFC 1918 範囲のアドレスのみを使用できます。VPC ネイティブ クラスタでは、より広い範囲のアドレスが使用可能です。

次のステップ