Como criar clusters de administradores e usuários

Nesta página, você verá como criar um cluster de administrador e um cluster de usuário.

SSH na estação de trabalho de administrador

Implemente SSH na estação de trabalho de administrador:

ssh -i ~/.ssh/vsphere_workstation ubuntu@[IP_ADDRESS]

[IP_ADDRESS] é o endereço IP da sua estação de trabalho de administrador.

Siga todas as etapas restantes neste tópico na sua estação de trabalho de administrador.

Como fazer login

Faça login no Google Cloud usando as credenciais da conta de usuário. A conta de usuário precisa ter pelo menos o papel de leitor do IAM:

gcloud auth login

Registre gcloud como um auxiliar de credenciais do Docker (mais informações sobre este comando):

gcloud auth configure-docker

Como configurar IPs estáticos no cluster de administrador

Para especificar os endereços IP estáticos que você quer usar no cluster de administrador, crie um arquivo de configuração de host chamado admin-hostconfig.yaml. Para este exercício, é necessário especificar cinco endereços IP a serem usados pelo cluster de administrador.

Veja a seguir um exemplo de arquivo de configuração de host com cinco hosts:

hostconfig:
  dns: 172.16.255.1
  tod: 192.138.210.214
  otherdns:
  - 8.8.8.8
  - 8.8.4.4
  othertod:
  - ntp.ubuntu.com
  searchdomainsfordns:
  - "my.local.com"
blocks:
  - netmask: 255.255.252.0
    gateway: 110.116.232.1
    ips:
    - ip: 172.16.20.10
      hostname: admin-host1
    - ip: 172.16.20.11
      hostname: admin-host2
    - ip: 172.16.20.12
      hostname: admin-host3
    - ip: 172.16.20.13
      hostname: admin-host4
    - ip: 172.16.20.14
      hostname: admin-host5

O campo ips é uma matriz de endereços IP e nomes de host. Esses são os endereços IP e nomes de host que o GKE On-Prem atribuirá aos nós do cluster de administrador.

No arquivo de configuração do host, você também especifica os endereços dos servidores DNS, servidores de horário e gateway padrão que os nós do cluster de administrador usarão.

O campo searchdomainsfordns é uma matriz de domínios de pesquisa DNS a serem usados no cluster. Esses domínios são usados como parte de uma lista de pesquisa de domínio.

Como configurar IPs estáticos no cluster de usuário

Para especificar os endereços IP estáticos que você quer usar no cluster de usuário, crie um arquivo de configuração de host chamado user-hostconfig.yaml.

Veja a seguir um exemplo de arquivo de configuração de host com três hosts:

hostconfig:
  dns: 172.16.255.1
  tod: 192.138.210.214
  otherdns:
  - 8.8.8.8
  - 8.8.4.4
  othertod:
  - ntp.ubuntu.com
  searchdomainsfordns:
  - "my.local.com"
blocks:
  - netmask: 255.255.252.0
    gateway: 110.116.232.1
    ips:
    - ip: 172.16.20.15
      hostname: user-host1
    - ip: 172.16.20.16
      hostname: user-host2
    - ip: 172.16.20.17
      hostname: user-host3

O campo ips é uma matriz de endereços IP e nomes de host. Esses são os endereços IP e nomes de host que o GKE On-Prem atribuirá aos nós do cluster de usuário.

O campo searchdomainsfordns é uma matriz de domínios de pesquisa DNS a serem usados no cluster. Esses domínios são usados como parte de uma lista de pesquisa de domínio.

Como criar um arquivo de configuração do GKE On-Prem

Copie o seguinte YAML para um arquivo chamado config.yaml.

bundlepath: "/var/lib/gke/bundles/gke-onprem-vsphere-1.2.2-gke.2-full.tgz"
vcenter:
  credentials:
    address: ""
    username: ""
    password: ""
  datacenter: ""
  datastore: ""
  cluster: ""
  network: ""
  resourcepool: ""
  datadisk: ""
  cacertpath: ""
proxy:
  url: ""
  noproxy: ""
admincluster:
  ipblockfilepath: "admin-hostconfig.yaml"
  bigip:
    credentials: &bigip-credentials
      address: ""
      username: ""
      password: ""
    partition: ""
  vips:
    controlplanevip: ""
    ingressvip: ""
  serviceiprange: 10.96.232.0/24
  podiprange: 192.168.0.0/16
