Nesta página, explicamos como configurar a alocação de vários clusters para o Game Servers A alocação de vários clusters permite que você solicite um GameServer
em um estado Ready
de um cluster em um realm e receba um GameServer
em estado Ready
de qualquer cluster alocado nesse realm. A alocação de vários clusters requer configuração manual para permitir que os clusters se conectem uns aos outros e também ao endpoint da alocação de vários clusters.
Para saber mais sobre alocações GameServer
, consulte o guia de início rápido sobre como criar uma frota do Game Servers do Agones para ter uma visão geral.
Antes de começar
Antes de começar, recomendamos que você se familiarize com os principais conceitos na Visão geral do Game Servers. Verifique se você também realizou as seguintes tarefas:
- Verifique se você ativou a API Game Services. Ativar a API Game Services
- Escolha um shell com a CLI gcloud instalada ou use um cliente de API:
Acesse o Console do Google Cloud.
No canto superior direito do console, clique no botão Ativar Cloud Shell:
- Crie uma conta de serviço.
- Faça o download de uma chave privada como um arquivo JSON.
-
Set the environment variable
GOOGLE_APPLICATION_CREDENTIALS
to the path of the JSON file that contains your credentials. This variable applies only to your current shell session, so if you open a new session, set the variable again.
Cloud Shell
Para iniciar o Cloud Shell, execute os seguintes passos:
Uma sessão do Cloud Shell é aberta dentro de um quadro inferior no console.
Use esse shell para executar comandos gcloud
.
Shell local
Instale a CLI gcloud.
Verifique se você definiu o projeto padrão desejado para a Google Cloud CLI. Caso contrário, será necessário especificar a sinalização --project
explicitamente para cada comando mais tarde:
gcloud config list project
Caso contrário, execute o seguinte comando para definir um projeto padrão, substituindo PROJECT_ID
pelo ID do projeto que você quer:
gcloud config set project PROJECT_ID
Execute o seguinte comando para verificar a versão da Google Cloud CLI.
O Game Servers requer a versão 306.0.0
ou mais recente da CLI gcloud.
gcloud version
Para atualizar a instalação, execute o seguinte comando:
gcloud components update
curl / PowerShell
Para usar a API REST com curl
ou o Windows PowerShell, faça o
seguinte:
Biblioteca de cliente
O Game Servers do Google Cloud pode ser controlado de maneira programática usando uma biblioteca de cliente. Consulte Visão geral das bibliotecas de cliente para instruções sobre como usar a biblioteca e fazer a autenticação.
Como configurar o serviço de alocador do Agones
Verifique se o serviço de alocador do Agones
está configurado para a instalação do Agones e se a alocação de cluster único funciona usando o mesmo
guia.
Observe que, por padrão, o serviço agones-allocator
não tem um certificado de
serviço válido instalado e que
o certificado precisa ser substituído.
É possível reservar um endereço IP regional do Google Cloud Platform e instalar o
agones-allocator
usando o IP reservado, que também emite um certificado
válido para o serviço. Para reservar um IP, execute o seguinte comando:
gcloud compute addresses create allocator-service --region REGION
Para encontrar o IP reservado, execute o seguinte comando:
gcloud compute addresses describe allocator-service --region REGION --format="value(address)"
Em seguida, instale/faça upgrade do Agones passando o IP reservado como RESERVED_IP do comando anterior:
helm upgrade RELEASE --install --set agones.allocator.http.loadBalancerIP=RESERVED_IP --set agones.allocator.service.loadBalancerIP=RESERVED_IP --namespace agones-system --create-namespace agones/agones
RESERVED_IP é o endereço IP a ser usado para o serviço agones-allocator
.
RELEASE é o nome da versão do Agones para a instalação do gráfico do Helm.
Como instalar o Citadel
O Game Servers usa o projeto Citadel como gerenciador de certificados para o certificado de alocação de vários clusters do lado do cliente, usado pelo Agones para facilitar conexões seguras entre clusters. Você precisa instalá-lo em cada cluster do Google Kubernetes Engine registrado com o Game Servers.
Para cada namespace no cluster, o Citadel emitirá um secret
istio.default
do Kubernetes usado pelo Game Servers como certificado do lado do cliente.
Pule esta etapa se já tiver instalado o Istio no cluster do Google Kubernetes Engine. Atualmente, há problemas conhecidos com a compatibilidade do Agones com uma instalação completa do Istio.
Se você for usuário do Terraform, poderá instalar o Citadel usando o Terraform. Você pode analisar os arquivos de configuração de exemplo sobre como instalar o Citadel usando o Terraform no GitHub.
Este guia pressupõe que você tenha as ferramentas de linha de comando instaladas para o helm v3 e o git.
Para instalar o Citadel:
Clone o repositório do Istio no GitHub:
git clone -b release-1.5 https://github.com/istio/istio.git
Crie um novo namespace para o Istio:
kubectl create ns istio-system
Copie e execute cada um dos seguintes comandos para gerar arquivos de instalação do Citadel YAML a partir dos modelos do Helm do Istio:
helm template istio/install/kubernetes/helm/istio --name-template istio --namespace istio-system -s charts/security/templates/serviceaccount.yaml -s charts/security/templates/clusterrole.yaml -s charts/security/templates/clusterrolebinding.yaml -s charts/security/templates/deployment.yaml > citadel.yaml
Em seguida, execute o comando a seguir para aplicar ao cluster do Google Kubernetes Engine o arquivo YAML gerado na etapa anterior:
kubectl apply -f citadel.yaml
Valide se a Citadel está funcionando corretamente:
kubectl get pods --namespace=istio-system
Verifique se a implantação do Citadel está em execução em um único pod.
Requisitos de rede para alocação de vários clusters
Para que a alocação de vários clusters funcione em seu realm, você precisa garantir que cada cluster esteja executando um serviço de alocação em que o serviço tem um endereço externo público.
Para verificar se isso está configurado, verifique se um balanceador de carga externo está alocado para o serviço:
kubectl get service agones-allocator -n agones-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
agones-allocator LoadBalancer 10.86.3.77 RESERVED_IP 443:30219/TCP
RESERVED_IP não pode estar vazio.
Como validar a alocação de vários clusters
Para testar o processo de alocação, conclua as seguintes etapas:
Registre dois clusters do Game Servers no seu realm e configure-os para alocação de vários clusters conforme mostrado acima.
Crie uma configuração de servidores de jogos com uma especificação de frota que tenha réplicas definidas como
5
e o rótulogameName: udp-server
aplicado.Atualize o lançamento da implantação do Game Servers para ativar a configuração.
Copie o seguinte YAML para um LOCAL_FILE :
apiVersion: "allocation.agones.dev/v1" kind: GameServerAllocation spec: multiClusterSetting: enabled: true required: matchLabels: gameName: udp-server
Use o seguinte comando para aplicar o arquivo YAML a um dos clusters do Game Servers no seu realm:
kubectl create -f LOCAL_FILE -o yaml
Isso alocará uma das dez réplicas prontas nos dois clusters. Repita o comando mais nove vezes e garanta que todas as dez réplicas em ambos os clusters estejam alocadas.
Agora, qualquer endpoint em qualquer cluster no realm pode ser usado para alocar um
GameServer
de qualquer cluster no realm. As alocações de GameServer
são balanceadas por carga em todos os clusters no realm usando um esquema round-robin.
Solução de problemas
Se você tiver problemas com os procedimentos deste guia, recomendamos que consulte os seguintes documentos de solução de problemas:
- Solução de problemas do serviço de alocador do Agones
- Solução de problemas da alocação de vários clusters do Agones
Nenhuma política de alocação de vários clusters foi especificada
Você tenta alocar um servidor de jogo e vê o seguinte erro:
no multi-cluster allocation policy is specified
Verifique se você
instalou o Citadel
corretamente no cluster certificando-se de que o secret istio.default
seja criado pelo Citadel no namespace do servidor de jogos:
kubectl get secret istio.default -n NAMESPACE
Certificado assinado por autoridade desconhecida
Você tenta alocar um servidor de jogo e vê o seguinte erro:
transport: authentication handshake failed: x509: certificate signed by unknown authority
Verifique se você definiu corretamente o secret allocator-tls-ca
do Kubernetes para todos os clusters. A instalação do Helm também atualiza o secret allocator-tls-ca
, mas se você alterar manualmente o secret TLS, será necessário atualizar o secret allocator-tls-ca
também. Para verificar a autoridade de certificação, execute os seguintes comandos:
kubectl get secret allocator-tls-ca -n agones-system -ojsonpath="{.data.tls-ca\.crt}" | base64 -d > ca.crt kubectl get secret allocator-tls -n agones-system -ojsonpath="{.data.tls\.crt}" | base64 -d > tls.crt openssl verify -verbose -CAfile ca.crt tls.crt
A verificação deve imprimir tls.crt: OK
.
Causa raiz corrigida, e o problema permanece
A reconciliação das alterações feitas em um único cluster em todos os clusters pode levar até uma hora. É possível acionar a reconciliação imediatamente alterando os recursos dos Game Servers, por exemplo, atualizando rótulos em um recurso de realm:
gcloud game servers realms update REALM_NAME --update-labels=usage=testing --location=REALM_LOCATION
A seguir
- Saiba como registrar um cluster.