Tutorial: Implantar configurações usando GitOps em um cluster Kubernetes habilitado para Azure Arc
Importante
Este tutorial é para GitOps com Flux v1. O GitOps com Flux v2 agora está disponível para clusters Kubernetes habilitados para Azure Arc e Serviço Kubernetes do Azure (AKS); vá para o tutorial para GitOps com Flux v2. Recomendamos migrar para o Flux v2 o mais rápido possível.
O suporte para recursos de configuração de cluster baseados no Flux v1 criados antes de 1º de janeiro de 2024 terminará em 24 de maio de 2025. A partir de 1º de janeiro de 2024, você não poderá criar novos recursos de configuração de cluster baseados no Flux v1.
Neste tutorial, você aplicará as configurações do Flux v1 usando o GitOps em um cluster Kubernetes habilitado para Azure Arc. Saberá como:
- Crie uma configuração em um cluster Kubernetes habilitado para Azure Arc usando um repositório Git de exemplo.
- Valide se a configuração foi criada com êxito.
- Aplique a configuração a partir de um repositório Git privado.
- Valide a configuração do Kubernetes.
Pré-requisitos
Uma conta do Azure com uma subscrição ativa. Crie uma conta gratuitamente.
Um cluster conectado ao Kubernetes habilitado para Azure Arc existente.
- Se você ainda não conectou um cluster, percorra nosso início rápido Conectar um cluster Kubernetes habilitado para Azure Arc.
Uma compreensão dos benefícios e da arquitetura desse recurso. Leia mais no artigo Configurações e GitOps - Kubernetes habilitado para Azure Arc.
Instale a
k8s-configuration
extensão da CLI do Azure da versão >= 1.0.0:az extension add --name k8s-configuration
Gorjeta
Se a
k8s-configuration
extensão já estiver instalada, você pode atualizá-la para a versão mais recente usando o seguinte comando -az extension update --name k8s-configuration
Criar uma configuração
O repositório de exemplo usado neste artigo é estruturado em torno da persona de um operador de cluster. Os manifestos neste repositório provisionam alguns namespaces, implantam cargas de trabalho e fornecem algumas configurações específicas da equipe. O uso desse repositório com o GitOps cria os seguintes recursos no cluster:
- Espaços de nomes:
cluster-config
,team-a
,team-b
- Implantação:
arc-k8s-demo
- ConfigMap:
team-a/endpoints
O config-agent
sonda o Azure para configurações novas ou atualizadas. Esta tarefa demorará até 5 minutos.
Se você estiver associando um repositório privado à configuração, conclua as etapas abaixo em Aplicar configuração de um repositório Git privado.
Importante
Este tutorial é para GitOps com Flux v1. O GitOps com Flux v2 agora está disponível para clusters Kubernetes habilitados para Azure Arc e Serviço Kubernetes do Azure (AKS); vá para o tutorial para GitOps com Flux v2. Recomendamos migrar para o Flux v2 o mais rápido possível.
O suporte para recursos de configuração de cluster baseados no Flux v1 criados antes de 1º de janeiro de 2024 terminará em 24 de maio de 2025. A partir de 1º de janeiro de 2024, você não poderá criar novos recursos de configuração de cluster baseados no Flux v1.
Utilizar a CLI do Azure
Use a extensão CLI do Azure para k8s-configuration
vincular um cluster conectado ao repositório Git de exemplo.
Nomeie esta configuração
cluster-config
como .Instrua o agente a implantar o
cluster-config
operador no namespace.Dê permissões ao operador
cluster-admin
.az k8s-configuration flux create --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --operator-instance-name cluster-config --operator-namespace cluster-config --repository-url https://github.com/Azure/arc-k8s-demo --scope cluster --cluster-type connectedClusters
{ "complianceStatus": { "complianceState": "Pending", "lastConfigApplied": "0001-01-01T00:00:00", "message": "{\"OperatorMessage\":null,\"ClusterState\":null}", "messageLevel": "3" }, "configurationProtectedSettings": {}, "enableHelmOperator": false, "helmOperatorProperties": null, "id": "/subscriptions/<sub id>/resourceGroups/<group name>/providers/Microsoft.Kubernetes/connectedClusters/<cluster name>/providers/Microsoft.KubernetesConfiguration/sourceControlConfigurations/cluster-config", "name": "cluster-config", "operatorInstanceName": "cluster-config", "operatorNamespace": "cluster-config", "operatorParams": "--git-readonly", "operatorScope": "cluster", "operatorType": "Flux", "provisioningState": "Succeeded", "repositoryPublicKey": "", "repositoryUrl": "https://github.com/Azure/arc-k8s-demo", "resourceGroup": "MyRG", "sshKnownHostsContents": "", "systemData": { "createdAt": "2020-11-24T21:22:01.542801+00:00", "createdBy": null, "createdByType": null, "lastModifiedAt": "2020-11-24T21:22:01.542801+00:00", "lastModifiedBy": null, "lastModifiedByType": null }, "type": "Microsoft.KubernetesConfiguration/sourceControlConfigurations" }
Usar um repositório Git público
Parâmetro | Formato |
---|---|
--repository-url |
http[s]://servidor/repo[.git] |
Utilizar um repositório Git privado com SSH e chaves criadas com o Flux
Adicione a chave pública gerada pelo Flux à conta de utilizador no seu fornecedor do serviço Git. Se a chave for adicionada ao repositório em vez da conta de usuário, use git@
no lugar de user@
na URL.
Vá para a seção Aplicar configuração de um repositório Git privado para obter mais detalhes.
Parâmetro | Formato | Notas |
---|---|---|
--repository-url |
ssh://user@server/repo[.git] ou user@server:repo[.git] | git@ pode substituir user@ |
Utilizar um repositório Git privado com SSH e chaves fornecidas pelo utilizador
Forneça a sua própria chave privada diretamente ou num ficheiro. A chave deve estar no formato PEM e terminar com newline (\n).
Adicione a chave pública associada à conta de utilizador no fornecedor do serviço Git. Se a chave for adicionada ao repositório em vez da conta de usuário, use git@
no lugar de user@
.
Vá para a seção Aplicar configuração de um repositório Git privado para obter mais detalhes.
Parâmetro | Formato | Notas |
---|---|---|
--repository-url |
ssh://user@server/repo[.git] ou user@server:repo[.git] | git@ pode substituir user@ |
--ssh-private-key |
Chave codificada em base64 no formato PEM | Forneça a chave diretamente |
--ssh-private-key-file |
caminho completo para o arquivo local | Forneça o caminho completo para o arquivo local que contém a chave de formato PEM |
Utilizar um anfitrião Git privado com SSH e anfitriões conhecidos fornecidos pelo utilizador
O operador Flux mantém uma lista dos anfitriões Git comuns no respetivo ficheiro de anfitriões conhecidos para autenticar o repositório Git antes de estabelecer a ligação SSH. Se você estiver usando um repositório Git incomum ou seu próprio host Git, você pode fornecer a chave do host para que o Flux possa identificar seu repositório.
Assim como as chaves privadas, você pode fornecer seu conteúdo known_hosts diretamente ou em um arquivo. Ao fornecer seu próprio conteúdo, use as especificações de formato de conteúdo known_hosts, juntamente com qualquer um dos principais cenários SSH acima.
Parâmetro | Formato | Notas |
---|---|---|
--repository-url |
ssh://user@server/repo[.git] ou user@server:repo[.git] | git@ pode substituir user@ |
--ssh-known-hosts |
codificado em base64 | Fornecer conteúdo de hosts conhecidos diretamente |
--ssh-known-hosts-file |
caminho completo para o arquivo local | Fornecer conteúdo de hosts conhecidos em um arquivo local |
Usar um repositório Git privado com HTTPS
Parâmetro | Formato | Notas |
---|---|---|
--repository-url |
https://server/repo[.git] | HTTPS com autenticação básica |
--https-user |
RAW ou codificado em BASE64 | Nome de usuário HTTPS |
--https-key |
RAW ou codificado em BASE64 | Token de acesso pessoal HTTPS ou senha |
Nota
- A versão 1.2.0+ do gráfico do operador Helm suporta a versão privada HTTPS Helm.
- A versão HTTPS Helm não é suportada para clusters gerenciados pelo AKS.
- Se você precisar do Flux para acessar o repositório Git por meio de seu proxy, precisará atualizar os agentes do Azure Arc com as configurações de proxy. Para obter mais informações, consulte Conectar-se usando um servidor proxy de saída.
Parâmetros adicionais
Personalize a configuração com os seguintes parâmetros opcionais:
Parâmetro | Description |
---|---|
--enable-helm-operator |
Mude para habilitar o suporte para implantações de gráficos Helm. |
--helm-operator-params |
Valores gráficos para o operador Helm (se ativado). Por exemplo, --set helm.versions=v3 . |
--helm-operator-chart-version |
Versão do gráfico para o operador Helm (se ativado). Use a versão 1.2.0+. Padrão: '1.2.0'. |
--operator-namespace |
Nome para o namespace do operador. Padrão: 'default'. Máx: 23 caracteres. |
--operator-params |
Parâmetros para o operador. Deve ser indicado entre aspas simples. Por exemplo, --operator-params='--git-readonly --sync-garbage-collection --git-branch=main' |
Opções suportadas em --operator-params
:
Opção | Description |
---|---|
--git-branch |
Ramificação do repositório Git a ser usada para manifestos do Kubernetes. O padrão é 'master'. Os repositórios mais recentes têm ramificação raiz chamada main , caso em que você precisa definir --git-branch=main . |
--git-path |
Caminho relativo dentro do repositório Git para o Flux localizar manifestos do Kubernetes. |
--git-readonly |
O repositório Git será considerado somente leitura. O Flux não tentará escrever para ele. |
--manifest-generation |
Se ativado, o Flux procurará .flux.yaml e executará Kustomize ou outros geradores de manifesto. |
--git-poll-interval |
Período no qual sondar o repositório Git para novas confirmações. O padrão é 5m (5 minutos). |
--sync-garbage-collection |
Se ativado, o Flux excluirá os recursos que criou, mas não estão mais presentes no Git. |
--git-label |
Rotule para acompanhar o progresso da sincronização. Usado para marcar a ramificação do Git. A predefinição é flux-sync . |
--git-user |
Nome de usuário para Git commit. |
--git-email |
E-mail para usar para confirmação do Git. |
Se você não quiser que o Flux grave no repositório e --git-user
ou --git-email
não estiver definido, será --git-readonly
definido automaticamente.
Para obter mais informações, consulte a documentação do Flux.
Nota
O padrão do Flux é sincronizar a master
partir da ramificação do repositório git. No entanto, repositórios git mais recentes têm a ramificação raiz chamada main
, caso em que você precisa definir --git-branch=main
o --operator-params.
Gorjeta
Você pode criar uma configuração no portal do Azure na guia GitOps do recurso Kubernetes habilitado para Azure Arc.
Validar a configuração
Use a CLI do Azure para validar se a configuração foi criada com êxito.
az k8s-configuration show --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --cluster-type connectedClusters
O recurso de configuração será atualizado com status de conformidade, mensagens e informações de depuração.
{
"complianceStatus": {
"complianceState": "Installed",
"lastConfigApplied": "2020-12-10T18:26:52.801000+00:00",
"message": "...",
"messageLevel": "Information"
},
"configurationProtectedSettings": {},
"enableHelmOperator": false,
"helmOperatorProperties": {
"chartValues": "",
"chartVersion": ""
},
"id": "/subscriptions/<sub id>/resourceGroups/AzureArcTest/providers/Microsoft.Kubernetes/connectedClusters/AzureArcTest1/providers/Microsoft.KubernetesConfiguration/sourceControlConfigurations/cluster-config",
"name": "cluster-config",
"operatorInstanceName": "cluster-config",
"operatorNamespace": "cluster-config",
"operatorParams": "--git-readonly",
"operatorScope": "cluster",
"operatorType": "Flux",
"provisioningState": "Succeeded",
"repositoryPublicKey": "...",
"repositoryUrl": "git://github.com/Azure/arc-k8s-demo.git",
"resourceGroup": "AzureArcTest",
"sshKnownHostsContents": null,
"systemData": {
"createdAt": "2020-12-01T03:58:56.175674+00:00",
"createdBy": null,
"createdByType": null,
"lastModifiedAt": "2020-12-10T18:30:56.881219+00:00",
"lastModifiedBy": null,
"lastModifiedByType": null
},
"type": "Microsoft.KubernetesConfiguration/sourceControlConfigurations"
}
Quando uma configuração é criada ou atualizada, algumas coisas acontecem:
- O Azure Arc
config-agent
monitora o Azure Resource Manager em busca de configurações novas ou atualizadas (Microsoft.KubernetesConfiguration/sourceControlConfigurations
) e observa a novaPending
configuração. - O
config-agent
lê as propriedades de configuração e cria o namespace de destino. - O Azure Arc
controller-manager
cria uma conta de serviço do Kubernetes e a mapeia para ClusterRoleBinding ou RoleBinding para as permissões apropriadas (cluster
namespace
ou escopo). Em seguida, ele implanta uma instância doflux
. - Se estiver usando a opção de SSH com chaves geradas pelo Flux,
flux
gera uma chave SSH e registra a chave pública. - O
config-agent
status dos relatórios retorna ao recurso de configuração no Azure.
Enquanto o processo de provisionamento acontece, o recurso de configuração passará por algumas alterações de estado. Monitore o progresso com o az k8s-configuration show ...
comando acima:
Mudança de palco | Description |
---|---|
complianceStatus ->Pending |
Representa os estados inicial e em andamento. |
complianceStatus ->Installed |
config-agent configurou com êxito o cluster e implantou flux sem erros. |
complianceStatus ->Failed |
config-agent Encontrou um erro ao implantar flux o . Os detalhes são fornecidos no corpo da complianceStatus.message resposta. |
Aplicar a configuração de um repositório Git privado
Se você estiver usando um repositório Git privado, precisará configurar a chave pública SSH em seu repositório. Você fornece ou o Flux gera a chave pública SSH. Pode configurar a chave pública no repositório Git específico ou no utilizador do Git que tem acesso ao repositório.
Obter a sua chave pública
Se gerou as suas próprias chaves SSH, então já tem as chaves privadas e públicas.
Obter a chave pública com a CLI do Azure
Se as chaves forem geradas no Flux, utilize o seguinte na CLI do Azure.
az k8s-configuration show --resource-group <resource group name> --cluster-name <connected cluster name> --name <configuration name> --cluster-type connectedClusters --query 'repositoryPublicKey'
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAREDACTED"
Obter a chave pública no portal do Azure
Percorra o seguinte no portal do Azure se o Flux estiver gerando as chaves.
- No portal do Azure, navegue para o recurso do cluster ligado.
- Na página de recursos, selecione "GitOps" e veja a lista de configurações para este cluster.
- Selecione a configuração que utiliza o repositório Git privado.
- Na janela de contexto que se abre, na parte inferior da janela, copie a chave pública do repositório.
Adicionar chave pública usando o GitHub
Utilize uma das seguintes opções:
Opção 1: adicione a chave pública à conta de utilizador (aplica-se a todos os repositórios na conta):
- Abra o GitHub e clique no ícone do seu perfil no canto superior direito da página.
- Clique em Definições.
- Clique nas chaves SSH e GPG.
- Clique em Nova chave SSH.
- Forneça um título.
- Cole a chave pública sem aspas.
- Clique em Adicionar chave SSH.
Opção 2: adicione a chave pública como uma chave de implementação ao repositório Git (aplica-se apenas a este repositório):
- Abra o GitHub e navegue para o seu repositório.
- Clique em Definições.
- Clique em Implantar chaves.
- Clique em Adicionar chave de implantação.
- Forneça um título.
- Selecione Permitir o acesso de escrito.
- Cole a chave pública sem aspas.
- Clique em Adicionar chave.
Utilize um repositório do Azure DevOps para adicionar a chave pública
Utilize os seguintes passos para adicionar a chave às chaves SSH:
- Em Configurações do Usuário no canto superior direito (ao lado da imagem do perfil), clique em Chaves públicas SSH.
- Selecione + Nova Chave.
- Indique um nome.
- Cole a chave pública sem aspas.
- Clique em Adicionar.
Validar a configuração do Kubernetes
Depois de config-agent
instalar a flux
instância, os recursos mantidos no repositório Git devem começar a fluir para o cluster. Verifique se os namespaces, implantações e recursos foram criados com o seguinte comando:
kubectl get ns --show-labels
NAME STATUS AGE LABELS
azure-arc Active 24h <none>
cluster-config Active 177m <none>
default Active 29h <none>
itops Active 177m fluxcd.io/sync-gc-mark=sha256.9oYk8yEsRwWkR09n8eJCRNafckASgghAsUWgXWEQ9es,name=itops
kube-node-lease Active 29h <none>
kube-public Active 29h <none>
kube-system Active 29h <none>
team-a Active 177m fluxcd.io/sync-gc-mark=sha256.CS5boSi8kg_vyxfAeu7Das5harSy1i0gc2fodD7YDqA,name=team-a
team-b Active 177m fluxcd.io/sync-gc-mark=sha256.vF36thDIFnDDI2VEttBp5jgdxvEuaLmm7yT_cuA2UEw,name=team-b
Podemos ver que team-a
, team-b
, itops
, e cluster-config
namespaces foram criados.
O flux
operador foi implantado no cluster-config
namespace, conforme indicado pelo recurso de configuração:
kubectl -n cluster-config get deploy -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
cluster-config 1/1 1 1 3h flux docker.io/fluxcd/flux:1.16.0 instanceName=cluster-config,name=flux
memcached 1/1 1 1 3h memcached memcached:1.5.15 name=memcached
Mais exploração
Você pode explorar os outros recursos implantados como parte do repositório de configuração usando:
kubectl -n team-a get cm -o yaml
kubectl -n itops get all
Clean up resources (Limpar recursos)
Exclua uma configuração usando a CLI do Azure ou o portal do Azure. Depois de executar o comando delete, o recurso de configuração será excluído imediatamente no Azure. A exclusão completa dos objetos associados do cluster deve acontecer dentro de 10 minutos. Se a configuração estiver em um estado de falha quando removida, a exclusão completa dos objetos associados pode levar até uma hora.
Quando uma configuração com namespace
escopo é excluída, o namespace não é excluído pelo Azure Arc para evitar a interrupção de cargas de trabalho existentes. Se necessário, você pode excluir esse namespace manualmente usando kubectl
o .
az k8s-configuration delete --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --cluster-type connectedClusters
Nota
Quaisquer alterações no cluster que foram o resultado de implantações do repositório Git rastreado não são excluídas quando a configuração é excluída.
Importante
Este tutorial é para GitOps com Flux v1. O GitOps com Flux v2 agora está disponível para clusters Kubernetes habilitados para Azure Arc e Serviço Kubernetes do Azure (AKS); vá para o tutorial para GitOps com Flux v2. Recomendamos migrar para o Flux v2 o mais rápido possível.
O suporte para recursos de configuração de cluster baseados no Flux v1 criados antes de 1º de janeiro de 2024 terminará em 24 de maio de 2025. A partir de 1º de janeiro de 2024, você não poderá criar novos recursos de configuração de cluster baseados no Flux v1.
Próximos passos
Avance para o próximo tutorial para aprender a implementar CI/CD com GitOps.