Esta página explica como usar o Config Sync e o Terraform para criar dinamicamente recursos com âmbito de equipa numa frota de clusters. A sincronização de configurações expande as capacidades de gestão de equipas de frotas para criar e gerir configurações de infraestrutura e clusters nas suas frotas.
Este guia pressupõe que já está familiarizado com os conceitos de gestão de equipas de frotas, como os âmbitos de equipa e os espaços de nomes de frotas. Para mais informações, consulte a vista geral da gestão da equipa de frota.
Para um tutorial completo com configurações de exemplo, consulte o tutorial de posse de frota no repositório de exemplo.
Para ver uma lista dos campos suportados para a sincronização de configuração no Terraform, consulte a documentação de referência do Terraform para funcionalidades da frota do GKE.
Exemplo de fluxo de trabalho
É um administrador da plataforma que quer criar recursos dinamicamente numa frota de clusters onde diferentes equipas têm necessidades diferentes. Por exemplo, pode querer aplicar um
NetworkPolicy
aos espaços de nomes da equipa de back-end, mas não aos espaços de nomes da equipa de front-end.
Neste cenário, o procedimento para criar recursos com âmbito de equipa num espaço de nomes é o seguinte:
- Escolha ou crie a frota onde quer gerir recursos para equipas.
Configure a sua fonte de informações fidedignas. A fonte de verdade contém os objetos
NamespaceSelector
que usa para selecionar espaços de nomes ao nível da frota nos âmbitos da equipa e quaisquer recursos (como umNetworkPolicy
) que quer sincronizar nestes espaços de nomes.Crie a configuração predefinida ao nível da frota para o Config Sync. O Config Sync usa estas predefinições quando sincroniza a partir da fonte de verdade criada no passo anterior. Estas definições do Config Sync aplicam-se a quaisquer novos clusters criados na frota.
Crie clusters na sua frota.
Crie os âmbitos e os espaços de nomes da equipa de front-end e back-end para que o Config Sync possa detetar e conciliar recursos nos seus espaços de nomes.
Depois de concluir estes passos, o Config Sync cria e aplica o
NetworkPolicy
com base no NamespaceSelector
aos espaços de nomes da equipa de back-end. Se alterar ou adicionar quaisquer recursos, o Config Sync deteta e aplica continuamente quaisquer alterações aos ficheiros de configuração, âmbitos de equipa, espaços de nomes da frota e membros da frota.
Preços
As funcionalidades de gestão de equipas de frotas e de sincronização de configurações estão disponíveis como parte do GKE. Para mais informações sobre preços, consulte a página de preços do GKE.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
- Criar ou ter acesso a uma fonte prioritária (um repositório Git ou uma imagem OCI) onde pode armazenar os seus ficheiros de configuração. Os exemplos neste guia usam um repositório Git.
-
Gerir recursos da frota:
Administrador da frota (anteriormente, administrador do GKE Hub) (
roles/gkehub.admin
) -
Criar clusters do GKE:
Administrador do cluster do Kubernetes Engine (
roles/container.clusterAdmin
) Crie um diretório para os ficheiros Terraform de configuração da frota. Adicione um ficheiro
main.tf
e um ficheirovariables.tf
a esse diretório.No ficheiro
variables.tf
, adicione as seguintes variáveis:No ficheiro
main.tf
, adicione os seguintes recursos:Exporte a variável PROJECT_ID:
export TF_VAR_project=PROJECT_ID
Substitua
PROJECT_ID
pelo ID do projeto onde quer criar a sua frota.Inicialize o Terraform no diretório que criou:
terraform init
Verifique se as alterações que propõe com o Terraform correspondem ao plano esperado:
terraform plan
Crie a frota, ative as APIs e crie a conta de serviço:
terraform apply
Por vezes, pode demorar alguns minutos a ativar todos os serviços.
Na sua fonte de verdade, crie um diretório para os ficheiros de configuração que quer que o Config Sync sincronize.
Para cada equipa, crie um objeto
NamespaceSelector
no diretório de configuração:apiVersion: configmanagement.gke.io/v1 kind: NamespaceSelector metadata: name: NAMESPACE_SELECTOR_NAME spec: mode: dynamic selector: matchLabels: fleet.gke.io/fleet-scope: SCOPE_NAME
Substitua o seguinte:
NAMESPACE_SELECTOR_NAME
: o nome do objetoNamespaceSelector
, por exemplo,backend-scope
.SCOPE_NAME
: o nome do âmbito da equipa, por exemplo,backend
.
Todos os espaços de nomes que fazem parte de um espaço de nomes da frota têm automaticamente a etiqueta
fleet.gke.io/fleet-scope: SCOPE_NAME
. O comandoNamespaceSelector
seleciona todos os espaços de nomes da frota de um âmbito de equipa que usem essa etiqueta. Para ver mais exemplos sobre como incluir ou excluir espaços de nomes, consulte osNamespaceSelector
exemplos.Crie todos os objetos que quer sincronizar entre namespaces.
Para sincronizar um objeto apenas com uma equipa específica, defina a seguinte anotação nos metadados desse objeto:
annotations: configmanagement.gke.io/namespace-selector: NAMESPACE_SELECTOR_NAME
Por exemplo, um
NetworkPolicy
para a equipa de back-end pode ser semelhante ao seguinte:Crie um diretório para os ficheiros Terraform da configuração predefinida da frota. Adicione um ficheiro
main.tf
e um ficheirovariables.tf
a esse diretório.No ficheiro
variables.tf
, adicione as seguintes variáveis:No ficheiro
main.tf
, adicione o seguinte recurso para configurar as definições do Config Sync:git
terraform { required_providers { google = { source = "hashicorp/google" version = ">=5.16.0" } } } provider "google" { project = var.project } resource "google_gke_hub_feature" "feature" { name = "configmanagement" location = "global" provider = google fleet_default_member_config { configmanagement { version = "VERSION" config_sync { source_format = "unstructured" git { sync_repo = "REPO" sync_branch = "BRANCH" policy_dir = "DIRECTORY" secret_type = "SECRET" } } } } }
Substitua o seguinte:
VERSION
: (opcional) o número da versão do Config Sync. Se deixar em branco, a predefinição é a versão mais recente.REPO
: o URL do repositório que contém os seus ficheiros de configuração.BRANCH
: o ramo do repositório, por exemplo,main
.DIRECTORY
: o caminho no repositório Git que representa o nível superior do repositório que quer sincronizar.SECRET
: o tipo de autenticação secreta.
Para ver uma lista completa das definições suportadas no bloco
git
Config Sync, consulte a documentação de referência do Terraform para funcionalidades do GKE Hub.OCI
terraform { required_providers { google = { source = "hashicorp/google" version = ">=5.16.0" } } } provider "google" { project = var.project } resource "google_gke_hub_feature" "feature" { name = "configmanagement" location = "global" provider = google fleet_default_member_config { configmanagement { version = "VERSION" config_sync { source_format = "unstructured" oci { sync_repo = "REPO" policy_dir = "DIRECTORY" secret_type = "SECRET" } } } } }
Substitua o seguinte:
VERSION
: o número da versão do Config Sync. Se deixar em branco, a predefinição é a versão mais recente.REPO
: o URL para o repositório de imagens da OCI que contém ficheiros de configuração.DIRECTORY
: o caminho absoluto do diretório que contém os recursos que quer sincronizar. Deixe em branco para usar o diretório raiz.SECRET
: o tipo de autenticação secreta.
Para ver uma lista completa das definições suportadas no bloco
oci
Config Sync, consulte a documentação de referência do Terraform para funcionalidades do GKE Hub.Por exemplo, o ficheiro
main.tf
seguinte configura o Config Sync para sincronizar a partir de um repositório Git e sincroniza todos os objetos presentes no diretórioconfig
:Inicialize o Terraform no diretório que criou:
terraform init
Verifique se as alterações que propõe com o Terraform correspondem ao plano esperado:
terraform plan
Crie as configurações de membro da frota predefinidas:
terraform apply
Crie um diretório para os ficheiros Terraform de configuração do cluster. Adicione um ficheiro
main.tf
e um ficheirovariables.tf
a esse diretório.No ficheiro
variables.tf
, adicione as seguintes variáveis:Crie um ficheiro
cluster.tf
que contenha os valores predefinidos usados em todos os seus clusters, como os IDs do projeto e da frota:variable "location" { type = string } variable "cluster_name" { type = string } data "google_project" "project" { provider = google } resource "google_container_cluster" "cluster" { provider = google name = var.cluster_name location = var.location initial_node_count = 3 project = data.google_project.project.project_id fleet { project = data.google_project.project.project_id } workload_identity_config { workload_pool = "${data.google_project.project.project_id}.svc.id.goog" } deletion_protection = false }
No ficheiro
main.tf
, adicione os seguintes recursos:terraform { required_providers { google = { source = "hashicorp/google" version = ">=5.16.0" } } } provider "google" { project = var.project } module "MODULE_NAME" { source = "CLUSTER_CONFIGURATION_FILEPATH" cluster_name = "CLUSTER_NAME" location="CLUSTER_LOCATION" }
Substitua o seguinte:
MODULE_NAME
: o nome que quer dar ao módulo de clusters. MODULE_NAME e CLUSTER_NAME podem ter o mesmo valor, por exemplo,us-east-cluster
.CLUSTER_CONFIGURATION_FILEPATH
: o caminho relativo para o ficheirocluster.tf
que criou.CLUSTER_NAME
: o nome do cluster. MODULE_NAME e CLUSTER_NAME podem ter o mesmo valor, por exemplo,us-east-cluster
.CLUSTER_LOCATION
: a localização do seu cluster, por exemplo,us-east1
.
Pode criar quantos clusters quiser. Por exemplo, o ficheiro
main.tf
seguinte cria 3 clusters em regiões diferentes:Inicialize o Terraform no diretório que criou:
terraform init
Verifique se as alterações que propõe com o Terraform correspondem ao plano esperado:
terraform plan
Crie os clusters:
terraform apply
Crie um diretório para os ficheiros Terraform de configuração do espaço de nomes e do âmbito da equipa. Adicione um ficheiro
main.tf
e um ficheirovariables.tf
a esse diretório.No ficheiro
variables.tf
, adicione as seguintes variáveis:No ficheiro
main.tf
, adicione os seguintes recursos:Adicione as informações do fornecedor:
terraform { required_providers { google = { source = "hashicorp/google" version = ">=5.16.0" } } } provider "google" { project = var.project }
Adicione o recurso de âmbito da equipa:
resource "google_gke_hub_scope" "scope" { provider = google for_each = toset([ "SCOPE_NAME", "SCOPE_NAME_2", ]) scope_id = each.value }
Substitua o seguinte:
SCOPE_NAME
: o nome do âmbito da equipa, por exemplo,backend
.SCOPE_NAME_2
: um âmbito da equipa adicional, se tiver criado um.
Pode adicionar todos os âmbitos de equipa de que precisar. Quando um espaço de nomes da frota é criado no cluster, o espaço de nomes é etiquetado automaticamente com
fleet.gke.io/fleet-scope: SCOPE_NAME
, o que permite que o Config Sync selecione espaços de nomes com base nas etiquetasNamespaceSelector
presentes ao sincronizar recursos do Kubernetes.Por exemplo, um recurso do Terraform de âmbito de equipa que inclua um âmbito para a equipa de front-end e de back-end pode ser semelhante ao seguinte:
Adicione uma associação de membro da frota para cada cluster que quer aplicar a um âmbito da equipa:
resource "google_gke_hub_membership_binding" "membership-binding" { provider = google for_each = { MEMBERSHIP_BINDING_NAME = { membership_binding_id = "MEMBERSHIP_BINDING_ID" scope = google_gke_hub_scope.scope["SCOPE_NAME"].name membership_id = "CLUSTER_NAME" location = "CLUSTER_LOCATION" } MEMBERSHIP_BINDING_NAME_2 = { membership_binding_id = "MEMBERSHIP_BINDING_ID_2" scope = google_gke_hub_scope.scope["SCOPE_NAME_2"].name membership_id = "CLUSTER_NAME_2" location = "CLUSTER_LOCATION_2" } } membership_binding_id = each.value.membership_binding_id scope = each.value.scope membership_id = each.value.membership_id location = each.value.location depends_on = [google_gke_hub_scope.scope] }
Substitua o seguinte:
MEMBERSHIP_BINDING_NAME
: o nome da associação de membro, por exemplo,us-east-backend
.MEMBERSIP_BINDING_ID
: o ID de associação de membro. Pode ser igual ao MEMBERSHIP_BINDING_NAME.SCOPE_NAME
: o seletor de etiquetas que atribuiu ao âmbito da equipa quando criou umNamespaceSelector
, por exemplo,backend
.CLUSTER_NAME
: o nome do cluster que criou quando criou clusters, por exemplo,us-east-cluster
.CLUSTER_LOCATION
: a localização do cluster, por exemplo,us-east1
.
Tem de definir uma associação de membro da frota para cada cluster. Se não definir um âmbito da equipa para um cluster, esse cluster não é criado para esse espaço de nomes. Por exemplo, se tiver três clusters nas regiões
us-east1
,us-west1
eus-central1
, mas o clusterus-central1
for apenas para a equipa de front-end, o recurso de associação de membros seria semelhante ao seguinte:Adicione os espaços de nomes que quer definir para as suas equipas:
resource "google_gke_hub_namespace" "fleet_namespace" { provider = google for_each = { FLEET_NAMESPACE = { scope_id = "SCOPE_NAME" scope_namespace_id = "FLEET_NAMESPACE_ID" scope = google_gke_hub_scope.scope["SCOPE_NAME"].name } FLEET_NAMESPACE_2 = { scope_id = "SCOPE_NAME" scope_namespace_id = "FLEET_NAMESPACE_ID_2" scope = google_gke_hub_scope.scope["SCOPE_NAME"].name } } scope_namespace_id = each.value.scope_namespace_id scope_id = each.value.scope_id scope = each.value.scope depends_on = [google_gke_hub_scope.scope] }
Substitua o seguinte:
FLEET_NAMESPACE
: o nome que quer dar ao espaço de nomes, por exemplo,backend-a
.SCOPE_NAME
: o seletor de etiquetas que atribuiu ao âmbito da equipa quando criou umNamespaceSelector
, por exemplo,backend
.FLEET_NAMESPACE_ID
: o ID do espaço de nomes. Pode ser o mesmo valor que FLEET_NAMESPACE.
Por exemplo, se quiser que as equipas de front-end e back-end tenham 2 namespaces cada, o recurso de namespace da frota pode ser semelhante ao seguinte:
Inicialize o Terraform no diretório que criou:
terraform init
Verifique se as alterações que propõe com o Terraform correspondem ao plano esperado:
terraform plan
Crie os âmbitos e os espaços de nomes da frota:
terraform apply
- Saiba mais sobre como configurar equipas para a sua frota.
Funções necessárias
Para receber as autorizações de que precisa para criar recursos de equipa para a sua frota, peça ao seu administrador que lhe conceda as seguintes funções do IAM no seu projeto:
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
Adquira credenciais de utilizador
Para executar os comandos do Terraform neste guia no seu ambiente local, execute o seguinte comando para adquirir novas credenciais de utilizador:
gcloud auth application-default login
Configure a sua frota
Nesta secção, cria a sua frota e ativa os serviços necessários.
Para configurar a sua frota, conclua os seguintes passos:
Configure a sua fonte de dados fidedignos
Nesta secção, adiciona ficheiros de configuração a uma fonte de verdade.
Precisa de um objeto NamespaceSelector
para cada âmbito da equipa que quer usar.
Por exemplo, se tiver equipas de front-end e back-end, tem de criar um objeto NamespaceSelector
para cada equipa. O objeto NamespaceSelector
seleciona todos ou alguns dos
espaços de nomes no âmbito de uma equipa. Pode adicionar recursos adicionais da equipa
à sua fonte de verdade, como um NetworkPolicy
. Quando cria estes recursos, faz referência ao NamespaceSelector
para que o Config Sync possa implementar e sincronizar esses recursos dinamicamente em todos os espaços de nomes.
Para configurar a sua fonte de dados fidedignos, conclua os seguintes passos:
Crie predefinições ao nível da frota para o Config Sync
Nesta secção, cria predefinições ao nível da frota para a sincronização de configuração, que aplica a mesma configuração de sincronização de configuração a todos os clusters criados na sua frota.
Para criar uma configuração predefinida ao nível da frota para o Config Sync, conclua os seguintes passos:
Crie clusters na sua frota
Nesta secção, cria uma configuração de cluster partilhada e, em seguida, cria clusters na sua frota.
Para criar e registar novos clusters na sua frota, conclua os seguintes passos:
Configure âmbitos de equipa e espaços de nomes de frotas
Nesta secção, cria os âmbitos da equipa e associa os seus clusters a esses âmbitos. Em seguida, cria os namespaces da frota de que precisa, por exemplo, um para cada equipa, em cada âmbito, e o Config Sync cria os recursos nos seus namespaces.
Para configurar âmbitos e espaços de nomes da equipa, conclua os seguintes passos:
Depois de criar âmbitos da frota e espaços de nomes, o Config Sync deteta esses novos espaços de nomes e os respetivos âmbitos, seleciona recursos nos espaços de nomes da frota e reconcilia-os com os seus ficheiros de configuração.
Pode verificar se os seus recursos são aplicados ao cluster correto através de nomos status
ou visitando o separador Packages do Config Sync na Google Cloud consola e alterando o botão de opção Ver por para Cluster.
O Config Sync sincroniza os seus recursos entre espaços de nomes com base nos âmbitos da equipa
de acordo com a configuração armazenada na sua fonte de verdade. Sempre que adicionar um novo recurso,
desde que inclua a anotação NamespaceSelector
correta, o Config Sync
concilia automaticamente esse recurso nos espaços de nomes da sua equipa.
Se quiser aplicar as definições do Config Sync aos seus clusters existentes, consulte as instruções para Configurar predefinições ao nível da frota no guia de instalação do Config Sync.