最小限のインフラストラクチャを設定する

このドキュメントでは、Anthos clusters on VMware(GKE On-Prem)の小規模な概念実証用のインストールのために、最小限の vSphere 環境と Google Cloud 環境を設定する方法について説明します。

インストールには、管理ワークステーション、管理クラスタ、ユーザー クラスタが含まれます。

始める前に

CPU、RAM、ストレージの要件

この最小限のインストールでは、ESXi を実行する単一の物理ホストを使用できます。

ESXi ホストの最小リソース要件は次のとおりです。

  • 8 つの物理的な、2.7 Ghz でハイパースレッディングが有効なCPU
  • 80 ギビバイト(GiB)の RAM

最小ストレージ要件は 470 GiB です。

ホストとデータストアの例

要件を満たす ESXi ホストvSphere データストアの例を次に示します。

  • ESXi ホスト構成:

    • メーカー: Dell Inc.
    • 物理 CPU: 8 つの 2.7 GHz の CPU
    • プロセッサ タイプ: 2.70 GHz の Intel(R) Xeon(R) Platinum 8168 CPU
    • プロセッサ ソケット: 2
    • ESXi バージョン: 6.7U3
    • Vcenter Server のバージョン: 6.7U3
    • ハイパースレッディング: 有効
  • Datastore 構成:

    • タイプ: VMFS 6.82
    • ドライブの種類: SSD
    • ベンダー: DELL
    • ドライブの種類: ロジカル
    • RAID レベル: RAID1

vSphere オブジェクト

vSphere 環境で次のオブジェクトを設定します。

負荷分散

この最小限のインストールのクラスタでは、MetalLB ロードバランサを使用します。このロードバランサはクラスタノード上で実行されるため、ロード バランシング用の追加の VM は必要ありません。

IP アドレスを計画する

後で基本クラスタを作成するときに、クラスタノードの静的 IP アドレスを指定します。

この小規模なインストールでは、管理ワークステーション、管理クラスタノード、ユーザー クラスタノードを vSphere ネットワークの同じ VLAN に配置することをおすすめします。たとえば、172.16.20.0/24 の範囲内のすべての IP アドレスが特定の VLAN にルーティングされているとします。また、ネットワーク管理者は、VM と仮想 IP アドレス(VIP)に 172.16.20.49~172.16.20.72 を使用できると説明しているとします。

次の図は、管理ワークステーション、管理クラスタ、ユーザー クラスタがある VLAN を示しています。VIP は、クラスタ内の特定のノードに関連付けられてはいません。これは、MetaLB のロードバランサが個々の Service の VIP をアナウンスするノードを選択できるためです。たとえば、ユーザー クラスタで、1 つのワーカーノードが 172.16.20.63 をアナウンスし、別のワーカーノードが 172.16.20.64 をアナウンスできます。

管理クラスタとユーザー クラスタの IP アドレス。
管理クラスタとユーザー クラスタの IP アドレス(クリックして拡大)

IP アドレスの例: 管理ワークステーション

管理ワークステーションに対して、この例では、ネットワーク管理者から指定された範囲の最初のアドレス(172.16.20.49)を使用しています。

IP アドレスの例: クラスタノード

次の表は、クラスタノードで IP アドレスを使用する例を示しています。この表では、admin-vm-5 と user-vm-4 の 2 つのノードが追加で示されています。その追加のノードは、クラスタのアップグレード、更新、自動修復の際に必要です。詳細については、ノード IP アドレスの管理をご覧ください。

VM ホスト名 Description IP アドレス
admin-vm-1 管理クラスタのコントロール プレーン ノード 172.16.20.50
admin-vm-2 管理クラスタのアドオンノード 172.16.20.51
admin-vm-3 管理クラスタのアドオンノード 172.16.20.52
admin-vm-4 ユーザー クラスタのコントロール プレーン ノード。
このノードは管理クラスタに配置されています。
172.16.20.53
admin-vm-5 172.16.20.54
user-vm-1 usercluster.workernode 172.16.20.55
user-vm-2 usercluster.workernode 172.16.20.56
user-vm-3 usercluster.workernode 172.16.20.57
user-vm-4 172.16.20.58

IP アドレスの例: 管理クラスタの VIP

次の表に、管理クラスタの VIP を指定方法の例を示します。

VIP Description IP アドレス
管理クラスタの Kubernetes API サーバーの VIP 管理クラスタのロードバランサで構成 172.16.20.59
管理クラスタ アドオン VIP 管理クラスタのロードバランサで構成 172.16.20.60

IP アドレスの例: ユーザー クラスタの VIP

次の表に、ユーザー クラスタの VIP を指定方法の例を示します。

ユーザー クラスタの Kubernetes API サーバーの VIP は、管理クラスタのロードバランサで構成されています。これは、ユーザー クラスタの Kubernetes API サーバーは管理クラスタ内のノードで実行されるためです。クラスタ構成ファイルで指定するフィールドで、Kubernetes API サーバーの VIP は controlPlaneVIP と呼ばれます。

VIP Description IP アドレス
ユーザー クラスタの Kubernetes API サーバーの VIP 管理クラスタのロードバランサで構成 172.16.20.61
Ingress VIP ユーザー クラスタのロードバランサで構成 172.16.20.62
サービス VIP LoadBalancer タイプの Service 用の 10 個のアドレス。
必要に応じて、ユーザー クラスタのロードバランサで構成されます。
この範囲には上り(内向き)VIP が含まれます。
これは MetalLB ロードバランサの要件です。
172.16.20.62 - 172.16.20.71

