Tutorial: Implementar aplicações usando GitOps com Argo CD

Este tutorial descreve como usar GitOps com Argo CD em clusters Kubernetes habilitados para Azure Arc ou clusters Azure Kubernetes Service (AKS). O GitOps com Argo CD está ativado como uma extensão de cluster que te permite usar o teu repositório Git como fonte de verdade para configuração de clusters e implementação de aplicações. O Argo CD também suporta outras fontes de ficheiros comuns, como repositórios Helm e Open Container Initiative (OCI).

Observação

A partir da versão 1.0.0-prévia, a extensão Argo CD utiliza o chart Helm da comunidade. Esta alteração é uma mudança de ruptura, pois as chaves de configuração mudaram. Se instalaste uma versão anterior (0.0.x) da extensão, desinstala a extensão e reinstala a versão mais recente com as chaves de configuração atualizadas.

Importante

GitOps com Argo CD está atualmente em pré-visualização. Consulte os Termos de Utilização Suplementares das Pré-visualizações do Microsoft Azure para obter os termos legais que se aplicam às funcionalidades do Azure que estão em versão beta, pré-visualização ou ainda não disponibilizadas para disponibilidade geral.

Pré-requisitos

Para implementar aplicações usando GitOps, precisa de um cluster Kubernetes compatível com Azure Arc ou de um cluster AKS.

Clusters do Kubernetes compatíveis com o Azure Arc

Clusters do Serviço Kubernetes do Azure

  • Um cluster AKS baseado em MSI que está em funcionamento.

    Importante

    O cluster AKS precisa ser criado com a Identidade de Serviço Gerenciado (MSI), e não com o Nome da Entidade de Serviço (SPN), para que essa extensão funcione. Para novos clusters AKS criados com az aks create, o cluster é baseado em MSI por predefinição. Para converter clusters baseados em SPN em MSI, execute az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity. Para obter mais informações, consulte Usar uma identidade gerenciada no AKS.

  • Permissões de Microsoft.ContainerService/managedClusters leitura e gravação no tipo de recurso.

Comum a ambos os tipos de cluster

  • Permissões de leitura e gravação nestes tipos de recursos:

    • Microsoft.KubernetesConfiguration/extensions
  • CLI do Azure, versão 2.15 ou posterior. Instale a CLI do Azure ou use os seguintes comandos para atualizar para a versão mais recente:

    az version
    az upgrade
    
  • O cliente de linha de comando do Kubernetes, kubectl. kubectl já está instalado se você usar o Azure Cloud Shell.

    Instale kubectl localmente usando o az aks install-cli comando:

    az aks install-cli
    
  • Registo dos seguintes fornecedores de recursos do Azure:

    az provider register --namespace Microsoft.Kubernetes
    az provider register --namespace Microsoft.ContainerService
    az provider register --namespace Microsoft.KubernetesConfiguration
    

    O registo é um processo assíncrono e deve terminar dentro de 10 minutos. Para monitorar o processo de registro, use o seguinte comando:

    az provider show -n Microsoft.KubernetesConfiguration -o table
    
    Namespace                          RegistrationPolicy    RegistrationState
    ---------------------------------  --------------------  -------------------
    Microsoft.KubernetesConfiguration  RegistrationRequired  Registered
    

Sugestão

Embora a fonte deste tutorial seja um repositório Git, o Argo CD suporta outras fontes comuns de ficheiros, como repositórios Helm e Open Container Initiative (OCI).

Suporte a versões e regiões

O GitOps é atualmente suportado em regiões públicas.

Requisitos de rede

Os agentes do GitOps necessitam de TCP de saída para a origem do repositório na porta 22 (SSH) ou na porta 443 (HTTPS) para funcionar. Os agentes também exigem acesso às seguintes URLs de saída:

Ponto final (DNS) Descrição
https://management.azure.com É necessário que o agente comunique com o serviço de Configuração do Kubernetes.
https://<region>.dp.kubernetesconfiguration.azure.com Ponto final do plano de dados para que o agente atualize o estado e obtenha as informações de configuração. Depende de <region> (as regiões suportadas mencionadas anteriormente).
https://login.microsoftonline.com É necessário obter e atualizar os tokens do Azure Resource Manager.
https://mcr.microsoft.com Necessário para extrair imagens de contêiner para controladores.

Habilitar extensões de CLI

Instale os pacotes de extensão CLI mais recentes k8s-configuration e k8s-extension:

