プリフライト チェックの実行

このドキュメントでは、VMware 用 Google Distributed Cloud(ソフトウェアのみ)でクラスタを作成またはアップグレードするときに実行されるプリフライト チェックについて説明します。

ファイアウォール ルールを確認する

バージョン 1.29 以降では、クラスタの作成、更新、アップグレード時に、サーバーサイドのプリフライト チェックがデフォルトで有効になります。サーバーサイドのプリフライト チェックには、追加のファイアウォール ルールが必要です。管理クラスタのファイアウォール ルールで、[プリフライト チェック] を検索し、必要なファイアウォール ルールがすべて構成されていることを確認します。

gkectl check-config の実行

gkectl を使用してクラスタを作成する場合は、gkectl create-config を実行して構成ファイルを生成します。この構成ファイルに従ってインストールが実行されます。このファイルには、vSphere 環境、ネットワーク、ロードバランサ、クラスタの表示方法についての情報が記述されています。構成ファイルは、管理ワークステーションの作成前または作成後に生成できます。特定のチェックに合格するには、チェックが管理ワークステーションから実行される必要があります。

ご使用の環境とクラスタのニーズに合わせてファイルを変更した後、そのファイルを使用してオンプレミス環境でクラスタを作成します。

gkectl を使用してクラスタを作成する前に、gkectl check-config を実行していくつかのプリフライト チェックで構成ファイルを検証します。コマンドが FAILURE メッセージを返した場合は、問題を修正してファイルを再度検証します。特定の機能の検証で警告メッセージが返された場合、その機能を使用するには、問題の原因を解消する必要があります。

チェックモードをプリフライトして検証をスキップする

gkectl check-config にはデフォルト モードと高速モードがあります。

  • デフォルト モードでは、コマンドは各フィールドを包括的に検証します。また、デフォルト モードでは、検証の一部として一時的な vSphere 仮想マシン(VM)が作成されます。これにはさらに時間がかかります。

  • 高速モードでは、テスト VM を作成するチェックをスキップし、高速チェックのみを実行します。高速モードを有効にするには、--fast フラグを渡します。

特定の検証をスキップするには、gkectl check-config --help で説明されている他のフラグを渡します。

管理ワークステーションとテスト VM の間のトラフィック

デフォルト モードでは、プリフライト チェックにより、クラスタのテスト VM が作成されます。各テスト VM は、ポート 443 と構成ファイルで指定したノードポートでリッスンする HTTP サーバーを実行します。

複数の IP アドレスがテスト VM に割り当てられます。構成ファイルで、クラスタノードが DHCP サーバーから IP アドレスを取得するよう指定されている場合、プリフライト チェックでは、DHCP サーバーを使用してテスト VM に IP アドレスが割り当てられます。構成ファイルで、クラスタノードに静的 IP アドレスが割り当てられるように指定されている場合、プリフライト チェックでは、IP ブロック ファイルで指定した静的 IP アドレスがテスト VM に割り当てられます。

管理ワークステーションで実行されるプリフライト チェックでは、VM に割り当てられたさまざまな IP アドレスを使用して、HTTP リクエストをテスト VM に送信します。このリクエストは、ポート 443 と、構成ファイルで指定したノードポートに送信されます。

プリフライト チェックを実行するタイミング

プリフライト チェックは、クラスタを作成する前に早めに実行することをおすすめします。早めにプリフライト チェックを実行すると、vSphere 環境とネットワークが正しく構成されていることが確認できます。

バージョン 1.2.0-gke.6 を使用している場合は、gkectl check-config を 2 回実行します。

  1. gkectl check-config --fast を実行します。

  2. gkectl prepare を実行します。

  3. --fast フラグを指定せずに gkectl check-config を再度実行します。

2 回実行する理由は、クラスタノードの OS イメージの VM テンプレートを、gkectl prepare が vSphere 環境にアップロードするためです。この VM テンプレートは、すべての検証セットを実行する前に配置されている必要があります。

バージョン 1.2.1 以降では、check-config コマンド自体が VM テンプレートをアップロードするため、gkectl prepare を実行する前にすべての検証セットを実行できます。

  1. --fast フラグを指定せずに、gkectl check-config を実行します。

  2. gkectl prepare を実行します。

プリフライト チェックでは、ファイルに指定した値が検証されます。構成ファイルに対してプリフライト チェックを実行するために、ファイルのすべてのフィールドを入力する必要はありません。代わりに、フィールドに値を入力するたびに、ファイルを繰り返し検証できます。たとえば、vCenter 構成の検証のみを行う場合は、vcenter フィールドのみ入力して、そのフィールドに対してチェックを実行できます。