usercluster:
  ipblockfilepath: "user-hostconfig.yaml"
  bigip:
    credentials: *bigip-credentials
    partition: ""
  vips:
    controlplanevip: ""
    ingressvip: ""
  clustername: "initial-user-cluster"
  masternode:
    cpus: 4
    memorymb: 8192
    replicas: 1
  workernode:
    cpus: 4
    memorymb: 8192
    replicas: 3
  serviceiprange: 10.96.0.0/12
  podiprange: 192.168.0.0/16
lbmode: Integrated
gkeconnect:
  projectid: ""
  registerserviceaccountkeypath: ""
  agentserviceaccountkeypath: ""
stackdriver:
  projectid: ""
  clusterlocation: ""
  enablevpc: false
  serviceaccountkeypath: ""
gcrkeypath: ""

Como modificar o arquivo de configuração

Modifique config.yaml, conforme descrito nas seções a seguir:

vcenter.credentials.address

O campo vcenter.credentials.address contém o endereço IP ou o nome do host do servidor vCenter.

Antes de preencher o vsphere.credentials.address field, faça o download do certificado de exibição do servidor vCenter e inspecione-o. Digite o comando a seguir para fazer o download do certificado e salvá-lo em um arquivo chamado vcenter.pem.

true | openssl s_client -connect [VCENTER_IP]:443 -showcerts 2>/dev/null | sed -ne '/-BEGIN/,/-END/p' > vcenter.pem

[VCENTER_IP] é o endereço IP do servidor vCenter.

Abra o arquivo de certificado para ver o nome comum e o alternativo do assunto:

openssl x509 -in vcenter.pem -text -noout

A saída mostra o nome comum (CN, na sigla em inglês) Subject. Pode ser um endereço IP ou um nome do host. Por exemplo:

Subject: ... CN = 203.0.113.100
Subject: ... CN = my-host.my-domain.example

A saída também pode incluir um ou mais nomes de DNS em Subject Alternative Name:

X509v3 Subject Alternative Name:
    DNS:vcenter.my-domain.example

Escolha o nome comum Subject ou um dos nomes de DNS em Subject Alternative Name para usar como o valor de vcenter.credentials.address no arquivo de configuração. Por exemplo:

vcenter:
  credentials:
    address: "203.0.113.1"
    ...
vcenter:
  credentials:
    address: "my-host.my-domain.example"
    ...

Você precisa escolher um valor que apareça no certificado. Por exemplo, se o endereço IP não aparecer no certificado, não será possível usá-lo para vcenter.credentials.address.

vcenter.credentials

O GKE On-Prem precisa saber o nome de usuário e a senha do servidor vCenter. Para fornecer essas informações, defina os valores username e password em vcenter.credentials. Por exemplo:

vcenter:
  credentials:
    ...
    username: "my-name"
    password: "my-password"

vcenter.datacenter, .datastore, .cluster, .network

O GKE On-Prem precisa de algumas informações sobre a estrutura do ambiente do vSphere. Defina os valores em vcenter para fornecer essas informações. Exemplo:

vcenter:
  ...
  datacenter: "MY-DATACENTER"
  datastore: "MY-DATASTORE"
  cluster: "MY-VSPHERE-CLUSTER"
  network: "MY-VIRTUAL-NETWORK"

vcenter.resourcepool

Um pool de recursos do vSphere é um agrupamento lógico de VMs no cluster do vSphere. Se você estiver usando um pool de recursos diferente do padrão, forneça um nome para vcenter.resourcepool. Por exemplo:

vcenter:
  ...
  resourcepool: "my-pool"

Se você quiser que o GKE local implante os nós no pool de recursos padrão do cluster do vSphere, forneça uma string vazia para vcenter.resourcepool. Por exemplo:

vcenter:
  ...
  resourcepool: ""

vcenter.datadisk

O GKE On-Prem cria um disco de máquina virtual (VMDK, na sigla em inglês) a fim de armazenar os dados do objeto do Kubernetes para o cluster de administrador. O instalador cria o VMDK para você, mas é necessário fornecer um nome para o VMDK no campo vcenter.datadisk. Por exemplo:

vcenter:
  ...
  datadisk: "my-disk.vmdk"
Armazenamento de dados vSAN: como criar uma pasta para o VMDK

