Nesta página, apresentaremos a arquitetura do Config Sync. Aprender sobre os componentes criados pelo Config Sync pode ajudar você a entender melhor o serviço e a depurar e corrigir os problemas encontrados.
O diagrama a seguir mostra a arquitetura do Config Sync e os recursos relacionados em um cluster da edição Enterprise do Google Kubernetes Engine (GKE):
Neste diagrama, o usuário cria uma fonte de verdade e instala o Config Sync usando o Gerenciador de recursos.
Há várias etapas para instalar o Config Sync, e cada uma delas implanta componentes adicionais no cluster:
Ativar o Config Sync no cluster adiciona os seguintes componentes:
- O ConfigManagement Operator em uma implantação chamada
config-management-operator
. - A definição de recurso personalizado (CRD)
ConfigManagement
e o objeto chamadoconfig-management
. - O Reconciler Manager em uma implantação chamada
reconciler-manager
. - O controlador ResourceGroup em uma implantação chamada
resource-group-controller-manager
. - O Coletor do OpenTelemetry em
uma implantação chamada
otel-collector
. - Opcional: o webhook de admissão do Config Sync em uma implantação chamada
admission-webhook
.
A maioria desses recursos e objetos é criada automaticamente ao instalar o Config Sync. Não é necessário modificá-los.
- O ConfigManagement Operator em uma implantação chamada
A criação dos objetos
RootSync
eRepoSync
adiciona os seguintes componentes:- Para cada
RootSync
, uma implantação de reconciliação com o nomeroot-reconciler-ROOTSYNC_NAME
. - Para cada
RepoSync
, uma implantação de reconciliação com o nomens-reconciler-REPOSYNC_NAMESPACE-REPOSYNC_NAME-REPOSYNC_NAME_LENGTH
.
- Para cada
Implantações, pods e contêineres do Config Sync
A tabela a seguir fornece mais informações sobre a implantação, os pods e os contêineres do Config Sync:
Nome da implantação | Namespace da implantação | Descrição da implantação | Contagem de réplicas | Expressão regular do nome do pod | Contagem de contêineres | Nomes de contêiner |
---|---|---|---|---|---|---|
config-management-operator |
config-management-system |
O ConfigManagement Operator é executado em todos os clusters com o Config Sync
instalado. Ele monitora o objeto ConfigManagement e gerencia
componentes do Config Sync, como o gerenciador de reconciliação e o coletor do
OpenTelemetry. |
1 | config-management-operator-.* |
1 | manager |
reconciler-manager |
config-management-system |
O gerenciador de reconciliação é executado em todos os clusters com o Config Sync
ativado no objeto ConfigManagement . Ele monitora
objetos RootSync
e RepoSync e gerencia uma implantação de reconciliação
para cada um. |
1 | reconciler-manager-.* |
2 | reconciler-manager otel-agent |
root-reconciler |
config-management-system |
Uma implantação de reconciliação raiz é criada para cada objeto RootSync . |
1 | root-reconciler-.* |
3 - 51 |
reconciler otel-agent git-sync helm-sync oci-sync gcenode-askpass-sidecar hydration-controller |
ns-reconciler |
config-management-system |
Uma implantação de reconciliação de namespace é criada para cada objeto RepoSync . |
1 | ns-reconciler-.* |
3 - 51 |
reconciler otel-agent git-sync helm-sync oci-sync gcenode-askpass-sidecar hydration-controller |
otel-collector |
config-management-monitoring |
O coletor do OpenTelemetry é executado em todos os clusters com o Config Sync
ativado no objeto ConfigManagement . Ele coleta métricas
dos componentes do Config Sync em execução nos
namespaces config-management-system e resource-group-system
e exporta essas métricas para o Prometheus e o Cloud Monitoring. |
1 | otel-collector-.* |
1 | otel-collector |
resource-group-controller-manager |
resource-group-system |
O ResourceGroup Controller é executado em todos os clusters com o Config Sync
ativado no objeto ConfigManagement . Ele monitora
objetos ResourceGroup e os atualiza com o status
de reconciliação atual de cada objeto no inventário. Um
objeto ResourceGroup é criado para cada
objeto RootSync e RepoSync para inventariar a
listagem de objetos aplicados pelo reconciliador da fonte da verdade. |
1 | resource-group-controller-manager-.* |
2 | reconciler-manager otel-agent |
admission-webhook |
config-management-system |
O webhook de admissão do Config Sync é executado em cada cluster com a
prevenção contra deslocamento
ativada no objeto ConfigManagement . Ele monitora
solicitações da API Kubernetes e impede a modificação ou exclusão de
recursos gerenciados pelo Config Sync. O webhook de admissão do Config Sync é desativado por padrão. |
2 | admission-webhook-.* |
1 | admission-webhook |
1 Para saber quando esses contêineres são criados, consulte Contêineres do reconciliador.
Principais componentes
As seções a seguir exploram componentes importantes do Config Sync com mais detalhes.
Operador e objeto do ConfigManagement
O ConfigManagement Operator observa o objeto ConfigManagement
,
cria e gerencia outros componentes necessários para que o Config Sync funcione:
Como o ConfigManagement Operator instala alguns componentes que exigem
permissões cluster-admin
, ele também exige
permissões cluster-admin
.
Gerenciador de reconciliação e reconciliadores
O gerenciador de reconciliação é responsável por criar e gerenciar os reconciliadores individuais que garantem que a configuração do cluster permaneça sincronizada.
O gerenciador de reconciliação cria um reconciliador raiz para cada objeto RootSync
e
um reconciliador de namespace para cada objeto RepoSync
. O Config Sync usa esse
design em vez de compartilhar um único reconciliador monolítico, porque ele melhora
a confiabilidade ao reduzir pontos únicos de falha e permite que reconciliadores
individuais sejam escalonados de forma independente.
Os reconciliadores de raiz e de namespace extraem automaticamente as configurações da fonte da verdade e as aplicam para aplicar o estado desejado no cluster.
Os diagramas a seguir mostram como o Reconciler Manager controla o ciclo de vida de cada reconciliador raiz e de namespace:
Contêineres de reconciliador
Os contêineres específicos implantados nos pods do reconciliador dependem das escolhas de configuração feitas. A tabela a seguir explica melhor o que cada um desses contêineres de reconciliação faz e a condição que faz com que o Config Sync os crie:
Nome do contêiner | Descrição | Condição |
---|---|---|
reconciler |
Processa a sincronização e a correção de deslocamentos. | Sempre ativado. |
otel-agent |
Recebe métricas dos outros contêineres de reconciliação e as envia para o Coletor do OpenTelemetry. | Sempre ativado. |
git-sync |
Extrai as configurações do repositório Git para um diretório local que o contêiner de reconciliação pode ler. | Ativado quando spec.sourceType é git . |
helm-sync |
Extrai e renderiza gráficos do Helm do repositório de gráficos em um diretório local que o contêiner de reconciliação pode ler. | Ativado quando spec.sourceType é helm . |
oci-sync |
Extrai imagens OCI que contêm as configurações do registro de contêineres para um diretório local que o contêiner de reconciliação pode ler. | Ativado quando spec.sourceType é oci . |
gcenode-askpass-sidecar |
Armazena em cache as credenciais do Git do serviço de metadados do GKE para
uso pelo contêiner git-sync . |
Ativado quando spec.sourceType é git e
spec.git.auth é gcenode ou
gcpserviceaccount . |
hydration-controller |
Processa a criação de configurações do Kustomize em um diretório local que o contêiner de reconciliação pode ler. | Ativado quando a origem inclui um arquivo kustomize.yaml . |
Como mostrado na tabela anterior, normalmente é possível esperar uma contagem de contêineres de
três a cinco em cada pod de reconciliação. Os contêineres reconciler
e otel-agent
estão sempre presentes. Especificar um tipo para a fonte da verdade
determina qual contêiner de sincronização é adicionado. Além disso, os contêineres hydration-controller
e gcenode-askpass-sidecar
são criados se você tiver feito as
mudanças de configuração mencionadas na tabela.
Controlador e objetos do ResourceGroup
Os reconciliadores de raiz e de namespace criam um objeto de inventário ResourceGroup
para
cada objeto RootSync
e RepoSync
que você configurar. Cada objeto ResourceGroup
contém uma lista de objetos sincronizados com o cluster da fonte de verdade pelo
reconciliador para o objeto RootSync
ou RepoSync
. O controlador ResourceGroup
observa todos os objetos no objeto ResourceGroup
e
atualiza o status do objeto ResourceGroup
com o status de reconciliação
atual dos objetos sincronizados. Isso permite verificar o status do objeto
ResourceGroup
para ter uma visão geral da sincronização, em vez de consultar o status de
cada objeto individualmente.
Os objetos ResourceGroup
têm o mesmo nome e namespace do objeto
RootSync
ou RepoSync
correspondente. Por exemplo, para o objeto RootSync
com o nome
root-sync
no namespace config-management-system
, o objeto
ResourceGroup
correspondente também é root-sync
in the
config-management-system
no namespace.
Não crie nem modifique objetos ResourceGroup
, porque isso pode interferir na
operação do Config Sync.
Webhook de admissão
O webhook de admissão do Config Sync é criado ao ativar a prevenção de deslocamento. A prevenção de deslocamento intercepta proativamente as solicitações de modificação, garantindo que elas estejam alinhadas com a fonte de verdade antes de permitir mudanças.
Se você não ativar a prevenção de deslocamento, o Config Sync ainda vai usar um mecanismo de autocorreção para reverter o deslocamento da configuração. Com a autocorreção, o Config Sync monitora continuamente os objetos gerenciados e reverte automaticamente todas as mudanças que se desviam do estado pretendido.
Objetos RootSync e RepoSync
Os objetos RootSync
configuram o Config Sync para criar um reconciliador raiz que
monitora a fonte de verdade especificada e aplica objetos dessa origem ao
cluster. Por padrão, o reconciliador raiz de cada objeto RootSync
tem a permissão cluster-admin
. Com
essa permissão padrão, os reconciliadores raiz podem sincronizar recursos com escopo de cluster e
de namespace. Se necessário, você pode mudar essas permissões
configurando os campos
spec.override.roleRefs
. Os objetos RootSync
foram criados para uso dos administradores de cluster.
Os objetos RepoSync
configuram o Config Sync para criar um reconciliador de namespace
que observa a origem especificada e aplica objetos dessa origem a um
namespace específico no cluster. Os reconciliadores de namespace podem sincronizar qualquer
recurso com escopo de namespace nesse namespace com permissões personalizadas especificadas pelo usuário. Os objetos RepoSync
foram criados para uso pelos locatários do namespace.
Como o serviço da frota gerencia objetos RootSync
Quando você instala o Config Sync com o console do Google Cloud, a CLI do Google Cloud, o Config Connector ou o Terraform, ele é gerenciado pelo serviço da frota com base nas entradas da API Google Cloud.
Quando a instalação do Config Sync é gerenciada pelo serviço da frota, você pode
gerenciar o objeto RootSync
inicial, chamado
root-sync
. Isso permite inicializar o GitOps no cluster sem precisar
aplicar nada manualmente. Se você decidir não usar o
serviçoda frota para gerenciar o objeto RootSync
inicial, ainda poderá aplicar
qualquer objeto RootSync
e RepoSync
diretamente ao cluster.
O objeto RootSync
chamado root-sync
é criado com base nas entradas da
API Google Cloud, especificamente na seção spec.configSync
da
API config-management. Como essa API
expõe apenas um subconjunto dos campos
RootSync
,
esses campos são considerados gerenciados no root-sync
, enquanto os outros campos
são considerados não gerenciados. Os campos gerenciados só podem ser editados usando a
API Google Cloud. Os campos não gerenciados
podem ser editados usando o kubectl
,
ou qualquer outro cliente do Kubernetes.
Outros objetos RootSync e RepoSync
Para criar outros objetos RootSync
ou RepoSync
, use a ferramenta de linha de comando kubectl
ou outro cliente do Kubernetes. Também é possível usar o objeto
root-sync
inicial para gerenciar outros objetos RootSync
ou RepoSync
com
o GitOps, adicionando os manifestos YAML à fonte da verdade que o
root-sync
está configurado para sincronizar. Esse método
não pode ser usado para gerenciar a configuração do root-sync
inicial, porque alguns dos
campos dele são gerenciados pelo serviço da frota. Para gerenciar o objeto root-sync
com o GitOps, use o Config Connector ou o Terraform. Para saber mais sobre a criação de outros objetos RootSync
e RepoSync
, consulte
Configurar a sincronização usando mais de uma fonte de verdade.
A seguir
- Talvez você queira monitorar os componentes do Config Sync ou verificar os registros deles. Para uma introdução, consulte Usar monitoramento e registros.
- Saiba mais sobre as solicitações de recursos para componentes do Config Sync.