VMware Engine プライベート クラウドの作成

プライベート クラウドとは、ESXi ホスト、vCenter、vSAN、NSX-T、HCX で構成される、分離された VMware スタックのことです。プライベート クラウドは、Google Cloud コンソールから管理します。プライベート クラウドを作成すると、単一の vSphere クラスタと、そのクラスタ内に作成されるすべての管理 VM が得られます。

VMware Engine では、vSphere / vSAN サブネット用に選択したネットワークに管理コンポーネントをデプロイします。ネットワーク IP アドレス範囲は、デプロイ中に異なるサブネットに分割されます。

始める前に

このページのタスクを実行する前に、次の準備を行っておく必要があります。

vSphere / vSAN のサブネット アドレス空間は、オンプレミス ネットワークと Google Cloud Virtual Private Cloud(VPC)など、プライベート クラウドと通信するネットワークと重複しないようにする必要があります。vSphere または vSAN サブネットの詳細については、VMware Engine の VLAN とサブネットをご覧ください。

Google Cloud CLI と API の要件

gcloud コマンドライン ツールまたは API を使用して VMware Engine リソースを管理するには、以下で説明するようにツールを構成することをおすすめします。

gcloud

  1. デフォルトのプロジェクト ID を設定します。

    gcloud config set project PROJECT_ID
    
  2. デフォルトのリージョンとゾーンを設定します。

    gcloud config set compute/region REGION
    
    gcloud config set compute/zone ZONE
    

gcloud vmware ツールの詳細については、Cloud SDK リファレンス ドキュメントをご確認ください

API

このドキュメント セットの API の例では、cURL コマンドライン ツールを使用して API がクエリされています。cURL リクエストには、有効なアクセス トークンが必要です。有効なアクセス トークンを取得するにはさまざまな方法があります。次の手順では、gcloud ツールを使用してアクセス トークンを生成します。

  1. Google Cloud にログインします。

    gcloud auth login
    
  2. アクセス トークンを生成して TOKEN にエクスポートします。

    export TOKEN=`gcloud auth print-access-token`
    
  3. TOKEN が正しく設定されていることを確認します。

    echo $TOKEN
    

API へのリクエストで認証トークンを使用します。次に例を示します。

curl -X GET -H "Authorization: Bearer \"$TOKEN\"" -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations

Python

このドキュメントの Python コードサンプルは、VMware Engine ライブラリを使用して API と通信します。このアプローチを使用するには、ライブラリをインストールし、アプリケーションのデフォルト認証情報を構成する必要があります。

  1. Python ライブラリをダウンロードしてインストールします。

    pip install google-cloud-vmwareengine
    
  2. シェルで次のコマンドを実行して、ADC 情報を構成します。

    gcloud auth application-default login
    

    または、サービス アカウント キー ファイルを使用します。

    export GOOGLE_APPLICATION_CREDENTIALS="FILE_PATH"
    

ライブラリの詳細については、リファレンス ページまたは GitHub のコードサンプルをご覧ください。

プライベート クラウドを作成する

コンソール

Google Cloud コンソールを使用してプライベート クラウドを作成するには、次の手順で操作します。

  1. Google Cloud コンソールにアクセスします。
  2. メイン ナビゲーションから [プライベート クラウド] をクリックします。
  3. [作成] をクリックします。
  4. プライベート クラウドをデプロイするロケーションを選択します。
  5. プライマリ クラスタのノードタイプを選択します。
  6. プライベート クラウドのノード数を選択します。本番環境ワークロードの場合、少なくとも 3 つのノードを持つプライベート クラウドを作成します。VMware Engine は、60 日後にノードが 1 つのみ存在するプライベート クラウドを削除します。
  7. 省略可: 管理クラスタ内の各ノードで使用可能なコア数を減らすには、[Customize Cores] トグルをクリックします。詳細については、カスタムコア数をご覧ください。
  8. VMware 管理ネットワークの CIDR 範囲を入力します。この範囲の制限については、始める前にのセクションをご覧ください。
  9. HCX デプロイ ネットワークの CIDR 範囲を入力します。これは HCX コンポーネントのデプロイに使用されます。CIDR 範囲がオンプレミス サブネットやクラウド サブネットと重複していないことを確認します。CIDR 範囲は、/27 以上である必要があります。
  10. [確認して作成] をクリックします。
  11. 設定を確認します。設定を変更するには、[Back] をクリックします。
  12. [Create] をクリックして、プライベート クラウドのプロビジョニングを開始します。

