Faça a gestão dos recursos da equipa em toda a sua frota

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:

  1. Escolha ou crie a frota onde quer gerir recursos para equipas.
  2. 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 um NetworkPolicy) que quer sincronizar nestes espaços de nomes.

  3. 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.

  4. Crie clusters na sua frota.

  5. 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

  1. 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.
  2. Install the Google Cloud CLI.

  3. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  4. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  5. 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 the resourcemanager.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.

  6. Install the Google Cloud CLI.

  7. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  8. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  9. 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 the resourcemanager.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.

  10. 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.
  11. 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:

    1. Crie um diretório para os ficheiros Terraform de configuração da frota. Adicione um ficheiro main.tf e um ficheiro variables.tf a esse diretório.

    2. No ficheiro variables.tf, adicione as seguintes variáveis:

      variable "project" {
        type = string
        description = "GCP project ID"
      }

    3. No ficheiro main.tf, adicione os seguintes recursos:

      terraform {
        required_providers {
          google = {
            source = "hashicorp/google"
            version = ">= 5.16.0"
          }
        }
      }
      
      provider "google" {
        # project variable must be provided at runtime
        project = var.project
      }
      
      # Enable API services
      resource "google_project_service" "services" {
        for_each = toset([
          "gkehub.googleapis.com",
          "container.googleapis.com",
          "connectgateway.googleapis.com",
          "cloudresourcemanager.googleapis.com",
          "iam.googleapis.com",
          "anthos.googleapis.com",
          "anthosconfigmanagement.googleapis.com",
        ])
        service = each.value
        disable_on_destroy = false
      }
      
      # Declare a fleet in the project
      resource "google_gke_hub_fleet" "default" {
        display_name = "demo"
      
        depends_on = [google_project_service.services]
      }
    4. 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.

    5. Inicialize o Terraform no diretório que criou:

      terraform init
      
    6. Verifique se as alterações que propõe com o Terraform correspondem ao plano esperado:

      terraform plan
      
    7. 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.

    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:

    1. Na sua fonte de verdade, crie um diretório para os ficheiros de configuração que quer que o Config Sync sincronize.

    2. 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 objeto NamespaceSelector, 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 comando NamespaceSelector 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 os NamespaceSelector exemplos.

    3. 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:

      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
        name: be-deny-all
        annotations:
          configmanagement.gke.io/namespace-selector: backend-scope # Actuate this resource in the namespaces with labels matched by the namespace selector
      spec:
        ingress:
        - from:
          - podSelector: {}
        podSelector:
          matchLabels: null

    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:

    1. Crie um diretório para os ficheiros Terraform da configuração predefinida da frota. Adicione um ficheiro main.tf e um ficheiro variables.tf a esse diretório.

    2. No ficheiro variables.tf, adicione as seguintes variáveis:

      variable "project" {
        type = string
        description = "GCP project ID"
      }

    3. 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 gitConfig 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 ociConfig 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ório config:

      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 = "1.17.0" # Use the default latest version; if specifying a version, it must be at or after 1.17.0
            config_sync {
              source_format = "unstructured"
              git {
                sync_repo = "https://github.com/GoogleCloudPlatform/anthos-config-management-samples"
                sync_branch = "main"
                policy_dir = "fleet-tenancy/config"
                secret_type = "none"
              }
            }
          }
        }
      }
    4. Inicialize o Terraform no diretório que criou:

      terraform init
      
    5. Verifique se as alterações que propõe com o Terraform correspondem ao plano esperado:

      terraform plan
      
    6. Crie as configurações de membro da frota predefinidas:

      terraform apply
      

    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:

    1. Crie um diretório para os ficheiros Terraform de configuração do cluster. Adicione um ficheiro main.tf e um ficheiro variables.tf a esse diretório.

    2. No ficheiro variables.tf, adicione as seguintes variáveis:

      variable "project" {
        type = string
        description = "GCP project ID"
      }

    3. 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
      }
      
    4. 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 ficheiro cluster.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:

      terraform {
        required_providers {
          google = {
            source = "hashicorp/google"
            version = ">= 5.16.0"
          }
        }
      }
      
      provider "google" {
        project = var.project
      }
      
      module "us-west-cluster" {
        source = "./cluster"
        cluster_name = "us-west-cluster"
        location="us-west1-a"
      }
      
      module "us-east-cluster" {
        source = "./cluster"
        cluster_name = "us-east-cluster"
        location="us-east1-b"
      }
      
      module "us-central-cluster" {
        source = "./cluster"
        cluster_name = "us-central-cluster"
        location="us-central1-c"
      }
    5. Inicialize o Terraform no diretório que criou:

      terraform init
      
    6. Verifique se as alterações que propõe com o Terraform correspondem ao plano esperado:

      terraform plan
      
    7. Crie os clusters:

      terraform apply
      

    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:

    1. 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 ficheiro variables.tf a esse diretório.

    2. No ficheiro variables.tf, adicione as seguintes variáveis:

      variable "project" {
        type = string
        description = "GCP project ID"
      }
      

    3. No ficheiro main.tf, adicione os seguintes recursos:

      1. Adicione as informações do fornecedor:

        terraform {
          required_providers {
            google = {
              source = "hashicorp/google"
              version = ">=5.16.0"
             }
           }
         }
        
        provider "google" {
          project = var.project
        }
        
      2. 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 etiquetas NamespaceSelector 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:

        resource "google_gke_hub_scope" "scope" {
          provider = google
          for_each = toset([
            "backend",
            "frontend",
          ])
          scope_id = each.value
        }
      3. 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 um NamespaceSelector, 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 e us-central1, mas o cluster us-central1 for apenas para a equipa de front-end, o recurso de associação de membros seria semelhante ao seguinte:

        resource "google_gke_hub_membership_binding" "membership-binding" {
          provider = google
          for_each = {
            us-east-backend = {
              membership_binding_id = "us-east-backend"
              scope = google_gke_hub_scope.scope["backend"].name
              membership_id = "us-east-cluster"
              location = "us-east1"
            }
            us-west-backend = {
              membership_binding_id = "us-west-backend"
              scope = google_gke_hub_scope.scope["backend"].name
              membership_id = "us-west-cluster"
              location = "us-west1"
            }
            us-east-frontend = {
              membership_binding_id = "us-east-frontend"
              scope = google_gke_hub_scope.scope["frontend"].name
              membership_id = "us-east-cluster"
              location = "us-east1"
            }
            us-west-frontend = {
              membership_binding_id = "us-west-frontend"
              scope = google_gke_hub_scope.scope["frontend"].name
              membership_id = "us-west-cluster"
              location = "us-west1"
            }
            us-central-frontend = {
              membership_binding_id = "us-central-frontend"
              scope = google_gke_hub_scope.scope["frontend"].name
              membership_id = "us-central-cluster"
              location = "us-central1"
            }
          }
        
          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]
        }
      4. 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 um NamespaceSelector, 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:

        resource "google_gke_hub_namespace" "fleet_namespace" {
          provider = google
        
          for_each = {
            bookstore = {
              scope_id = "backend"
              scope_namespace_id = "bookstore"
              scope = google_gke_hub_scope.scope["backend"].name
            }
            shoestore = {
              scope_id = "backend"
              scope_namespace_id = "shoestore"
              scope = google_gke_hub_scope.scope["backend"].name
            }
            frontend_a = {
              scope_id = "frontend"
              scope_namespace_id = "frontend-a"
              scope = google_gke_hub_scope.scope["frontend"].name
            }
            frontend_b = {
              scope_id = "frontend"
              scope_namespace_id = "frontend-b"
              scope = google_gke_hub_scope.scope["frontend"].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]
        }
    4. Inicialize o Terraform no diretório que criou:

      terraform init
      
    5. Verifique se as alterações que propõe com o Terraform correspondem ao plano esperado:

      terraform plan
      
    6. Crie os âmbitos e os espaços de nomes da frota:

      terraform apply
      

    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.

    Aceda a Pacotes

    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.

    O que se segue?