クラスタの作成後に構成の変更はできなくなるので注意してください。プリフライト チェックを実行することで、クラスタを作成する前に構成の問題を発見して解決できます。

デバッグ用のテスト VM の保存

バージョン 1.2.1 以降では、gkectl check-config コマンドで --cleanup フラグを使用できます。

gkectl check-config が完全な検証セットを実行すると、テスト VM と関連する SSH 認証鍵を作成します。デバッグ用にテスト VM と SSH 認証鍵を保持するには、--cleanup に false を設定します。

--cleanup のデフォルト値は true です。

プリフライト チェックのリスト

プリフライト チェックでは、構成ファイルの各フィールドが検証されます。現在のチェックは次のとおりです。

カテゴリ 説明
構成ファイル

通常は、各フィールドと仕様が正しい形式と値であることを検証します。

--skip-validation-config フラグを指定すると、スキップされます。

--skip-validation-proxy フラグを指定すると、proxy フィールドの検証がスキップされます。

インターネット

必要なドメインへのインターネット アクセスを検証します。gkectl を実行している場所に基づいてプロキシ構成を検証します。

--skip-validation-internet フラグを指定すると、スキップされます。

OS イメージ

OS イメージが存在していることを検証します。

--skip-validation-os-images フラグを指定すると、スキップされます。

Windows OS のバージョン

Windows OS のバージョンを検証します。

コマンドライン ツール gkeadm を使用して管理ワークステーションを作成する際に、Windows のバージョンがサポートされていることを検証します。gkeadm ツールは Windows 10、Windows Server 2019、Linux で使用できますが、Linux のプリフライト チェックはありません。この検証は、リリース バージョン 1.4.1 から始まります。

クラスタのバージョン

管理クラスタのバージョン、ユーザー クラスタのバージョン、gkectl のバージョンが、作成とアップグレードで一致することを検証します。

--skip-validation-cluster-version フラグを指定すると、スキップされます。

クラスタの状態

アップグレードを行う前に、管理クラスタまたはユーザー クラスタが正常であることを検証します。

  • 管理クラスタ: Kubernetes Service、コンポーネントのステータス、DaemonSet、Deployment、マシン、Pod がチェックの対象になります。
  • ユーザー クラスタ: Kubernetes Service、クラスタ API エンドポイント、StatefulSet、デプロイ、マシンデプロイ、マシン、Pod がチェックの対象になります。

--skip-validation-cluster-health フラグを指定すると、スキップされます。

Ingress アップグレードの前に、ユーザー クラスタに Istio Gateway オブジェクトがあるかどうかを確認します。
予約済み IP

作成とアップグレードのために、十分な IP アドレスが利用可能であることを検証します。

--skip-validation-reserved-ips フラグを指定すると、スキップされます。

Google Cloud
プロジェクト ID
[*].projectid
構成のさまざまなフィールドに指定されたプロジェクト ID を検証します。プロジェクト ID が不明な場合、検証がスキップされます。
登録サービス アカウント
registerserviceaccountkeypath
サービス アカウントが、必要な IAM ロールを保持していることを確認します。必要な API が有効であることを検証します。
接続サービス アカウント
agentserviceaccountkeypath
サービス アカウントが、必要な IAM ロールを保持していることを確認します。必要な API が有効であることを検証します。
Google Cloud Observability サービス アカウント
stackdriver.serviceaccountkeypath
サービス アカウントが、必要な IAM ロールを保持していることを確認します。必要な API が有効であることを検証します。
--skip-validation-gcp フラグを指定すると、スキップされます。
gcr.io/gke-on-prem-release へのアクセス Container Registry でホストされているコンテナ イメージ レジストリへのアクセスを検証します。

--skip-validation-docker フラグによってスキップされます。

Docker レジストリ
privateregistryconfig
構成されている場合は、Docker レジストリへのアクセスを確認します。

--skip-validation-docker フラグを指定すると、スキップされます。

