Neste tutorial, adiciona configurações do Kustomize que fazem referência a gráficos do Helm ao seu repositório e, em seguida, usa o Config Sync para sincronizar o cluster com o seu repositório.
Quando usa a sincronização de configuração, as configurações do Kustomize e os gráficos do Helm que coloca no seu repositório Git são renderizados automaticamente. A renderização automática oferece-lhe as seguintes vantagens:
Já não precisa de um pipeline de hidratação externo. Sem a renderização automática, tem de renderizar manualmente as configurações com o Kustomize e o Helm na sua estação de trabalho ou configurar um passo para acionar o processo de hidratação nos seus sistemas de CI. Com a renderização automática, o Config Sync processa a execução.
Os seus custos de manutenção são reduzidos. Sem a renderização automatizada, tem de manter um repositório Git com as configurações originais do Kustomize e os gráficos Helm, e outro repositório Git com o resultado gerado pela hidratação externa. Em seguida, tem de configurar o Config Sync para sincronizar a partir do repositório Git com o resultado renderizado. Com a renderização automatizada, só tem de manter um repositório com as configurações originais.
O seu fluxo de trabalho de desenvolvimento é simplificado. Sem a renderização automática, as alterações feitas às configurações originais têm de ser revistas duas vezes antes de serem unidas: uma vez no repositório original e outra vez no repositório renderizado. Com a renderização automatizada, as configurações renderizadas são geradas pelo Config Sync, e só tem de rever as alterações às configurações originais.
Configure o seu repositório
As tarefas seguintes mostram como preparar um repositório Git com configurações que combinam configurações do Kustomize com gráficos do Helm:
Crie ou certifique-se de que tem acesso a um repositório Git. Uma vez que o seu repositório usa o Kustomize e o Helm, deve ser um repositório não estruturado.
Na raiz do seu repositório Git, crie um ficheiro com o nome
kustomization.yaml
e cole o seguinte código no mesmo:# ./kustomization.yaml resources: - base patches: - path: ignore-deployment-mutation-patch.yaml target: kind: Deployment
Este ficheiro é uma sobreposição do Kustomize que aponta para a base do Kustomize. Esta sobreposição inclui uma correção para a base do gráfico Helm que adiciona a anotação
client.lifecycle.config.k8s.io/mutation: ignore
a todos os objetos de implementação. A anotação faz com que o Config Sync ignore quaisquer alterações em conflito a este objeto no cluster depois de o ter criado.No seu repositório Git, crie um diretório denominado
base
:mkdir base
No diretório
base
, crie outro ficheiro denominadokustomization.yaml
e cole o seguinte código no mesmo:# ./base/kustomization.yaml helmCharts: - name: cert-manager repo: https://charts.jetstack.io version: v1.5.3 releaseName: my-cert-manager namespace: cert-manager
Este ficheiro é a base do Kustomize, que renderiza o gráfico Helm remoto.
Navegue novamente para a raiz do seu repositório Git, crie um ficheiro com o nome
ignore-deployment-mutation-patch.yaml
e cole o seguinte código no mesmo:# ./ignore-deployment-mutation-patch.yaml apiVersion: apps/v1 kind: Deployment metadata: name: any annotations: client.lifecycle.config.k8s.io/mutation: ignore
Este ficheiro é um patch que é aplicado ao gráfico Helm base. Adiciona a anotação
client.lifecycle.config.k8s.io/mutation: ignore
a todas as implementações no diretório base.Confirme as alterações no seu repositório:
git add . git commit -m 'Set up manifests.' git push
O repositório de exemplos tem um exemplo de como seria um repositório deste tipo.
Pré-visualize e valide as configurações renderizadas
Antes de o Config Sync renderizar as configurações e sincronizá-las com o cluster, certifique-se de que as configurações estão corretas executando nomos hydrate
para pré-visualizar a configuração renderizada e executando nomos vet
para validar se o formato está correto.
Execute o seguinte comando
nomos hydrate
com as seguintes flags:nomos hydrate \ --source-format=unstructured \ --output=OUTPUT_DIRECTORY
Neste comando:
--source-format=unstructured
permite quenomos hydrate
funcione num repositório não estruturado. Uma vez que está a usar configurações do Kustomize e gráficos do Helm, tem de usar um repositório não estruturado e adicionar este sinalizador.--output=OUTPUT_DIRECTORY
permite-lhe definir um caminho para as configurações renderizadas. SubstituaOUTPUT_DIRECTORY
pela localização onde quer guardar o resultado.
Verifique a sintaxe e a validade das suas configurações executando
nomos vet
com os seguintes flags:nomos vet \ --source-format=unstructured \ --keep-output=true \ --output=OUTPUT_DIRECTORY
Neste comando:
--source-format=unstructured
permite quenomos vet
funcione num repositório não estruturado.--keep-output=true
guarda as configurações renderizadas.--output=OUTPUT_DIRECTORY
é o caminho para as configurações renderizadas.
Configure a sincronização a partir do repositório Git
Agora que criou um repositório com as configurações que quer usar, pode configurar a sincronização do cluster com o repositório.
Para configurar o objeto
RootSync
, crie um ficheiroroot-sync.yaml
:# root-sync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: root-sync namespace: config-management-system spec: sourceFormat: unstructured git: repo: YOUR_GIT_REPOSITORY branch: main auth: none override: enableShellInRendering: true
Substitua
YOUR_GIT_REPOSITORY
pelo URL do seu repositório Git.Aplique o ficheiro
root-sync.yaml
ao cluster:kubectl apply -f root-sync.yaml
Valide a instalação
Depois de instalar e configurar o Config Sync, pode verificar se a instalação foi concluída com êxito.
Verifique se existem outros erros através de
nomos status
:nomos status
Exemplo de saída:
*CLUSTER_NAME -------------------- <root> https:/github.com/GoogleCloudPlatform/anthos-config-management-samples.git/helm-component/manifests@init SYNCED fd17dd5a
Verifique se o componente Helm está instalado com êxito:
kubectl get all -n cert-manager
Exemplo de saída:
NAME READY STATUS RESTARTS AGE pod/my-cert-manager-54f5ccf74-wfzs4 1/1 Running 0 10m pod/my-cert-manager-cainjector-574bc8678c-rh7mq 1/1 Running 0 10m pod/my-cert-manager-webhook-7454f4c77d-rkct8 1/1 Running 0 10m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/my-cert-manager ClusterIP 10.76.9.35 <none> 9402/TCP 10m service/my-cert-manager-webhook ClusterIP 10.76.11.205 <none> 443/TCP 10m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/my-cert-manager 1/1 1 1 10m deployment.apps/my-cert-manager-cainjector 1/1 1 1 10m deployment.apps/my-cert-manager-webhook 1/1 1 1 10m NAME DESIRED CURRENT READY AGE replicaset.apps/my-cert-manager-54f5ccf74 1 1 1 10m replicaset.apps/my-cert-manager-cainjector-574bc8678c 1 1 1 10m replicaset.apps/my-cert-manager-webhook-7454f4c77d 1 1 1 10m