Se você estiver usando um armazenamento de dados vSAN, será necessário colocar o VMDK em uma pasta. Você precisa criar a pasta manualmente com antecedência. Para fazer isso, use govc para criar uma pasta:

govc datastore.mkdir -namespace=true my-gke-on-prem-folder

Em seguida, defina vcenter.datadisk como o caminho do VMDK, incluindo a pasta. Por exemplo:

vcenter:
...
datadisk: "my-gke-on-prem-folder/my-disk.vmdk"

Na versão 1.1.1, um problema conhecido exige que você forneça o caminho do identificador universal exclusivo (UUID, na sigla em inglês) da pasta, em vez do caminho do arquivo, para vcenter.datadisk. Copie isso da saída do comando govc acima.

Em seguida, forneça o UUID da pasta no campo vcenter.datadisk. Não coloque uma barra antes do UUID. Por exemplo:

vcenter:
...
datadisk: "14159b5d-4265-a2ba-386b-246e9690c588/my-disk.vmdk"

Esse problema foi corrigido nas versões 1.1.2 e mais recentes.

vcenter.cacertpath

Quando um cliente, como o GKE On-Prem, envia uma solicitação ao servidor vCenter, o servidor precisa provar a própria identidade ao cliente, apresentando um certificado ou um pacote de certificados. Para verificar o certificado ou o pacote, o GKE On-Prem precisa ter o certificado raiz na cadeia de confiança.

Defina vcenter.cacertpath como o caminho do certificado raiz. Por exemplo:

vcenter:
  ...
  cacertpath: "/my-cert-folder/the-root.crt"

A instalação do VMware tem uma autoridade de certificação (CA, na sigla em inglês) que emite um certificado para o servidor vCenter. O certificado raiz na cadeia de confiança é um certificado autoassinado criado pela VMware.

Se você não quiser usar a CA do VMWare, que é o padrão, configure o VMware para usar uma autoridade de certificação diferente.

Se o servidor vCenter usar um certificado emitido pela CA do VMware padrão, haverá várias maneiras de conseguir o certificado raiz:

  • curl -k "https://[SERVER_ADDRESS]/certs/download.zip" > download.zip

    [SERVER_ADDRESS] é o endereço do servidor vCenter.

  • Em um navegador, digite o endereço do servidor vCenter. Na caixa cinza à direita, clique em Fazer o download de certificados de CA raiz confiáveis.

  • Digite este comando para receber o certificado de exibição:

    true | openssl s_client -connect [SERVER_ADDRESS]:443 -showcerts

    Na saída, encontre um URL como este: https://[SERVER_ADDRESS]/afd/vecs/ca. Digite o URL em um navegador. Isso faz o download do certificado raiz.

O arquivo transferido por download é denominado download.zip.

Instale o comando unzip e descompacte o arquivo:

sudo apt-get install unzip
unzip download.zip

Se o comando para descompactar não funcionar na primeira vez, digite o comando novamente.

Encontre o arquivo de certificado em certs/lin.

proxy

Se sua rede estiver por trás de um servidor proxy, defina proxy.url como o endereço do seu servidor proxy.

Para proxy.noproxy, forneça uma lista de endereços IP, intervalos de endereços IP, nomes de host e nomes de domínio. Quando o GKE On-Prem envia uma solicitação para um desses endereços, hosts ou domínios, ele envia a solicitação diretamente. Ele não enviará a solicitação ao servidor proxy. Exemplo:

proxy:
  url: "https://my-proxy.example.local"
  noproxy: "10.151.222.0/24, my-host.example.local,10.151.2.1"

admincluster.ipblockfilepath

Como você está usando endereços IP estáticos, é necessário ter um arquivo de configuração de host, conforme descrito em Como configurar IPs estáticos. Forneça o caminho para seu arquivo de configuração de host no campo admincluster.ipblockfilepath. Por exemplo:

admincluster:
  ipblockfilepath: "/my-config-directory/admin-hostconfig.yaml"

admincluster.bigip.credentials

O GKE On-Prem precisa saber o endereço IP ou o nome do host, o nome de usuário e a senha do balanceador de carga F5 BIG-IP. Defina os valores em admincluster.bigip para fornecer essas informações. Exemplo:

admincluster:
  ...
  bigip:
    credentials:
      address: "203.0.113.2"
      username: "my-admin-f5-name"
      password: "rJDlm^%7aOzw"

