Usar um repo com configurações do Kustomize e gráficos Helm

Quando você usa o Config Sync, as configurações do Kustomize e os gráficos Helm colocados no repositório Git são renderizados automaticamente. A renderização automática oferece os seguintes benefícios:

  • Você não precisa mais de um pipeline de hidratação externo. Sem a renderização automatizada, é preciso renderizar manualmente as configurações usando o Kustomize e o Helm na estação de trabalho ou configurar uma etapa para acionar o processo de hidratação nos sistemas de CI. Com a renderização automática, o Config Sync processa a execução.

  • Os custos de manutenção serão reduzidos. Sem a renderização automatizada, é preciso manter um repositório Git com as configurações originais do Kustomize e os gráficos Helm e outro repositório Git com a saída gerada pela hidratação externa. Em seguida, configure o Config Sync para sincronizar do repositório Git com a saída renderizada. Com a renderização automatizada, você só precisa manter um repositório com os configs originais.

  • Seu fluxo de trabalho de desenvolvimento foi simplificado. Sem a renderização automatizada, as alterações feitas nas configurações originais precisam ser revisadas duas vezes antes de serem mescladas. uma vez no repositório original e novamente no repositório renderizado. Com a renderização automatizada, os configs renderizados são gerados pelo Config Sync, e você só precisa revisar as alterações nos configs originais.

Requisitos

Para renderizar automaticamente as configurações do Kustomize e os gráficos Helm, verifique se o ambiente atende aos seguintes requisitos:

  • Tem uma versão 1.9.0 ou mais recente do Anthos Config Management. Se necessário, faça upgrade do Anthos Config Management.
  • As APIs RootSync e RepoSync precisam ser ativadas. Se você instalou o Config Sync manualmente usando kubectl e não tem as APIs RootSync e RepoSync ativadas, é necessário migrar seu objeto ConfigManagement.
  • Para acionar o processo de renderização, seu repositório Git precisa ter um arquivo de configuração do Kustomize (kustomization.yaml, kustomization.yml ou Kustomization) na raiz do diretório do Git. Se o diretório raiz não tiver um arquivo de configuração do Kustomization, o Config Sync sincronizará as configurações como estão sem qualquer renderização.
  • Inclua seus configs no kustomization.yaml. Se você não incluir esses arquivos de configuração, eles não serão sincronizados com o cluster.

Exemplo de arquitetura de repositório para configurações do Kustomize

O repositório de exemplo a seguir demonstra como configurar seu repositório para usar configurações do Kustomize com renderização automática. Esse repositório inclui três sobreposições (team-a, team-b e team-c) que fazem referência à mesma base.

O diagrama a seguir mostra a estrutura de diretórios:

├── base
│   ├── kustomization.yaml
│   ├── namespace.yaml
│   ├── networkpolicy.yaml
│   ├── rolebinding.yaml
│   └── role.yaml
├── kustomization.yaml
├── README.md
├── team-a
│   └── kustomization.yaml
├── team-b
│   └── kustomization.yaml
└── team-c
    └── kustomization.yaml

O seguinte arquivo kustomization.yaml está na raiz do repositório e contém referências às três sobreposições:

# ./kustomization.yaml
resources:
- team-a
- team-b
- team-c

O kustomize.yaml a seguir está no diretório team-a e é a sobreposição de team-a:

# ./team-a/kustomization.yaml
namespace: team-a

resources:
- ../base

patches:
- target:
   kind: RoleBinding
   name: team-admin-rolebinding
 patch: |-
   - op: replace
     path: /subjects/0/name
     value: team-a-admin@mydomain.com
- target:
   kind: Namespace
   name: default
 patch: |-
   - op: replace
     path: /metadata/name
     value: team-a

O seguinte kustomization.yaml está no diretório base e é a base do Kustomize:

# ./base/kustomization.yaml
resources:
- namespace.yaml
- rolebinding.yaml
- role.yaml
- networkpolicy.yaml

Você pode explorar esse repositório no diretório Como configurar políticas específicas de namespace do repositório de amostra do Anthos Config Management.

Renderizar automaticamente gráficos Helm

Você pode renderizar automaticamente os gráficos Helm usando os campos helmGlobals e helmCharts nos arquivos kustomization.yaml.

Campos do gráfico Helm