az extension add -n k8s-configuration
az extension add -n k8s-extension

Para atualizar estes pacotes para as versões mais recentes:

az extension update -n k8s-configuration
az extension update -n k8s-extension

Para ver uma lista de todas as extensões da CLI do Azure instaladas e suas versões, use o seguinte comando:

az extension list -o table

Experimental   ExtensionType   Name                   Path                                                       Preview   Version
-------------  --------------  -----------------      -----------------------------------------------------      --------  --------
False          whl             connectedk8s           C:\Users\somename\.azure\cliextensions\connectedk8s         False     1.10.7
False          whl             k8s-configuration      C:\Users\somename\.azure\cliextensions\k8s-configuration    False     2.2.0
False          whl             k8s-extension          C:\Users\somename\.azure\cliextensions\k8s-extension        False     1.6.4

Criar extensão GitOps (Argo CD) (instalação simples)

A instalação do Argo CD no GitOps suporta multi-utilizador em modo de alta disponibilidade (HA) e identidade de trabalho.

Importante

O modo HA é a configuração padrão e requer quatro nós no cluster para poder instalar. O comando abaixo adiciona --config "redis-ha.enabled=false" para que a extensão seja instalada em um único nó.

Este comando cria a configuração mais simples instalando os componentes do CD Argo num novo argocd espaço de nomes com acesso a todo o cluster. O acesso a nível de cluster permite que definições de aplicações Argo CD sejam detetadas em qualquer namespace listado na configuração do mapa-configuração do Argo CD no cluster. Por exemplo: namespace1,namespace2

az k8s-extension create --resource-group <resource-group> \
  --cluster-name <cluster-name> \
  --cluster-type managedClusters \
  --name argocd \
  --extension-type Microsoft.ArgoCD \
  --config "redis-ha.enabled=false" \
  --config "configs.params.application\.namespaces=namespace1,namespace2"

pt-PT: Este comando de instalação cria um novo <namespace> namespace e instala os componentes do Argo CD no <namespace>. As definições de aplicações Argo CD nesta configuração funcionam apenas no <namespace> namespace.

Observação

Para opções adicionais de configuração, como limites de recursos, consulte values.yaml. Use estas configurações no seu comando CLI do Azure ao configurar a extensão.

Criar extensão GitOps (Argo CD) com identidade de carga de trabalho

Um método de instalação alternativo recomendado para uso em produção é a identidade de carga de trabalho. Este método utiliza identidades do Microsoft Entra ID para autenticar nos recursos do Azure, por isso não precisa de gerir segredos ou credenciais no seu repositório Git. Esta instalação utiliza autenticação de identidade de carga de trabalho ativada na versão OSS 3.0.0-rc2 ou posterior do Argo CD.

Importante

O modo HA é a configuração padrão e requer quatro nós no cluster para poder instalar. Uso 'redis-ha.enabled': false para instalar a extensão num único nó.

Para criar a extensão com identidade de carga de trabalho, primeiro substitua as seguintes variáveis por seus próprios valores neste modelo Bicep:

var clusterName = '<aks-or-arc-cluster-name>'

var workloadIdentityClientId = 'replace-me##-##-###-###'
var ssoApplicationClientId = 'replace-me##-##-###-###'

var url = 'https://<public-ip-for-argocd-ui>/'
var oidcConfig = '''
name: Azure
issuer: https://login.microsoftonline.com/<your-tenant-id>/v2.0
clientID: <same-value-as-ssoApplicationClientId>
azure:
  useWorkloadIdentity: true
requestedIDTokenClaims:
  groups:
    essential: true
requestedScopes:
  - openid
  - profile
  - email
'''

var defaultPolicy = 'role:readonly'
var policy = '''
p, role:org-admin, applications, *, */*, allow
p, role:org-admin, clusters, get, *, allow
p, role:org-admin, repositories, get, *, allow
p, role:org-admin, repositories, create, *, allow
p, role:org-admin, repositories, update, *, allow
p, role:org-admin, repositories, delete, *, allow
g, replace-me##-argocd-ui-entra-group-admin-id, role:org-admin
'''

resource cluster 'Microsoft.ContainerService/managedClusters@2024-10-01' existing = {
  name: clusterName
}