admincluster.bigip.partition

Antes, você criava uma partição BIG-IP para o cluster de administrador. Defina admincluster.bigip.partition como o nome da partição. Por exemplo:

admincluster:
  ...
  bigip:
    partition: "my-admin-f5-partition"

admincluster.vips

Defina o valor de admincluster.vips.controlplanevip como o endereço IP que você escolheu configurar no balanceador de carga para o servidor da API Kubernetes do cluster de administrador. Defina o valor de ingressvip como o endereço IP que você escolheu configurar no balanceador de carga para o serviço de entrada do cluster de administrador. Por exemplo:

admincluster:
  ...
  vips:
    controlplanevip: 203.0.113.3
    ingressvip: 203.0.113.4

admincluster.serviceiprange e admincluster.podiprange

O cluster de administrador precisa ter um intervalo de endereços IP para usar em serviços e um para usar em pods. Esses intervalos são especificados pelos campos admincluster.serviceiprange e admincluster.podiprange. Esses campos são preenchidos quando você executa gkectl create-config. Se quiser, é possível alterar os valores preenchidos para valores de sua escolha.

Os intervalos de serviços e pods não podem se sobrepor. Além disso, os intervalos de serviços e pods não podem se sobrepor a endereços IP usados para nós em nenhum cluster.

Exemplo:

admincluster:
  ...
  serviceiprange: 10.96.232.0/24
  podiprange: 192.168.0.0/16

usercluster.bigip.partition

Antes, você criava uma partição BIG-IP para o cluster de usuário. Defina usercluster.bigip.partition como o nome da partição. Por exemplo:

usercluster:
  ...
  bigip:
    partition: "my-user-f5-partition"
  ...

usercluster.vips

Defina o valor de usercluster.vips.controlplanevip como o endereço IP que você escolheu configurar no balanceador de carga para o servidor da API Kubernetes do cluster de usuário. Defina o valor de ingressvip como o endereço IP que você escolheu configurar no balanceador de carga para o serviço de entrada do cluster de usuário. Por exemplo:

usercluster:
  ...
  vips:
    controlplanevip: 203.0.113.6
    ingressvip: 203.0.113.7

usercluster.serviceiprange e usercluster.podiprange

O cluster do usuário precisa ter um intervalo de endereços IP para usar em serviços e um intervalo de endereços IP para usar em pods. Esses intervalos são especificados pelos campos usercluster.serviceiprange e usercluster.podiprange. Esses campos são preenchidos quando você executa gkectl create-config. Se preferir, é possível alterar os valores preenchidos para valores de sua escolha.

Os intervalos de serviços e pods não podem se sobrepor. Além disso, os intervalos de serviços e pods não podem se sobrepor a endereços IP usados para nós em nenhum cluster.

Exemplo:

usercluster:
  ...
  serviceiprange: 10.96.233.0/24
  podiprange: 172.16.0.0/12

Como desativar regras antiafinidade do VMware DRS

A partir da versão 1.1.0-gke.6, o GKE On-Prem cria automaticamente regras de antiafinidade do VMware Distributed Resource Scheduler (DRS) para os nós do cluster de usuário, fazendo com que eles sejam distribuídos por pelo menos três hosts físicos no seu data center (link em inglês). A partir da versão 1.1.0-gke.6, esse recurso é ativado automaticamente para novos clusters e clusters atuais.

Esse recurso exige que o ambiente vSphere atenda às seguintes condições

  • O VMware DRS está ativado. O VMware DRS requer a edição de licença do vSphere Enterprise Plus. Para saber como ativar o DRS, consulte Como ativar o VMware DRS em um cluster.
  • A conta de usuário do vSphere fornecida no campo vcenter tem a permissão Host.Inventory.EditCluster.
  • Há pelo menos três hosts físicos disponíveis.

Lembre-se de que, se você tiver uma licença padrão do vSphere, não será possível ativar o VMware DRS.

Se você não tiver o DRS ativado ou se não tiver pelo menos três hosts para os quais as VMs do vSphere podem ser programadas, adicione usercluster.antiaffinitygroups.enabled: false ao arquivo de configuração. Exemplo:

usercluster:
  ...
  antiaffinitygroups:
    enabled: false

gkeconnect

A especificação gkeconnect contém informações de que o GKE On-Prem precisa para configurar o gerenciamento dos clusters no local no console do Google Cloud.