Pod と Service の IP アドレス

クラスタを作成する前に、Pod の IP アドレス用に CIDR 範囲を、また Kubernetes Services の ClusterIP アドレス用に別の CIDR 範囲を指定する必要があります。

Pod と Service に使用する CIDR 範囲を決定します。特に理由がない限り、次のデフォルト範囲を使用できます。

目的デフォルトの CIDR 範囲
管理クラスタ Pod192.168.0.0/16
ユーザー クラスタ Pod192.168.0.0/16
管理クラスタ Service10.96.232.0/24
ユーザー クラスタ サービス10.96.0.0/20

デフォルト値はこれらの点を表しています。

  • Pod CIDR 範囲は、複数のクラスタで同じにできます。

  • クラスタの Service CIDR 範囲は、他のクラスタの Service CIDR 範囲と重複しないようにする必要があります。

  • 通常、Service よりも多くの Pod が必要であるため、特定のクラスタでは Service CIDR 範囲よりも広い Pod CIDR 範囲が必要になる場合があります。たとえば、ユーザー クラスタのデフォルトの Pod 範囲は 2^(32-16) = 2^16 個のアドレスですが、ユーザー クラスタのデフォルト Service 範囲は 2^(32-20) = 2^12 個のアドレスのみです。

重複を回避する

ネットワークで到達可能な IP アドレスと重複しないように、デフォルト以外の CIDR 範囲の使用が必要になる場合があります。Service と Pod の範囲は、クラスタ内から到達可能にする必要があるクラスタ外のアドレスと重複しないようにしてください。

たとえば、Service の範囲が 10.96.232.0/24、Pod の範囲が 192.168.0.0/16 であるとします。Pod からいずれかの範囲のアドレスに送信されたトラフィックは、クラスタ内として扱われ、クラスタ外の宛先に到達しません。

特に、Service と Pod の範囲が次の対象と重複しないようにする必要があります。

  • 任意のクラスタ内に存在するノードの IP アドレス

  • ロードバランサ マシンで使用される IP アドレス

  • コントロール プレーン ノードとロードバランサで使用される VIP

  • vCenter Server、DNS サーバー、NTP サーバーの IP アドレス

Pod と Service の範囲には、RFC 1918 で定義されているプライベート IP アドレス範囲を使用することをおすすめします。

RFC 1918 アドレスを使用することが推奨される理由の 1 つは次のとおりです。Pod または Service の範囲に外部 IP アドレスが含まれているとします。Pod からそれらの外部アドレスのいずれかに送信されたトラフィックは、クラスタ内トラフィックとして扱われ、外部の宛先に到達しません。

DNS サーバーとデフォルト ゲートウェイ

管理者クラスタとユーザー クラスタを作成する前に、次の IP アドレスを把握している必要があります。

  • 管理ワークステーションとクラスタノードで使用できる DNS サーバー

  • 管理ワークステーションとクラスタノードを持つサブネットのデフォルト ゲートウェイの IP アドレス。たとえば、管理ワークステーション、管理クラスタノード、ユーザー クラスタノードがすべて 172.16.20.0/24 のサブネットにあるとします。サブネットのデフォルト ゲートウェイのアドレスは、172.16.20.1 になる可能性があります。

ファイアウォールとプロキシを構成する

プロキシとファイアウォール ルールに従ってファイアウォールとプロキシを構成します。

Google Cloud リソースの設定

既存の Google Cloud プロジェクトを選択するか、プロジェクトを新規作成します。Cloud プロジェクト ID をメモします。

Cloud プロジェクトで、Anthos clusters on VMware コンポーネントにアクセスするためのサービス アカウントを作成します。これは、コンポーネント アクセス サービス アカウントと呼ばれます。

gcloud iam service-accounts create component-access-sa \
    --display-name "Component Access Service Account" \
    --project PROJECT_ID

PROJECT_ID は、実際の Cloud プロジェクトの ID に置き換えます。

コンポーネント アクセス サービス アカウントの JSON キーを作成するには、次のコマンドを実行します。

gcloud iam service-accounts keys create component-access-key.json \
   --iam-account SERVICE_ACCOUNT_EMAIL

SERVICE_ACCOUNT_EMAIL は、コンポーネント アクセス サービス アカウントのメールアドレスに置き換えます。

IAM ロールをコンポーネント アクセス サービス アカウントに付与します。

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \
    --role "roles/serviceusage.serviceUsageViewer"
gcloud projects add-iam-policy-binding PROJECT_ID \
    --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \
    --role "roles/iam.roleViewer"
gcloud projects add-iam-policy-binding PROJECT_ID \
    --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \
    --role "roles/iam.serviceAccountViewer"

コンポーネント アクセス サービス アカウントと IAM ロールの付与の詳細については、サービス アカウントとキーをご覧ください。

Google API を有効にする

Cloud プロジェクトで、次の Google API を有効にします。

gcloud services enable --project PROJECT_ID \
    anthos.googleapis.com \
    anthosgke.googleapis.com \
    anthosaudit.googleapis.com \
    cloudresourcemanager.googleapis.com \
    container.googleapis.com \
    gkeconnect.googleapis.com \
    gkehub.googleapis.com \
    serviceusage.googleapis.com \
    stackdriver.googleapis.com \
    opsconfigmonitoring.googleapis.com \
    monitoring.googleapis.com \
    logging.googleapis.com \
    iam.googleapis.com \
    storage.googleapis.com
 

次のステップ

基本クラスタを作成する