vCenter すべての vcenter フィールドが存在することを確認し、以下についてもチェックします。
認証情報
vcenter.credentials.[*]
指定されたユーザー認証情報を使用して、vCenter Server への認証を検証します。
vSphere のバージョン vCenter と ESXi のバージョンがサポートされていることを検証します。
データセンター
vcenter.datacenter
vSphere データセンターが存在していることを検証します。
データストア
vcenter.datastore
vSphere データストアが存在していることを検証します。
データディスク
vcenter.datadisk
vSphere 仮想マシンディスク(VMDK)が、vSphere にまだ存在していないことを確認します。
リソースプール
vcenter.resourcepool
vSphere リソースプールが存在していることを検証します。
ネットワーク
vcenter.network
vSphere ネットワークが存在していることを検証します。

--skip-validation-infra フラグを指定すると、スキップされます。

ストレージ
vSphere CSI ドライバ intree または CSI vSphere PersistentVolume が存在する場合は、vSphere CSI ドライバが有効になっていることを検証します。つまり、ユーザー クラスタ構成ファイルでは、storage.vSphereCSIDisabledtrue に設定されていません。
StorageClass パラメータ

StorageClass にサポートされていない次のパラメータがないことを確認します。

  • hostfailurestotolerate
  • forceprovisioning
  • cachereservation
  • diskstripes
  • objectspacereservation
  • iopslimit
  • diskformat

クラスタに上記のパラメータのいずれかを含む StorageClass がある場合、ボリュームを移行する必要があります。

詳細については、In-Tree vSphere Volume の移行に関する考慮事項1.15 のアップグレードに関する既知の問題のセクションをご覧ください。

静的に作成された vSphere in-tree PersistentVolume と PersistentVolumeClaim のアノテーション

アップグレード前に、vSphere in-tree PersistentVolumes と vSphere PersistentVolumeClaim のアノテーションを確認します。

  • 静的に作成された vSphere in-tree PersistentVolumes にアノテーション pv.kubernetes.io/provisioned-by: kubernetes.io/vsphere-volume がある
  • 静的に作成された vSphere PersistentVolumesClaims にアノテーション volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/vsphere-volumevolume.kubernetes.io/storage-provisioner: kubernetes.io/vsphere-volume がある

クラスタの vSphere in-tree PersistentVolumes または vSphere PersistentVolumeClaims にこれらのアノテーションがない場合、続行する前に PersistentVolumes と PersistentVolumeClaims にアノテーションを付ける必要があります。in-tree vSphere ボリュームの移行に関する考慮事項をご覧ください。

CSI ワークロード

vSphere CSI ドライバを使用して動的にプロビジョニングされた PersistentVolume を使用するワークロードをクラスタが正常に実行できることを検証します。

この検証は、アップグレード中に、ツリー内 vSphere ボリュームがあり、vSphere CSI ボリュームがない場合にのみ実行されます。

この検証では、以下を行います。

  1. 以前の検証の実行から残っているリソースがないことを確認します。
  2. プロビジョナー フィールドが「csi.vsphere.vmware.com」に設定された StorageClass を検索または作成します。
    1. ユーザー クラスタでは、CSI StorageClass standard-rwo を選択します。
    2. 管理クラスタでは、プロビジョナー フィールドが csi.vsphere.vmware.com に設定された StorageClass を見つけます。クラスタにそのような StorageClass がない場合、テストでは一時的に新しい CSI StorageClass が作成され、検証で使用されます。
  3. 前のステップで確認または作成した StorageClass を使用して、デフォルトの Namespace に PersistentVolumeClaim を作成し、動的に作成された PersistentVolume が Bound フェーズになるまで待機します。
  4. 上で作成した PersistentVolume をマウントするデフォルトの Namespace に書き込みジョブを作成します。書き込み Pod のスケジュールが設定され、起動時にマウントされたファイル システム内のファイルに文字列を書き込みます。
  5. 書き込みジョブと関連する Pod を破棄します。
  6. デフォルトの Namespace に読み取りジョブを作成して、上記で作成した PersistentVolume をマウントします。読み取り Pod のスケジュールが設定され、書き込み Pod によって書き込まれたファイルを読み取り、書き込み Pod によって書き込まれたデータが正常に読み取られるようにします。
  7. 読み取りジョブと関連する Pod を破棄します。
  8. PersistentVolumeClaim を破棄します。それにより PersistentVolume も削除されます。
  9. 検証中に StorageClass が作成された場合は、破棄します。

アンチ アフィニティ グループのホスト

antiAffinityGroups が有効になっている場合、物理的な vCenter ホストの数が 3 つ以上であることを検証します。

クラスタの antiAffinityGroups を無効にするには、antiAffinityGroups.enabled とこのリリースノートをご覧ください。

--skip-validation-infra フラグを指定すると、スキップされます。

ロードバランサ