次のリストは、プライベート クラウドの作成時に使用する各フィールドの詳細を示しています。

  • Name: プライベート クラウドの永続的な一意の識別子です。
  • Description: プライベート クラウドの詳細ページに表示される追加情報です。
  • Region: VMware Engine がプライベート クラウドをホストする地理的な場所です。
  • Zone: リージョンのサブセットです。同じリージョン内にあるゾーンは互いに物理的に隔離されています。ゾーンは、リージョン内の単一の障害発生ドメインです。
  • Primary cluster name: プライベート クラウドの最初の vSphere クラスタに付けられた名前。プライベート クラウドの VMware 管理アプライアンスがこのクラスタ上で実行されます。
  • ノードタイプ: プライマリ クラスタ内のノードのハードウェア構成。
  • ノード数: プライマリ クラスタ内のノードの数。

  • Management IP address range: vCenter Server、NSX Manager、ESXi ホスト、プライベート クラウドのインフラストラクチャの他の部分に使用される IP アドレス範囲です。この範囲はワークロード VM には使用されません。また、VPC ネットワークやプライベート クラウドを接続する予定のネットワークのどの部分とも重複してはなりません。
  • VMware Engine network: ネットワーク ポリシーに従ってプライベート クラウド接続を処理するネットワーク リソース。この VMware Engine ネットワークに接続しているユーザーとリソースは、Google Cloud 内からプライベート クラウドにアクセスできます。

gcloud

Google Cloud CLI を使用して拡張プライベート クラウドを作成するには、次の手順で操作します。

  1. 省略可: gcloud vmware locations list コマンドを実行して、プロジェクトで使用可能なリージョンとゾーンを一覧表示します。

    gcloud vmware locations list \
        --project=PROJECT_ID
    

    次のように置き換えます。

    • PROJECT_ID: このリクエストのプロジェクト ID
  2. gcloud vmware networks create コマンドを実行して、プライベート クラウドのネットワークを作成します。

    gcloud vmware networks create NETWORK_NAME \
        --type=LEGACY \
        --location=REGION \
        --description="DESCRIPTION"

    次のように置き換えます。

    • NETWORK_NAME: プライベート クラウドのネットワーク名
    • REGION: プライベート クラウドのリージョン
    • DESCRIPTION: プライベート クラウドの説明

    このリクエストはオペレーション ID を返します。

  3. gcloud vmware operations describe コマンドを実行して、オペレーションのステータスを確認します。オペレーションが DONE として返されたら、レスポンスをチェックしてオペレーションが成功したかどうかを確認します。

    gcloud vmware operations describe OPERATION_ID \
        --location REGION

    次のように置き換えます。

    • OPERATION_ID: 前のステップの ID
    • REGION: プライベート クラウドのリージョン
  4. gcloud vmware private-clouds create コマンドを実行して、3 ノードのプライベート クラウドを作成します。

    gcloud vmware private-clouds create PRIVATE_CLOUD_ID \
      --location=ZONE \
      --cluster=CLUSTER_ID \
      --node-type-config=type=standard-72,count=NODE_COUNT \
      --management-range=`IP_ADDRESS` \
      --vmware-engine-network=NETWORK_NAME
    

    次のように置き換えます。

    • PRIVATE_CLOUD_ID: プライベート クラウドの名前
    • ZONE: プライベート クラウドのゾーン
    • CLUSTER_ID: このプライベート クラウドの新しいクラスタの名前
    • NODE_COUNT: ノード数。3 以上の値を指定します。
    • IP_ADDRESS: このリクエストの IP アドレス(192.168.0.0/24 など)
    • NETWORK_NAME: このクラウドのネットワーク名

    リクエストはオペレーション ID を返します。この ID を使用してオペレーションの進行状況を確認できます。

  5. gcloud vmware operations describe コマンドを実行して、オペレーションのステータスを確認します。オペレーションが DONE として返されたら、レスポンスをチェックしてオペレーションが成功したかどうかを確認します。

    gcloud vmware operations describe OPERATION_ID \
        --location REGION
    

    次のように置き換えます。

    • OPERATION_ID: 前のステップの ID
    • REGION: プライベート クラウドのリージョン
  6. プライベート サービス アクセスを設定して、VMware Engine ネットワークを VPC に接続します。

  7. gcloud vmware private-clouds vcenter credentials describe コマンドと gcloud vmware private-clouds nsx credentials describe コマンドを実行して、それぞれ vCenter と NSX-T の各認証情報を取得します。

    gcloud vmware private-clouds vcenter credentials describe \
        --private-cloud=PRIVATE_CLOUD_ID \
        --location=ZONE
    gcloud vmware private-clouds nsx credentials describe \
        --private-cloud=PRIVATE_CLOUD_ID \
        --location=ZONE

    次のように置き換えます。

    • PRIVATE_CLOUD_ID: プライベート クラウドの ID
    • ZONE: プライベート クラウドのゾーン