Defina gkeconnect.projectid como o ID do projeto do Google Cloud em que você quer gerenciar os clusters locais.

Defina o valor de gkeconnect.registerserviceaccountkeypath como o caminho do arquivo de chave JSON para a conta de serviço de registro. Defina o valor de gkeconnect.agentserviceaccountkeypath como o caminho do arquivo de chave JSON para a conta de serviço de conexão.

Exemplo:

gkeconnect:
  projectid: "my-project"
  registerserviceaccountkeypath: "/my-key-directory/register-key.json"
  agentserviceaccountkeypath: "/my-key-directory/connect-key.json"

stackdriver

A especificação stackdriver contém informações que o GKE On-Prem precisa para armazenar entradas de registro geradas pelos clusters no local.

Defina stackdriver.projectid como o ID do projeto do Google Cloud que você quer associar ao pacote de operações do Google Cloud. O Connect exporta registros de cluster do Stackdriver por meio deste projeto.

Defina stackdriver.clusterlocation como uma região do Google Cloud em que você quer armazenar registros. É uma boa ideia escolher uma região próxima ao data center local.

Defina stackdriver.proxyconfigsecretname como um secret do Kubernetes definido no namespace kube-system. Esse secret precisa ter um único valor definindo https_proxy_url. O secret padrão stackdriver-proxy-config é imutável e simplesmente serve como exemplo.

Defina stackdriver.enablevpc como true se você tiver a rede do cluster controlada por uma VPC. Isso garante que toda a telemetria flua pelos endereços IP restritos do Google.

Defina stackdriver.serviceaccountkeypath como o caminho do arquivo de chave JSON para a conta de serviço do pacote de operações do Google Cloud.

Exemplo:

stackdriver:
  projectid: "my-project"
  clusterlocation: "us-west1"
  enablevpc: false
  serviceaccountkeypath: "/my-key-directory/stackdriver-key.json"

gcrkeypath

Defina o valor de gcrkeypath como o caminho do arquivo de chave JSON da sua conta de serviço permitida na lista. Por exemplo: observação: para saber mais sobre esse comando, consulte Como executar verificações de simulação.

gcrkeypath: "/my-key-directory/whitelisted-key.json"

Como validar o arquivo de configuração

Depois de modificar o arquivo de configuração, execute gkectl check-config para verificar se o arquivo é válido e pode ser usado para instalação:

gkectl check-config --config config.yaml

Se o comando retornar mensagens FAILURE, corrija os problemas e valide o arquivo novamente.

Se quiser pular as validações mais demoradas, transmita a sinalização --fast. Para pular validações individuais, use as sinalizações --skip-validation-xxx. Para saber mais sobre o comando check-config, consulte Como executar verificações de simulação.

Como executar gkectl prepare

Execute gkectl prepare para inicializar o ambiente do vSphere:

gkectl prepare --config config.yaml --skip-validation-all

Como criar os clusters de administrador e de usuário

Crie o cluster de administrador e o cluster de usuários:

gkectl create cluster --config config.yaml --skip-validation-all

O comando gkectl create cluster cria um arquivo chamado kubeconfig no diretório atual. A documentação do GKE On-Prem usa o marcador [ADMIN_CLUSTER_KUBECONFIG] para se referir a esse arquivo.

Para verificar se o cluster de administrador foi criado, digite o seguinte comando:

kubectl get nodes --kubeconfig [ADMIN_CLUSTER_KUBECONFIG]

A saída mostra os nós do cluster de administrador.

O comando gkectl create cluster cria um arquivo chamado init-user-cluster-kubeconfig no diretório atual. A documentação do GKE On-Prem usa o marcador [USER_CLUSTER_KUBECONFIG] para se referir a esse arquivo.

Para verificar se o cluster de usuário foi criado, digite o seguinte comando:

kubectl get nodes --kubeconfig [USER_CLUSTER_KUBECONFIG]

A saída mostra os nós do cluster de usuário. Exemplo:

NAME                        STATUS   ROLES    AGE   VERSION
xxxxxx-1234-ipam-15008527   Ready    <none>   12m   v1.14.7-gke.24
xxxxxx-1234-ipam-1500852a   Ready    <none>   12m   v1.14.7-gke.24
xxxxxx-1234-ipam-15008536   Ready    <none>   12m   v1.14.7-gke.24