ロード バランシングの構成を検証します。

  • ロード バランシング モードが統合されている場合(lbmode: Integrated)、すべての bigip フィールドが adminclusterusercluster の仕様に存在することを検証します。
  • ロード バランシング モードが手動の場合(lbmode: Manual)、すべての manuallbspec フィールドが adminclusterusercluster の仕様に存在することを検証します。
統合ロード バランシング
bigip.credentials.[*] F5 BIG-IP 認証情報を検証します。
bigip.partition 指定されたパーティションが存在していることを検証します。
F5 BIG-IP ユーザーロール 指定された F5 BIG-IP ユーザーが管理者またはリソース管理者のロールを持っていることを検証します。
bigip.vips.[*] 指定された VIP を検証します。

--fast フラグまたは --skip-validation-load-balancer フラグを指定すると、スキップされます。

手動ロード バランシング
ネットワーク構成 VIP、ノード IP などを検証します。

--fast フラグまたは --skip-validation-load-balancer フラグを指定すると、スキップされます。

[*].manuallbspec.[*] 指定されたノードポートを検証します。
--skip-validation-load-balancer フラグを指定すると、スキップされます。
ネットワーキング

指定された CIDR 範囲、VIP、静的 IP(構成されている場合)が使用可能かどうかを検証します。IP アドレスが重複していないことを確認します。

--skip-validation-net-config フラグを指定すると、スキップされます。

DNS

指定された DNS サーバーが使用可能であることを検証します。

--skip-validation-dns フラグを指定すると、スキップされます。

NTP

指定されたネットワーク タイム プロトコル(NTP)サーバーが使用可能であることを検証します。

--skip-validation-tod フラグを指定すると、スキップされます。

VIP

指定された VIP に ping を送信します。ping が失敗(想定された VIP がまだ取得されていないことを示す)すれば、このチェックは成功です。

--skip-validation-vips フラグを指定すると、スキップされます。

ノード IP

指定されたノード IP アドレスに対して ping を送信します。ping が失敗(想定されたノード IP がまだ取得されていないことを示す)すれば、このチェックは成功です。

--skip-validation-node-ips フラグを指定すると、スキップされます。

プリフライト チェックの結果

プリフライト チェックでは、次の結果が返されます。

SUCCESS
フィールドとその値がチェックに合格しました。
FAILURE
フィールドまたはその値、もしくはその両方がチェックに合格しませんでした。チェックが FAILURE メッセージを返す場合は、問題を修正してファイルを再度検証してください。
SKIPPED

チェックが構成に関係ないため、チェックがスキップされました。たとえば、DHCP サーバーを使用している場合、静的 IP 構成のみに関連する DNS のチェックとノード IP のチェックはスキップされます。

検証をスキップするフラグを渡した場合、スキップされたチェックは「SKIPPED」という結果を返しません。検証は実行されず、コマンド出力に何も表示されません。

UNKNOWN

スキップによりゼロ以外のコードが返されました。「UNKNOWN」の結果は、チェックに失敗したとみなされます。「UNKNOWN」は通常、nslookup の実行に失敗した、または gcloud の実行に失敗したなど、一部のシステム パッケージの実行に失敗したことを示します。

準備中

次のプリフライト チェックは、今後のリリースで追加される予定です。

  • NTP サーバー

プリフライト チェックの実行

次のコマンドを実行して、プリフライト チェックを実行します。

gkectl check-config --config [CONFIG]

[CONFIG] は構成ファイルのパスです。

高速モードでの実行

ロード バランシング VIP やノード IP 検証など、一時的なテスト VM を作成する検証をスキップする「高速モード」でプリフライト チェックを実行することもできます。そのためには、--fast を渡します。

gkectl check-config --config [CONFIG] --fast

特定の検証をスキップする

フラグを渡すと、DNS、プロキシ、ネットワーキングなどの特定の検証を細かくスキップできます。各スキップフラグの先頭には --skip-[VALIDATION] が付いています。

使用可能なスキップフラグを確認するには、次のコマンドを実行します。必要に応じて、gkectl check-config リファレンスをご覧ください。

gkectl check-config --help

たとえば、ロードバランサの検証をスキップするには、次のようにします。

gkectl check-config --config my-config.yaml --skip-validation-load-balancer 

プリフライト チェックをキャンセルする

プリフライト チェックを開始してキャンセルする場合は、Ctrl+C キーを 2 回押します。プリフライト チェックによってテスト VM が作成された場合、キャンセルすると VM も自動的にクリーンアップされます。

