Partilhar via


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.

  1. Nomeie esta configuração cluster-configcomo .

  2. Instrua o agente a implantar o cluster-config operador no namespace.

  3. 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:

  1. O Azure Arc config-agent monitora o Azure Resource Manager em busca de configurações novas ou atualizadas (Microsoft.KubernetesConfiguration/sourceControlConfigurations) e observa a nova Pending configuração.
  2. O config-agent lê as propriedades de configuração e cria o namespace de destino.
  3. 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 do flux.
  4. Se estiver usando a opção de SSH com chaves geradas pelo Flux, flux gera uma chave SSH e registra a chave pública.
  5. 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 fluxo . 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.

  1. No portal do Azure, navegue para o recurso do cluster ligado.
  2. Na página de recursos, selecione "GitOps" e veja a lista de configurações para este cluster.
  3. Selecione a configuração que utiliza o repositório Git privado.
  4. 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):

    1. Abra o GitHub e clique no ícone do seu perfil no canto superior direito da página.
    2. Clique em Definições.
    3. Clique nas chaves SSH e GPG.
    4. Clique em Nova chave SSH.
    5. Forneça um título.
    6. Cole a chave pública sem aspas.
    7. 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):

    1. Abra o GitHub e navegue para o seu repositório.
    2. Clique em Definições.
    3. Clique em Implantar chaves.
    4. Clique em Adicionar chave de implantação.
    5. Forneça um título.
    6. Selecione Permitir o acesso de escrito.
    7. Cole a chave pública sem aspas.
    8. 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:

  1. Em Configurações do Usuário no canto superior direito (ao lado da imagem do perfil), clique em Chaves públicas SSH.
  2. Selecione + Nova Chave.
  3. Indique um nome.
  4. Cole a chave pública sem aspas.
  5. 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 kubectlo .

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.