resource extension 'Microsoft.KubernetesConfiguration/extensions@2023-05-01' = {
  name: 'argocd'
  scope: cluster
  properties: {
    extensionType: 'Microsoft.ArgoCD'
    configurationSettings: {
      'redis-ha.enabled': 'true'
      'azure.workloadIdentity.enabled': 'true'
      'azure.workloadIdentity.clientId': workloadIdentityClientId
      'azure.workloadIdentity.entraSSOClientId': ssoApplicationClientId
      'configs.cm.oidc\\.config': oidcConfig
      'configs.cm.url': url
      'configs.rbac.policy\\.default': defaultPolicy
      'configs.rbac.policy\\.csv': policy
      'configs.params.application\\.namespaces': 'default, argocd'
   }
  }
}

Crie o modelo Bicep usando o seguinte comando:

az deployment group create --resource-group <resource-group> --template-file <bicep-file>

Observação

Para opções adicionais de configuração, como limites de recursos, consulte values.yaml. Use estas configurações no modelo Bicep ao configurar a extensão.

Parâmetros

clusterName é o nome do cluster Kubernetes com suporte para AKS ou Arc.

workloadIdentityClientId é o ID do cliente da identidade gerida atribuída pelo utilizador, usada pelos componentes do Argo CD para a identidade da carga de trabalho.

ssoApplicationClientId é o ID da aplicação (cliente) do registo da aplicação Microsoft Entra usado para a autenticação SSO OIDC na interface do CD Argo. Para obter mais informações sobre a instalação e configuração gerais de ssoApplicationClientId, consulte Autenticação de Registo de Aplicações do Microsoft Entra ID com OIDC.

url é a IP pública da interface do Argo CD. Não há IP público ou nome de domínio, a menos que o cluster já tenha um controlador de entrada fornecido pelo cliente. Se sim, precisas de adicionar a regra de entrada à interface do Argo CD após a implementação. A funcionalidade de ingresso requer o suplemento de encaminhamento de aplicações e só é suportada em clusters do AKS.

oidcConfig - substitua <your-tenant-id> pelo ID de locatário do seu ID do Microsoft Entra. Substitua <same-value-as-ssoApplicationClientId-above> pelo mesmo valor que ssoApplicationClientId.

policy variável são as argocd-rbac-cm configmap definições do Argo CD. g, replace-me##-argocd-ui-entra-group-admin-id é o ID de grupo Microsoft Entra que dá acesso de administrador à interface do Argo CD. Pode encontrar o ID do grupo Microsoft Entra no portal do Azure em Microsoft Entra ID > Grupos >o nome do seu grupo> Propriedades. Você pode usar o ID de usuário do Microsoft Entra em vez de um ID de grupo do Microsoft Entra. Pode encontrar o ID de utilizador do Microsoft Entra no portal do Azure em Microsoft Entra ID > Utilizadores >o seu nome de utilizador> Propriedades.

Criar credenciais de identidade para cargas de trabalho

Para configurar novas credenciais de identidade de carga de trabalho, siga estas etapas:

  1. Recupere a URL do emissor OIDC para seu cluster AKS ou cluster Kubernetes habilitado para Arc.

  2. Crie uma identidade gerenciada e anote sua ID de cliente e ID de locatário.

  3. Estabeleça uma credencial de identidade federada para seu cluster AKS ou cluster Kubernetes habilitado para Arc. Por exemplo:

    # For source-controller
    az identity federated-credential create \
      --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} \
      --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" \
      --resource-group "${RESOURCE_GROUP}" \
      --issuer "${OIDC_ISSUER}" \
      --subject
    
  4. Certifique-se de fornecer permissões adequadas para a identidade de trabalho do recurso que deseja que o argocd, o controlador image-reflector ou o argocd-repo-server obtenha. Por exemplo, se estiver a usar o Azure Container Registry, certifique-se de que está aplicado um dos seguintes: Container Registry Repository Reader (para registos com ABAC ativado) ou AcrPull (para registos sem ABAC).

Conectar-se a registros ACR privados ou repositórios ACR usando a identidade da carga de trabalho

Para utilizar o registo privado do ACR ou os repositórios do ACR, siga as instruções na documentação oficial do CD da Argo para se ligar a registos privados do ACR. As etapas Rotular os pods, Criar credencial de identidade federada e Adicionar anotação à conta de serviço nesse guia foram concluídas pela extensão com a implantação do Bicep e podem ser ignoradas.

Migrar do Argo CD OSS para a extensão gerida do Argo CD

Utilize estes passos para migrar de uma instalação Argo CD autogerida para a extensão Argo CD gerida pelo Azure.

Caminho de migração