テスト VM のクリーンアップ

テスト VM がプリフライト チェックの完了後に残っている場合は、VM を vCenter から削除できます。テスト VM の名前は次のようになります。

check-config-[dhcp|static]-[random number]

VM を削除するには:

  1. VM を右クリックし、[電源] > [電源を切る] の順にクリックします。

  2. VM の電源が切れたら、VM をもう一度右クリックし、[ディスクから削除] をクリックします。

コマンドの出力例を以下に示します。この例では、検証中の構成は外部 Docker レジストリがなく、統合ロード バランシング モードと静的 IP を使用しています。

- Validation Category: Config Check
    - [SUCCESS] Config

- Validation Category: Internet Access
    - [SUCCESS] Internet access to required domains

- Validation Category: GCP
    - [SUCCESS] GCP Service
    - [SUCCESS] GCP Service Account

- Validation Category: Docker Registry
    - [SUCCESS] gcr.io/gke-on-prem-release access

- Validation Category: vCenter
    - [SUCCESS] Credentials
    - [SUCCESS] Version
    - [SUCCESS] Datacenter
    - [SUCCESS] Datastore
    - [SUCCESS] Data Disk
    - [SUCCESS] Resource Pool
    - [SUCCESS] Network
    - [SUCCESS] VSphere CSI Driver

- Validation Category: F5 BIG-IP
    - [SUCCESS] Admin Cluster F5 (credentials, partition and user role)
    - [SUCCESS] User Cluster F5 (credentials, partition and user role)

- Validation Category: Network Configuration
    - [SUCCESS] CIDR, VIP and static IP (availability and overlapping)

- Validation Category: DNS
    - [SUCCESS] DNS (availability)

- Validation Category: VIPs
    - [SUCCESS] ping (availability)

- Validation Category: Node IPs
    - [SUCCESS] ping (availability)

Now running slow validation checks. ...

Reusing VM template "gke-on-prem-osimage-xxx" that already exists in vSphere.
Creating test VMs with admin cluster configuration...  DONE
Waiting to get IP addresses from test VMs...  DONE
Waiting for test VMs to become ready...  DONE

Reusing VM template "gke-on-prem-osimage-xxx" that already exists in vSphere.
Creating test VMs with user cluster configuration...  DONE
Waiting to get IP addresses from test VMs...  DONE
Waiting for test VMs to become ready...  DONE

- Validation Category: F5 BIG-IP
    - [SUCCESS] Admin Cluster VIP and NodeIP
    - [SUCCESS] Admin Cluster F5 Access
    - [SUCCESS] User Cluster VIP and NodeIP
    - [SUCCESS] User Cluster F5 Access

- Validation Category: Internet Access
    - [SUCCESS] Internet access to required domains

- Validation Category: vCenter on test VMs
    - [SUCCESS] Test VM: VCenter Access and Permission

- Validation Category: DNS on test VMs
    - [SUCCESS] Test VM: DNS Availability

- Validation Category: TOD on test VMs
    - [SUCCESS] Test VM: TOD Availability

- Validation Category: Docker Registry
    - [SUCCESS] gcr.io/gke-on-prem-release access

Deleting test VMs with admin cluster configuration...  DONE
Deleting test VMs with user cluster configuration...  DONE

既知の問題

  • バージョン 1.3.0-gke.16 の場合:

    次の両方が当てはまる場合は、プリフライト チェックには高速検証チェック(gkectl check-config --fast)を実行する必要があります。

    1. プロキシを使用するように Google Distributed Cloud を構成した。

    2. 次のいずれかのバンドルをインストールした。

      • ダウンロード ページにある /var/lib/gke/bundles/gke-onprem-vsphere-1.3.0-gke.16.tgz バンドル。
      • 管理ワークステーションにある /var/lib/gke/bundles/gke-onprem-vsphere-1.3.0-gke.16.tgz バンドル。

    完全な検証セットを実行できるのは、フルバンドルをインストールした場合のみです。例: /var/lib/gke/bundles/gke-onprem-vsphere-1.3.0-gke.16-full.tgz

  • バージョン 1.2.0-gke.6 の場合:

    ネストされたリソースプールまたはデフォルトのリソースプールを使用している場合、完全な検証セットを実行しようとすると gkectl check-config は失敗します。ただし、--fast フラグを渡すことで、より小さい検証セットを行うことができます。

    gkectl check-config --config [CONFIG] --fast

次のステップ