API

VMware Engine API を使用して拡張プライベート クラウドを作成するには、次の手順を操作します。

  1. POST リクエストを送信してレガシー ネットワークを作成します。

    curl -X POST -H "Authorization: Bearer TOKEN" -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/vmwareEngineNetworks?vmwareEngineNetworkId=NETWORK_NAME -d "{"type": "legacy"}"
    

    次のように置き換えます。

    • TOKEN: このリクエストの認証トークン
    • PROJECT_ID: このリクエストのプロジェクト
    • REGION: このネットワークを作成するリージョン
    • NETWORK_NAME: プライベート クラウドのネットワーク名

    リクエストはオペレーション ID を返します。この ID を使用してオペレーションの進行状況を確認できます。

  2. GET リクエストを送信して、オペレーションのステータスを確認します。オペレーションが DONE として返されたら、レスポンスをチェックしてオペレーションが成功したかどうかを確認します。

    curl -X GET -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
    

    OPERATION_ID は、前の手順の ID に置き換えます。

  3. POST リクエストを送信して 3 ノード プライベート クラウドを作成します。

    curl -X POST -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/privateClouds?privateCloudId=PRIVATE_CLOUD_ID -d "{
    "networkConfig":{
      "vmwareEngineNetwork":"projects/PROJECT_ID/locations/REGION/vmwareEngineNetworks/NETWORK_NAME",
      "managementCidr":"10.241.0.0/22"
       },
    "managementCluster":{
      "clusterId": "CLUSTER_ID",
      "nodeTypeConfigs": {
      "standard-72": {
        "nodeCount": NODE_COUNT
       }
      }
     }
    }"
    

    次のように置き換えます。

    • TOKEN: このリクエストの認証トークン。
    • PROJECT_ID: このリクエストのプロジェクト ID
    • ZONE: プライベート クラウドのゾーン
    • PRIVATE_CLOUD_ID: プライベート クラウドの ID
    • REGION: このプライベート クラウドのネットワークのリージョン
    • NETWORK_NAME: プライベート クラウドのネットワーク名
    • CLUSTER_ID: このプライベート クラウドの新しいクラスタの ID
    • NODE_COUNT: ノード数。3 以上の値を指定します。

    リクエストはオペレーション ID を返します。この ID を使用してオペレーションの進行状況を確認できます。

  4. GET リクエストを送信して、オペレーションのステータスを確認します。オペレーションが DONE として返されたら、レスポンスをチェックしてオペレーションが成功したかどうかを確認します。

    curl -X GET -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
    

    次のように置き換えます。

    • PROJECT_ID: このリクエストのプロジェクト ID
    • REGION: プライベート クラウドのリージョン
    • OPERATION_ID: 前のステップの ID
  5. プライベート サービス アクセスを設定して、VMware Engine ネットワークを VPC に接続します。

  6. GET リクエストを送信して、vCenter と NSX-T の各認証情報を取得します。

    curl -X GET -H "Authorization: Bearer \"TOKEN"\"  -H "Content-Type: application/json; charset=utf-8" "https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/privateClouds/PRIVATE_CLOUD_ID:showVcenterCredentials"
    
    curl -X GET -H "Authorization: Bearer \"TOKEN"\"  -H "Content-Type: application/json; charset=utf-8" "https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/privateClouds/PRIVATE_CLOUD_ID:showNsxCredentials"
    

    次のように置き換えます。

    • PROJECT_ID: このリクエストのプロジェクト ID
    • ZONE: プライベート クラウドのゾーン
    • PRIVATE_CLOUD_ID: プライベート クラウドの ID