Use a seguinte sequência para evitar conflitos de controladores e reduzir o risco de migração.

  1. Revise a configuração e o inventário atuais do seu CD Argo:

    • Aplicações
    • ApplicationSets
    • AppProjects
    • Credenciais e modelos de repositório (repocreds)
    • Segredos do cluster
  2. Dimensione os controladores Argo CD autogeridos para zero réplicas para evitar o comportamento de controlador duplo.

  3. Instale a extensão Argo CD no cluster usando definições que correspondam à sua implementação atual.

  4. A funcionalidade Aplicações em qualquer namespace permite ao Argo CD gerir recursos localizados fora do seu namespace central. Se o teu cluster já usa esta definição, não precisas de mover os teus recursos para um novo namespace. Só precisas de configurar a nova extensão para vigiar os namespaces da tua aplicação existente.

    Caso A: Se já utiliza a funcionalidade Aplicações em qualquer espaço de nomes:

    1. Deixe todos os recursos Application, ApplicationSet e AppProject nos seus namespaces atuais.
    2. Configure a nova extensão gerida para monitorizar esses namespaces externos através das definições da extensão.

    Caso B: Se mover os recursos para o novo espaço de nomes da extensão:

    • Migre Applications, ApplicationsSets e AppProjects para o namespace da extensão, se necessário.
  5. Migrar credenciais de repositório, segredos de cluster e repocreds para o espaço de nomes da extensão.

  6. Valida que as aplicações sincronizam e atingem o estado saudável esperado.

  7. Remova a antiga implementação autogerida do Argo CD após a conclusão da validação.

A extensão gerida utiliza as mesmas APIs Argo CD e definições personalizadas de recursos (CRDs), por isso pode reutilizar a maioria dos manifestos existentes com alterações mínimas.

Limitações atuais

  • Atualizações diretas para os Argo CD ConfigMaps não são suportadas.
  • Use a API de configuração e as definições da extensão para aplicar alterações de configuração do Argo CD.

Configurar monitorização com Azure Managed Prometheus e Azure Managed Grafana

Pode publicar métricas do Argo CD no Azure Managed Prometheus e visualizá-las no Azure Managed Grafana.

  1. Ative o Azure Managed Prometheus para o seu cluster. Consulte Ativar a monitorização para clusters do Azure Kubernetes Service (AKS).

  2. Atualize a configuração da sua extensão para ativar métricas e ServiceMonitors.

    var clusterName = '<aks-or-arc-cluster-name>'
    
    resource cluster 'Microsoft.ContainerService/managedClusters@2024-10-01' existing = {
      name: clusterName
    }
    
    resource extension 'Microsoft.KubernetesConfiguration/extensions@2023-05-01' = {
      name: 'argocd'
      scope: cluster
      properties: {
        extensionType: 'Microsoft.ArgoCD'
        configurationSettings: {
          // Keep your existing settings and add these metrics flags.
          'controller.metrics.enabled': 'true'
          'controller.metrics.serviceMonitor.enabled': 'true'
          'server.metrics.enabled': 'true'
          'server.metrics.serviceMonitor.enabled': 'true'
          'repoServer.metrics.enabled': 'true'
          'repoServer.metrics.serviceMonitor.enabled': 'true'
          'applicationSet.metrics.enabled': 'true'
          'applicationSet.metrics.serviceMonitor.enabled': 'true'
          'apiVersionOverrides.monitoring': 'azmonitoring.coreos.com/v1'
        }
      }
    }
    
  3. Importa o dashboard Grafana 14584 para a tua instância Azure Managed Grafana.

  4. Se os painéis mostrarem Sem dados, atualize as consultas do painel para ter em conta a nomenclatura de trabalhos do Azure Managed Prometheus.

  5. Nos painéis de telemetria do controlador (Utilização da Memória, Utilização do CPU, goroutines), alterar:

    • De job="argocd-metrics"
    • A job=~"argocd.*-metrics"
  6. Nos painéis do repo-server (Memória utilizada, goroutines), alterar:

    • De job="argocd-repo-server"
    • Para job="argocd-repo-server-metrics"
  7. Guarda o dashboard e verifica a ingestão de métricas.

Ativar o Argo CD no portal do Azure

