これは、単一のユーザー クラスタを使用した GKE on VMware の小規模な概念実証のインストール方法を説明するガイドの最初のステップです。
このドキュメントでは、このインストール用に最小限の vSphere 環境と Google Cloud 環境を設定し、IP アドレスを計画する方法について説明します。また、フォローアップの基本的なクラスタの作成では、管理ワークステーション、管理クラスタ、ユーザー クラスタを作成する方法について説明します。
このガイドに沿って設定したインフラストラクチャは、実際の本番環境でのニーズやユースケースに適していない可能性があります。本番環境インストールの詳細については、インストールの概要とガイドをご覧ください。
準備
GKE on VMware の概要で、GKE on VMware の仕組みの概要(この設定でインストールする各コンポーネントの役割など)を確認します。
vSphere でサポートされるバージョンをご覧ください。
vSphere ライセンスの要件をご覧ください。この最小限のインストールでは、vSphere Standard ライセンスで十分です。
vCenter Server の実行中のインスタンスが必要です。
十分な権限を持つ vCenter ユーザー アカウントが必要です。このアカウントのユーザー名とパスワードをメモしておきます。
Google Cloud の基本的なコンセプト(プロジェクト、IAM 権限、サービス アカウントなど)についてよく理解しておく必要があります。理解していない場合は、次のガイドをご覧ください。
手順の概要
この設定における主な手順は次の通りです。
- 環境を設定します。リソースの要件を満たしていることを確認します。ここでは、このインストールの要件を満たす ESXi ホストと vSphere データストアの構成例が示されます。
- vSphere オブジェクトを設定します。GKE on VMware コンポーネントは、vSphere オブジェクト階層内で実行されます。
- IP アドレスを計画します。GKE on VMware では、デプロイメントへの管理者アクセスおよびユーザー アクセス用に、仮想 IP アドレス(VIP)に加えて、すべてのノードの IP アドレスを指定する必要があります。この設定では、クラスタノードに静的 IP アドレスを使用します。例が示されますが、自分のネットワークに適したアドレスを選択するために、ネットワーク管理者に相談することをおすすめします。
- ファイアウォール ルールとプロキシルールを構成します
- Google Cloud リソースを設定します。これには、GKE on VMware を設定、管理する際に使用する Google Cloud プロジェクト、および GKE on VMware のコンポーネント ソフトウェアにアクセスしてダウンロードするために必要な権限を持つサービス アカウントが含まれます。
1. 環境を設定する
この最小限のインストールでは、ESXi を実行する単一の物理ホストを使用できます。
ホストに次の CPU、RAM、ストレージの最小容量があることを確認します。
- 8 つの物理的な、2.7 Ghz でハイパースレッディングが有効なCPU
- 80 ギビバイト(GiB)の RAM
- 128 GiB のストレージ
ESXi バージョン 7.0u2 以降がインストールされていることを確認します。
vCenter Server バージョン 7.0u2 以降を使用していることを確認します。
ホストとデータストアの例
要件を満たす ESXi ホストと vSphere データストアの例を次に示します。
ESXi ホスト構成:
- メーカー: Dell Inc.
- 物理 CPU: 8 つの 2.7 GHz の CPU
- プロセッサ タイプ: 2.70 GHz の Intel(R) Xeon(R) Platinum 8168 CPU
- プロセッサ ソケット: 2
- ESXi のバージョン: 7.0u2 以降
- vCenter Server のバージョン: 7.0u2 以上
- ハイパースレッディング: 有効
Datastore 構成:
- タイプ: VMFS 6.82
- ドライブの種類: SSD
- ベンダー: DELL
- ドライブの種類: ロジカル
- RAID レベル: RAID1
2. vSphere オブジェクトを設定する
vSphere 環境で次のオブジェクトを設定します。
vSphere のデータセンター、クラスタ、データストア、ネットワーク名をメモします。これらは、基本クラスタを作成するで管理ワークステーションを設定するときに必要になります。
vSAN データストアを設定している場合は、govc
を使用して datastore
ディレクトリにフォルダを作成し、GKE on VMware の仮想マシンディスク(VMDK)に使用します。
govc datastore.mkdir -namespace=true data-disks
3. IP アドレスを計画する
GKE on VMware の概要で説明したように、GKE on VMware のインストールには、次のような多くの IP アドレスが必要です。
- すべてのノード用の IP アドレス
- Kubernetes API サーバーなどのコントロール プレーン コンポーネントとユーザー クラスタ上で実行されるアプリケーションにアクセスするための仮想 IP アドレス(VIP)
- Pod と Service 間の通信用の CIDR 範囲
このため、GKE on VMware を設定するうえで重要な部分は、IP アドレスを計画することです。これには、アドレスの競合が発生しないか確認することも含まれます。この単純なインストールの場合でも、構成のための適切な値を見つけるには、ネットワーク管理者の協力が必要になる場合があります。このセクションの残りの部分では、架空のネットワークでこのインストールが機能する値の具体例を紹介します(実際の値は異なります)。
この最小限のインストールのクラスタでは、バンドル型 MetalLB ロードバランサを使用します。このロードバランサはクラスタノード上で実行されるため、ロード バランシング用の追加の VM は必要ありません。
GKE on VMware では、クラスタノードの静的 IP アドレスを指定するか、DHCP サーバーを使用するかを選択できます。この単純なインストールでは、静的 IP アドレスを使用します。
VLAN の例
この小規模なインストールでは、管理ワークステーション、管理クラスタノード、ユーザー クラスタノードを 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 アドレスの例: 管理ワークステーション
管理ワークステーションに対して、この例では、ネットワーク管理者から指定された範囲の最初のアドレス(172.16.20.49)を使用しています。
IP アドレスの例: クラスタノード
次の表は、クラスタノードで IP アドレスを使用する例を示しています。この表では、2 つの追加ノード(admin-vm-4 と user-vm-5)のアドレスが表示されています。この追加のノードはクラスタのアップグレード、更新、自動修復中に必要になります。 詳細については、ノード 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 | |
user-vm-1 | ユーザー クラスタのコントロール プレーン ノード。 | 172.16.20.54 |
user-vm-2 | ユーザー クラスタのワーカーノード | 172.16.20.55 |
user-vm-3 | ユーザー クラスタのワーカーノード | 172.16.20.56 |
user-vm-4 | ユーザー クラスタのワーカーノード | 172.16.20.57 |
user-vm-5 | 172.16.20.58 |
IP アドレスの例: 管理クラスタの VIP
次の表に、管理クラスタの VIP を指定方法の例を示します。この簡単な例では、オプションのアドオン VIP ではなく、コントロール プレーン VIP を指定しています。
VIP | Description | IP アドレス |
---|---|---|
管理クラスタの Kubernetes API サーバーの VIP | 管理クラスタのロードバランサで構成。 | 172.16.20.59 |
IP アドレスの例: ユーザー クラスタの VIP
次の表に、ユーザー クラスタの VIP を指定方法の例を示します。
ユーザー クラスタの Kubernetes API サーバーの VIP と上り(内向き)VIP は、どちらもワーカーノードとコントロールプレーン ノードと同じ VLAN にあります。
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 アドレス
クラスタノードの IP アドレスとデプロイメントにアクセスするための IP アドレスに加えて、各クラスタ内でクラスタ内トラフィックに使用できるアドレス範囲も指定する必要があります。
これを行うには、Pod の IP アドレス用に CIDR 範囲を、また Kubernetes Services の ClusterIP
アドレス用に別の CIDR 範囲を指定する必要があります。これは、このガイドの次のパートで説明するように、クラスタ構成の一部として指定します。
IP 計画の一環として、Pod と Service に使用する CIDR 範囲を決定します。特に理由がない限り、次のデフォルト範囲を使用します。
目的 | デフォルトの CIDR 範囲 |
---|---|
管理クラスタ Pod | 192.168.0.0/16 |
ユーザー クラスタ Pod | 192.168.0.0/16 |
管理クラスタ Service | 10.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 サーバー
クラスタノードで使用できる NTP サーバー
管理ワークステーションとクラスタノードを持つサブネットのデフォルト ゲートウェイの IP アドレス。たとえば、管理ワークステーション、管理クラスタノード、ユーザー クラスタノードがすべて 172.16.20.0/24 のサブネットにあるとします。サブネットのデフォルト ゲートウェイのアドレスは、172.16.20.1 になる可能性があります。
4. ファイアウォールとプロキシを構成する
プロキシとファイアウォール ルールに沿って、必要な GKE on VMware トラフィックを許可するようにファイアウォールとプロキシを構成します。このタスクを実行するには、前のセクションで特定したクラスタノードの IP アドレスが必要です。ユーザー クラスタと管理クラスタの IP アドレスは特定のノードに割り当てられないため、関連するすべてのファイアウォール ルールが各クラスタのすべての IP アドレスに適用されるようにする必要があります。
5. Google Cloud リソースの設定
Google Cloud プロジェクトは、GKE on VMware のインストールと管理に使用されるサービスなど、すべての Google Cloud サービスの作成、有効化、使用の基礎となります。Google Cloud プロジェクトの操作に慣れていない場合は、プロジェクトの作成と管理で詳細をご覧ください。
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
- 後で必要になるので、Google Cloud プロジェクト ID はメモしておいてください。
Google Cloud CLI を設定する
Google Cloud CLI は、プロジェクトの操作に使用できるコマンドライン ツールです。Google Cloud SDK のインストールの手順に沿って、最新バージョンを使用していることを確認してください。
必要な権限
プロジェクト オーナーの場合(プロジェクトを自分で作成した場合など)は、この単純なインストールの残りの部分を実行するために必要なすべての権限がすでに付与されています。プロジェクト オーナーではない場合、自分またはプロジェクト管理者は、Google アカウントに必要な権限があることを確認する必要があります。
次の IAM ロールを使用すると、サービス アカウントの作成、IAM ロールの割り当て、API の有効化が可能となり、この設定の後半で gkeadm
ツールによるサービス アカウントの作成と管理を行えるようになります。
resourcemanager.projectIamAdmin
serviceusage.serviceUsageAdmin
iam.serviceAccountCreator
iam.serviceAccountKeyAdmin
IAM ロールを自身に付与するために必要な権限の詳細については、リソースへのアクセス権の付与、変更、取り消しをご覧ください。これらの権限がない場合は、組織内の他のユーザーによってロールを付与される必要があります。
ロールを付与するには:
Linux / macOS
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:ACCOUNT" \ --role="roles/resourcemanager.projectIamAdmin" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:ACCOUNT" \ --role="roles/serviceusage.serviceUsageAdmin" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:ACCOUNT" \ --role="roles/iam.serviceAccountCreator" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:ACCOUNT" \ --role="roles/iam.serviceAccountKeyAdmin"
Windows
gcloud projects add-iam-policy-binding PROJECT_ID ^ --member="user:ACCOUNT" ^ --role="roles/resourcemanager.projectIamAdmin" gcloud projects add-iam-policy-binding PROJECT_ID ^ --member="user:ACCOUNT" ^ --role="roles/serviceusage.serviceUsageAdmin" gcloud projects add-iam-policy-binding PROJECT_ID ^ --member="user:ACCOUNT" ^ --role="roles/iam.serviceAccountCreator" gcloud projects add-iam-policy-binding PROJECT_ID ^ --member="user:ACCOUNT" ^ --role="roles/iam.serviceAccountKeyAdmin"
以下を置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDACCOUNT
: Google アカウントの識別メールアドレス
コンポーネント アクセス サービス アカウントを設定する
プロジェクトで、GKE on VMware が Container Registry からユーザーに代わってクラスタ コンポーネント コードをダウンロードするために使用できるサービス アカウントを設定します。これは、コンポーネント アクセス サービス アカウントと呼ばれ、この簡単なインストールでは手動で作成する必要がある唯一のサービス アカウントです。
選択した Google Cloud プロジェクトで、次のように新しいサービス アカウントを作成します。
gcloud iam service-accounts create component-access-sa \ --display-name "Component Access Service Account" \ --project PROJECT_ID
PROJECT_ID は、Google 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 を有効にする
Google Cloud プロジェクトで次の Google API を有効にします。これにより、プロジェクト内の GKE on VMware に必要なすべての Google Cloud サービスを使用できます。
gcloud services enable --project PROJECT_ID \ anthos.googleapis.com \ anthosgke.googleapis.com \ anthosaudit.googleapis.com \ cloudresourcemanager.googleapis.com \ connectgateway.googleapis.com \ container.googleapis.com \ gkeconnect.googleapis.com \ gkehub.googleapis.com \ gkeonprem.googleapis.com \ serviceusage.googleapis.com \ stackdriver.googleapis.com \ opsconfigmonitoring.googleapis.com \ monitoring.googleapis.com \ logging.googleapis.com \ iam.googleapis.com \ storage.googleapis.com
プロジェクトで GKE On-Prem API(
gkeonprem.googleapis.com
)を初めて有効にする場合は、API を初期化する必要があります。これを行うには、クラスタの作成に使用できるバージョンを表示する gcloud CLI コマンドを実行します。gcloud container vmware clusters query-version-config \ --project=PROJECT_ID \ --location="us-central1"