O Config Sync é compatível com a adição dos seguintes campos aos seus arquivos kustomization.yaml:

Field Descrição
helmGlobals Parâmetros aplicados a todos os gráficos Helm
helmGlobals.chartHome Aceita uma string. Um caminho de arquivo, relativo à raiz do Kustomization, para um diretório que contém um subdiretório para cada gráfico a ser incluído no Kustomization. O valor padrão desse campo é charts.
helmGlobals.configHome Aceita uma string. Define um valor que o Kustomize precisa passar para o Helm com a variável de ambiente HELM_CONFIG_HOME. O Kustomize não tenta ler nem gravar esse diretório. Se omitido, TMP_DIR/helm é usado, em que TMP_DIR é um diretório temporário criado pelo Kustomize para Helm.
helmCharts Uma matriz de parâmetros de gráfico do Helm
helmCharts.name Aceita uma string. É o nome do gráfico. Este campo é obrigatório.
helmCharts.version Aceita uma string. A versão do gráfico
helmCharts.repo Aceita uma string. O URL usado para localizar o gráfico
helmCharts.releaseName Aceita uma string. Substitui RELEASE_NAME na saída do modelo de gráfico.
helmCharts.namespace Aceita uma string. Define o namespace de destino para uma versão (.Release.Namespace no modelo)
helmCharts.valuesInline Valores a serem usados em vez de valores padrão que acompanham o gráfico
helmCharts.valuesFile Aceita uma string. ValuesFile é um caminho de arquivo local ou um URL remoto para um arquivo a ser usado em vez dos valores padrão que acompanham o gráfico. Os valores padrão estão em CHART_HOME/NAME/values.yaml.
helmCharts.valuesMerge Aceita merge, override, (default) ou replace. ValuesMerge especifica como tratar ValuesInline em relação a Values.
helmCharts.includeCRDs Aceita true ou false. Especifica se Helm também deve gerar CustomResourceDefinitions. O valor padrão é false.

Exemplos de gráfico Helm

Os exemplos das seções a seguir mostram algumas das diferentes maneiras de usar os gráficos do Helm.

Renderizar um gráfico Helm remoto

O Config Sync é compatível com a renderização de gráficos Helm remotos em clusters que têm acesso público à Internet.

O kustomization.yaml a seguir renderiza um cert-manager remoto definindo os seguintes campos helmCharts:

# ./kustomization.yaml
...
helmCharts:
- name: cert-manager
  repo: https://charts.jetstack.io
  version: v1.5.3
  releaseName: my-cert-manager
  namespace: cert-manager
...

Renderizar um gráfico Helm local

O Config Sync é compatível com a renderização de gráficos Helm locais. Para usar uma versão personalizada de um gráfico Helm, extraia a versão lançada do repositório do gráfico Helm (por exemplo, ArtifactHub), faça alterações localmente e depois enviar as alterações para seu repositório.

O kustomization.yaml a seguir renderiza um gráfico cert-manager local. O diretório padrão para gráficos do Helm é charts e, como esse gráfico é verificado no diretório charts, não é necessário especificar .helmCharts.repo ou .helmCharts.version. de dados.

# ./kustomization.yaml
...
helmCharts:
- name: cert-manager
  releaseName: my-cert-manager
  namespace: cert-manager
...

Renderizar vários gráficos Helm

O Config Sync é compatível com a renderização de vários gráficos Helm em um arquivo kustomization.yaml, independentemente de o gráfico ser remoto ou local.

O seguinte kustomization.yaml renderiza um gráfico Helm local (cert-manager):

# ./kustomization.yaml
...
helmCharts:
- name: cert-manager
  releaseName: my-cert-manager
  namespace: cert-manager
- name: prometheus
  repo: https://prometheus-community.github.io/helm-charts
  version: 14.3.0
  releaseName: my-prometheus
  namespace: monitoring
...

Campos aceitos

O exemplo a seguir mostra quais campos são compatíveis com o arquivo kustomization.yaml:

helmGlobals:
  chartHome: string
  configHome: string
helmCharts:
- name: string
  version: string
  repo: string
  releaseName: string
  namespace: string
  valuesInline: map[string]interface{}
  valuesFile: string
  valuesMerge: string
  includeCRDs: bool

A seguir