Pode ativar o Argo CD no portal do Azure para ver o estado da candidatura e o estado da sincronização, e para aceder à interface do Argo CD. Para ativar o CD Argo no portal Azure, siga estes passos:

  1. Vai ao teu cluster no portal do Azure.

  2. No menu de serviço, em Configurações, selecione GitOps.

  3. Selecione Ativar Argo CD (Pré-visualização).

  4. Na seção Noções básicas :

    1. Define o namespace onde o CD do Argo corre. Por defeito, o namespace é argocd.
    2. Se desejar, ative o Redis High Availability (HA). Esta opção requer pelo menos 4 nós no cluster.
    3. Opcionalmente, adicione quaisquer namespaces adicionais a serem observados.
    4. Para clusters AKS apenas, opcionalmente ative o single sign on (SSO) para que os utilizadores possam iniciar sessão usando o Microsoft Entra ID, especificando uma Aplicação e um ou mais Grupos para permitir o acesso à interface do Argo CD.
    5. Se desejar, ative a identidade da carga de trabalho para permitir que o CD do Argo aceda aos serviços do Azure de forma segura sem armazenar segredos. Para o fazer, selecione a caixa Enable Workload Identity e especifique uma identidade gerida e um Azure Container Registry de onde extrair manifestos de aplicação ou artefactos de contentores.

    Captura de ecrã a mostrar o separador Basics com opções para ativar o Argo CD num cluster no portal Azure.

  5. Selecione Seguinte para continuar.

  6. Para clusters AKS que ativaram o complemento de encaminhamento de aplicações, o separador Ingress permite-lhe criar um recurso Ingress para encaminhar tráfego para um serviço. Se desejar, selecione Ativar Entrada e insira o seu nome de entrada, detalhes do certificado e nome de domínio. Selecione Seguinte para continuar.

  7. Na secção Rever + Implementar , revise as suas definições e depois selecione Implementar para ativar o Argo CD no seu cluster.

Aceda à interface do Argo CD

Se não existir controlador de entrada existente para o cluster AKS, então a interface do CD do Argo pode ser exposta diretamente usando um serviço LoadBalaner. O comando seguinte expõe a interface do CD Argo nas portas 80 e 443.

kubectl -n argocd expose service argocd-server --type LoadBalancer --name argocd-server-lb --port 80 --target-port 8080

Para aceder à interface do Argo CD a partir do portal do Azure, aceda ao seu cluster. No menu de serviço, em Configurações, selecione GitOps. Depois, selecione o link mostrado para a interface do Argo CD.

Captura de ecrã a mostrar o link para aceder à interface do CD Argo no portal Azure.

Implementar a aplicação Argo CD

Depois de instalar a extensão Argo CD, pode implementar uma aplicação usando a interface ou CLI do Argo CD. O exemplo seguinte utiliza kubectl apply para implementar o AKS Store numa aplicação Argo CD no projeto predefinido do Argo CD no espaço de nomes argocd.

kubectl apply -f - <<EOF
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: aks-store-demo
  namespace: argocd
spec:
  project: default
  source:
      repoURL: https://github.com/Azure-Samples/aks-store-demo.git
      targetRevision: HEAD
      path: kustomize/overlays/dev
  syncPolicy:
      automated: {}
  destination:
      namespace: argocd
      server: https://kubernetes.default.svc
EOF

A aplicação de demonstração da loja AKS está instalada no argocd namespace. Para consultar a página da candidatura, siga estas instruções. Certifique-se de visitar o endereço IP usando http e não https.

Atualizar configuração da extensão

Os mapas de configuração do Argo CD podem ser atualizados após a instalação e outras configurações de extensão usando o seguinte comando:

az k8s-extension update --resource-group <resource-group> \
  --cluster-name <cluster-name> \
  --cluster-type <cluster-type> \
  --name argocd \
  --config "configs.cm.url='https://<public-ip-for-argocd-ui>/auth/callback'"

Atualiza o configmap do Argo CD através da extensão, para que as definições não sejam sobrescritas. Aplicar o modelo Bicep é um método alternativo ao CLI do Azure para atualizar a configuração.

Excluir a extensão

Use os seguintes comandos para excluir a extensão.

az k8s-extension delete -g <resource-group> -c <cluster-name> -n argocd -t managedClusters --yes

Próximos passos

  • Problemas de ficheiros e pedidos de funcionalidades no repositório Azure/AKS. Certifique-se de incluir a palavra ArgoCD na descrição ou título.
  • Explore o exemplo de código de engenharia da AKS-Platform, que implementa o OSS Argo CD com Backstage e fornecedor da API do Cluster para Azure (CAPZ) ou Crossplane.