Adicionar configs a uma fonte de verdade

Esta página explica como adicionar e organizar configurações armazenadas em uma fonte de verdade.

Sobre as configurações

O Config Sync foi projetado para operadores de cluster que gerenciam muitos clusters. É possível garantir que os clusters atendam aos padrões de negócios e conformidade permitindo que o Config Sync gerencie namespaces, papéis, RoleBindings, ResourceQuotas e outros objetos importantes do Kubernetes na sua frota.

Quando o Config Sync gerencia esses recursos, ele mantém seus clusters registrados em sincronia usando configs. Uma configuração é um arquivo YAML ou JSON armazenado em uma fonte de verdade. O Config Sync é compatível com repositórios Git, imagens OCI e gráficos Helm como fontes de verdade. As configurações contêm o mesmo tipo de detalhes de configuração que você pode aplicar manualmente a um cluster usando o comando kubectl apply. É possível criar um config para qualquer objeto do Kubernetes que possa existir em um cluster. No entanto, alguns objetos do Kubernetes, como secrets, contêm informações sensíveis que podem ser inadequadas para armazenamento em uma fonte de verdade. Use seu bom senso ao considerar se quer gerenciar esses tipos de objetos usando o Config Sync.

Também é possível usar o Config Sync com o Config Connector para sincronizar as configurações dos recursos do Google Cloud. Para saber mais sobre como trabalhar com o Config Connector, consulte Gerenciar recursos do Google Cloud usando o Config Connector. Também é possível simplificar a instalação do Config Sync e do Config Connector configurando o Config Controller.

Limitações

Não é possível alterar nenhum campo imutável em uma configuração mudando o valor na fonte da verdade. Se você precisar atualizar um campo imutável, exclua manualmente o objeto do cluster. O Config Sync pode recriar o objeto com o novo valor do campo.

Selecionar como organizar suas configurações

O Config Sync usa uma fonte de verdade para o armazenamento de configurações e o controle de versões. Há dois formatos diferentes para a fonte de informações, não estruturado e hierárquico.

O formato de origem não estruturado permite organizar configurações da maneira mais conveniente. Esse formato pode ser útil principalmente se você estiver organizando ou gerando configurações usando uma ferramenta como Kustomize, kpt ou helm. Para ver um exemplo de como organizar as configurações, consulte Exemplo de formato para um repositório não estruturado.

O formato de origem hierárquico ou estruturado separa as configurações em categorias distintas para ajudar você a organizá-las. As categorias são configurações do sistema, metadados de cluster, configuração no nível do cluster e configuração de namespace. Para mais informações sobre o formato de fonte hierárquica, consulte Estrutura do repositório hierárquico.

Não estruturado é o formato recomendado para a maioria dos usuários. Além disso, ao configurar objetos RepoSync, é necessário usar o formato de origem não estruturado.

Recursos compatíveis para formatos não estruturados e hierárquicos

A tabela a seguir destaca as diferenças entre os formatos não estruturados e hierárquicos:

Recursos Formato não estruturado (recomendado) Formato hierárquico
Usado como o formato de um objeto RootSync ou a fonte central da verdade. Compatível Compatível
Usado como o formato para um objeto RepoSync Compatível Incompatível
ClusterSelector Compatível Compatível
NamespaceSelector Compatível Compatível
O comando nomos hydrate Compatível com a sinalização --source-format=unstructured Compatível
O comando nomos init Incompatível Compatível
O comando nomos vet Compatível com a sinalização --source-format=unstructured Compatível
Todos os outros comandos nomos Compatível Compatível
Namespaces abstratos Incompatível Compatível
Repo objetos Incompatível Compatível
Objetos HierarchyConfig Incompatível Compatível

Quando adicionar configurações à origem

Se você estiver criando um formato não estruturado, poderá começar a adicionar configurações a ele assim que ele for criado. Se você estiver criando um formato hierárquico, use o comando nomos init para inicializar a fonte da verdade ou crie a estrutura de diretórios manualmente.

Diretórios vazios não podem ser confirmados em um repositório Git. Portanto, antes de configurar o Config Sync, crie configurações e adicione-as ao seu repositório.

Depois de criar a fonte da verdade e adicionar configs a ela, use o comando nomos vet para verificar a estrutura da fonte e verificar a sintaxe e a validade das suas configurações.

Configurar o Config Sync para ler a partir da fonte da verdade

Depois de criar uma fonte de verdade e colocar suas configurações nela, será possível configurar o Config Sync para ler a origem. Depois que você concluir essa etapa, o Config Sync vai sincronizar as configurações da fonte de verdade com os clusters.

Você configura o local da fonte de verdade ao instalar o Config Sync e pode editar a configuração dele mais tarde. Além do local da fonte da verdade, você pode especificar uma ramificação ou subdiretório para observar, se a fonte tiver outros conteúdos além das configurações.

Se você estiver usando um formato hierárquico e instalar o Config Sync manualmente com kubectl, não coloque a configuração do operador no diretório system/. Qualquer um dos outros diretórios reservados, como cluster/ ou namespaces/. Colocar a configuração em um dos diretórios reservados faz com que nomos vet falhe e registre um erro, como KNV1033: IllegalSystemResourcePlacementError, KNV1038: IllegalKindInNamespacesError ou KNV1039: IllegalKindInClusterError.

É possível conceder às pessoas acesso à fonte de informações de implantação de uma determinada equipe de produto. No entanto, quando você concede a uma pessoa acesso a uma fonte da verdade de implantação, ela também recebe o mesmo RBAC que o reconciliador executado por essa fonte de verdade.

Para configurar a autenticação e a autorização entre o Config Sync e a fonte da verdade, consulte a etapa de instalação sobre como configurar o secret git-creds.

Ignorar mutações de objeto

Se você não quiser que o Config Sync mantenha o estado do objeto no cluster após ele existir, adicione a anotação client.lifecycle.config.k8s.io/mutation: ignore ao objeto em que o Config Sync deve ignorar as mutações.

Para usar a anotação, é necessário ativar as APIs RootSync e RepoSync.

O exemplo a seguir mostra como adicionar a anotação a um objeto:

metadata:
  annotations:
    client.lifecycle.config.k8s.io/mutation: ignore 

Não é possível modificar manualmente essa anotação em objetos gerenciados no cluster.

A seguir