Como criar uma nuvem privada do VMware Engine

Uma nuvem privada é uma pilha VMware isolada que consiste em hosts ESXi, vCenter, vSAN, NSX-T e HCX. Você gerencia nuvens privadas por meio do portal do Google Cloud VMware Engine. Ao criar uma nuvem privada, você recebe um cluster do vSphere e todas as VMs de gerenciamento criadas nesse cluster.

O VMware Engine implanta componentes de gerenciamento na rede que você selecionou para sub-redes vSphere/vSAN. O intervalo de endereços IP da rede é dividido em sub-redes diferentes durante a implantação.

Antes de começar

Antes de realizar as tarefas nesta página, siga as etapas de pré-requisito a seguir.

  • Aloque um intervalo de endereços IP exclusivo para sub-redes vSphere/vSAN da nuvem particular que você quer criar.
    • Prefixo mínimo do intervalo CIDR: /24
    • Prefixo máximo do intervalo CIDR: /21
  • Se você quiser a resolução de endereço global usando o Cloud DNS, ative a API Cloud DNS e conclua a configuração do Cloud DNS antes de criar sua nuvem privada.

O espaço de endereço de sub-rede vSphere/vSAN não pode se sobrepor a nenhuma rede que se comunicará com a nuvem privada, como redes locais e redes de nuvem privada virtual (VPC) do Google Cloud. Para mais informações sobre sub-redes vSphere ou vSAN, consulte VLANs e sub-redes no VMware Engine.

gcloud e requisitos de API

Para usar a ferramenta de linha de comando gcloud ou a API para gerenciar os recursos do VMware Engine, recomendamos configurar as ferramentas conforme descrito abaixo.

gcloud

  1. Defina o ID do projeto padrão:

    gcloud config set project PROJECT_ID
    
  2. Defina uma região e/ou uma zona padrão:

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

Para mais informações sobre a ferramenta gcloud vmware, consulte os documentos de referência do SDK do Cloud.

API

Os exemplos de API neste conjunto de documentação usam a ferramenta de linha de comando cURL para consultar a API. Um token de acesso válido é necessário como parte da solicitação cURL. Há muitas maneiras de conseguir um token de acesso válido. As etapas a seguir usam a ferramenta gcloud para gerar um token de acesso:

  1. Fazer login no Google Cloud

    gcloud auth login
    
  2. Gerar token de acesso e exportar para TOKEN

    export TOKEN=`gcloud auth print-access-token`
    
  3. Verificar se o TOKEN está definido corretamente

    echo $TOKEN
    
    Output:
    TOKEN
    

Use agora o token de autorização nas solicitações para a API. Exemplo:

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

Os exemplos de código Python nesta documentação usam a biblioteca do VMware Engine para se comunicar com a API. Para usar essa abordagem, a biblioteca precisa estar instalada e o Application Default Credentials precisa estar configurado.

  1. Fazer o download e instalar a biblioteca Python

     pip install google-cloud-vmwareengine
    
  2. Execute os comandos no shell para configurar as informações do ADC

      gcloud auth application-default login
    

    ou use um arquivo de chave da conta de serviço

      export GOOGLE_APPLICATION_CREDENTIALS="FILE_PATH"
    

Para mais informações sobre a biblioteca, acesse a página de referência ou veja os exemplos de código no GitHub.

Criar nuvem privada

Console

  1. Acesse o portal do Google Cloud VMware Engine.
  2. Na página Recursos, clique em Criar nuvem privada.
  3. Selecione um local para a nuvem privada.
  4. Selecione o número de nós da nuvem privada. Para cargas de trabalho de produção, crie sua nuvem privada com pelo menos três nós. O VMware Engine exclui nuvens privadas que contêm apenas um nó após 60 dias.
  5. Opcional: clique no botão Personalizar núcleos se você quiser reduzir o número de núcleos disponíveis para cada nó no cluster de gerenciamento. Para mais detalhes, consulte Contagens de núcleo personalizados.
  6. Insira um intervalo CIDR para a rede de gerenciamento de VMware. Para informações sobre restrições nesse intervalo, consulte a seção Antes de começar.
  7. Insira um intervalo de CIDR para a rede de implantação do HCX, que é usado para implantar componentes do HCX. Verifique se o intervalo CIDR não se sobrepõe a nenhuma das sub-redes locais ou da nuvem. O intervalo CIDR precisa ser /27 ou superior.
  8. Selecione Revisar e criar.
  9. Revise as configurações. Para alterar as configurações, clique em Voltar.
  10. Clique em Criar para começar a provisionar a nuvem privada.