Python

  1. レガシー ネットワークを作成します。

    from google.cloud import vmwareengine_v1
    
    TIMEOUT = 1200  # 20 minutes
    
    def create_legacy_network(
        project_id: str, region: str
    ) -> vmwareengine_v1.VmwareEngineNetwork:
        """
        Creates a new legacy network.
    
        Args:
            project_id: name of the project you want to use.
            region: name of the region you want to use. I.e. "us-central1"
    
        Returns:
            The newly created VmwareEngineNetwork object.
        """
        network = vmwareengine_v1.VmwareEngineNetwork()
        network.description = (
            "Legacy network created using vmwareengine_v1.VmwareEngineNetwork"
        )
        network.type_ = vmwareengine_v1.VmwareEngineNetwork.Type.LEGACY
    
        request = vmwareengine_v1.CreateVmwareEngineNetworkRequest()
        request.parent = f"projects/{project_id}/locations/{region}"
        request.vmware_engine_network_id = f"{region}-default"
        request.vmware_engine_network = network
    
        client = vmwareengine_v1.VmwareEngineClient()
        result = client.create_vmware_engine_network(request, timeout=TIMEOUT).result()
    
        return result
    
    
  2. 3 ノードのプライベート クラウドを作成します。

    from google.api_core import operation
    from google.cloud import vmwareengine_v1
    
    DEFAULT_MANAGEMENT_CIDR = "192.168.0.0/24"
    DEFAULT_NODE_COUNT = 3
    
    def create_private_cloud(
        project_id: str, zone: str, network_name: str, cloud_name: str, cluster_name: str
    ) -> operation.Operation:
        """
        Creates a new Private Cloud using VMWare Engine.
    
        Creating a new Private Cloud is a long-running operation and it may take over an hour.
    
        Args:
            project_id: name of the project you want to use.
            zone: the zone you want to use, i.e. "us-central1-a"
            network_name: name of the VMWareNetwork to use for the new Private Cloud
            cloud_name: name of the new Private Cloud
            cluster_name: name for the new cluster in this Private Cloud
    
        Returns:
            An operation object representing the started operation. You can call its .result() method to wait for it to finish.
        """
        request = vmwareengine_v1.CreatePrivateCloudRequest()
        request.parent = f"projects/{project_id}/locations/{zone}"
        request.private_cloud_id = cloud_name
    
        request.private_cloud = vmwareengine_v1.PrivateCloud()
        request.private_cloud.management_cluster = (
            vmwareengine_v1.PrivateCloud.ManagementCluster()
        )
        request.private_cloud.management_cluster.cluster_id = cluster_name
    
        node_config = vmwareengine_v1.NodeTypeConfig()
        node_config.node_count = DEFAULT_NODE_COUNT
    
        # Currently standard-72 is the only supported node type.
        request.private_cloud.management_cluster.node_type_configs = {
            "standard-72": node_config
        }
    
        request.private_cloud.network_config = vmwareengine_v1.NetworkConfig()
        request.private_cloud.network_config.vmware_engine_network = network_name
        request.private_cloud.network_config.management_cidr = DEFAULT_MANAGEMENT_CIDR
    
        client = vmwareengine_v1.VmwareEngineClient()
        return client.create_private_cloud(request)
    
    

    create_private_cloud 関数は、オペレーションの進行状況を確認するために使用できるオペレーション オブジェクトを返します。

  3. オペレーションのステータスを確認します。次のコードにより、オペレーションに関する現在の情報を取得します。

    from google.cloud import vmwareengine_v1
    from google.longrunning.operations_pb2 import GetOperationRequest
    
    def get_operation_by_name(operation_name: str) -> Operation:
        """
        Retrieve detailed information about an operation.
    
        Args:
            operation_name: name identifying an operation you want to check.
                Expected format: projects/{project_id}/locations/{region}/operations/{operation_id}
    
        Returns:
            Operation object with details.
        """
        client = vmwareengine_v1.VmwareEngineClient()
        request = GetOperationRequest()
        request.name = operation_name
        return client.get_operation(request)
    
    def get_operation(project_id: str, region: str, operation_id: str) -> Operation:
        """
        Retrieve detailed information about an operation.
    
        Args:
            project_id: name of the project running the operation.
            region: name of the region in which the operation is running.
            operation_id: identifier of the operation.
    
        Returns:
            Operation object with details.
        """
        return get_operation_by_name(
            f"projects/{project_id}/locations/{region}/operations/{operation_id}"
        )
    
    

    オペレーション オブジェクトのメンバー メソッド .result() を使用して、オペレーションが完了するまで待機できます。

  4. プライベート サービス アクセスを設定して、VMware Engine ネットワークを VPC に接続します。

  5. vCenter と NSX-T の認証情報を取得します。

    from google.cloud import vmwareengine_v1
    
    def get_vcenter_credentials(
        project_id: str, zone: str, private_cloud_name: str
    ) -> vmwareengine_v1.Credentials:
        """
        Retrieves VCenter credentials for a Private Cloud.
    
        Args:
            project_id: name of the project hosting the private cloud.
            zone: name of the zone hosting the private cloud.
            private_cloud_name: name of the private cloud.
    
        Returns:
            A Credentials object.
        """
        client = vmwareengine_v1.VmwareEngineClient()
        credentials = client.show_vcenter_credentials(
            private_cloud=f"projects/{project_id}/locations/{zone}/privateClouds/{private_cloud_name}"
        )
        return credentials
    
    
    from google.cloud import vmwareengine_v1
    
    def get_nsx_credentials(
        project_id: str, zone: str, private_cloud_name: str
    ) -> vmwareengine_v1.Credentials:
        """
        Retrieves NSX credentials for a Private Cloud.
    
        Args:
            project_id: name of the project hosting the private cloud.
            zone: name of the zone hosting the private cloud.
            private_cloud_name: name of the private cloud.
    
        Returns:
            A Credentials object.
        """
        client = vmwareengine_v1.VmwareEngineClient()
        credentials = client.show_nsx_credentials(
            private_cloud=f"projects/{project_id}/locations/{zone}/privateClouds/{private_cloud_name}"
        )
        return credentials
    
    

VMware Engine は新しいプライベート クラウドが作成されると、多数の VMware コンポーネントがデプロイされ、指定された IP アドレス範囲がサブネットに分割されます。プライベート クラウドの作成には 30 分から 2 時間かかる場合があります。プロビジョニングが完了すると、メールが届きます。

次のステップ