À medida que o VMware Engine cria sua nova nuvem privada, ele implanta vários componentes do VMware e divide o intervalo de endereços IP fornecido em sub-redes. A criação da nuvem privada pode levar de 30 minutos a 2 horas. Depois que o provisionamento for concluído, você receberá um e-mail.

gcloud

  1. [Opcional] Liste as regiões e zonas disponíveis para seu projeto.

    gcloud vmware locations list --project=PROJECT_ID
    
  2. Crie uma rede para sua nuvem privada. O nome da rede precisa estar no formato REGION padrão.

    gcloud vmware networks create REGION-default --type=LEGACY --location=REGION --description="Legacy network created using gcloud vmware"
    

    A solicitação retorna um ID de operação.

  3. Verifique o status da operação. Quando a operação retornar como DONE, verifique a resposta para ver se a operação foi bem-sucedida.

    gcloud vmware operations describe OPERATION_ID \
        --location REGION
    

    Substitua OPERATION_ID pelo ID da etapa anterior.

  4. Em seguida, crie uma nuvem privada de três nós.

    gcloud vmware private-clouds create PC_NAME \
       --location=ZONE --cluster=CLUSTER_NAME\
       --node-type-config=standard-72,count=3 \
       --management-range=192.168.0.0/24 \
       --vmware-engine-network=NETWORK_NAME
    

    Substitua:

    • PC_NAME: o nome da nuvem privada
    • ZONE: a zona da nuvem privada.
    • CLUSTER_NAME: o nome do novo cluster nesta nuvem privada.
    • NETWORK_NAME: o nome da rede para esta nuvem

    A solicitação retorna um ID que pode ser usado para verificar o progresso da operação.

  5. Verifique o status da operação. Quando a operação retornar como DONE, verifique a resposta para ver se a operação foi bem-sucedida.

    gcloud vmware operations describe OPERATION_ID \
        --location REGION
    

    Substitua OPERATION_ID pelo ID da etapa anterior.

  6. Conecte a rede do VMware Engine à sua VPC configurando o acesso a serviços particulares.

  7. Recupere as credenciais do vCenter e NSX-T.

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

API

  1. Criar uma rede legada O nome do bucket precisa estar no formato REGION-default.

    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=REGION-default -d "{"type": "legacy"}"
    

    Substitua:

    • TOKEN: o token de autorização da solicitação.
    • PROJECT_ID: o projeto para esta solicitação.
    • REGION: a região em que a rede será criada.

    A solicitação retorna um ID que pode ser usado para verificar o progresso da operação.

  2. Verifique o status da operação. Quando a operação retornar como DONE, verifique a resposta para ver se a operação foi bem-sucedida.

    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
    

    Substitua OPERATION_ID pelo ID da etapa anterior.

  3. Criar uma nuvem privada de três nós.

    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=PC_NAME -d "{
    "networkConfig":{
      "vmwareEngineNetwork":"projects/PROJECT_ID/locations/REGION/vmwareEngineNetworks/REGION-default",
      "managementCidr":"10.241.0.0/22"
       },
    "managementCluster":{
      "clusterId": "CLUSTER_NAME",
      "nodeTypeConfigs": {
      "standard-72": {
        "nodeCount": 3
       }
      }
     }
    }"
    

    Substitua:

    • TOKEN: o token de autorização da solicitação.
    • PROJECT_ID: o projeto para esta solicitação
    • ZONE: a zona da nuvem privada
    • PC_NAME: o nome da nuvem privada.
    • REGION: a região da rede dessa nuvem privada
    • CLUSTER_NAME: o nome do novo cluster nesta nuvem privada.

    A solicitação retorna um ID que pode ser usado para verificar o progresso da operação.

  4. Verifique o status da operação. Quando a operação retornar como DONE, verifique a resposta para ver se a operação foi bem-sucedida.

    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
    

    Substitua OPERATION_ID pelo ID da etapa anterior.

  5. Conecte a rede do VMware Engine à sua VPC configurando o acesso a serviços particulares.

  6. Recupere as credenciais do vCenter e 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/my-private-cloud: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/my-private-cloud:showNsxCredentials"
    

Python

  1. Criar uma rede legada

    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. Criar uma nuvem privada de três nós.

    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)
    
    

    A função create_private_cloud retorna um objeto de operações que pode ser usado para verificar o progresso da operação.

  3. Verifique o status da operação. Busca informações atuais sobre uma operação.

    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}"
        )
    
    

    Use o método de membro .result() do objeto de operação para aguardar a conclusão.

  4. Conecte a rede do VMware Engine à sua VPC configurando o acesso a serviços particulares.

  5. Recupere as credenciais do vCenter e 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
    
    

A seguir