Tutorial: Implantar aplicativos usando o GitOps com o Flux v2

Este tutorial descreve como usar o GitOps em um cluster de Kubernetes. O GitOps com Flux v2 é ativado como uma extensão de cluster em clusters Kubernetes habilitados para Azure Arc ou clusters Azure Kubernetes Service (AKS). Depois que a extensão de cluster microsoft.flux é instalada, você pode criar um ou mais recursos fluxConfigurations que sincronizam as fontes de repositório Git com o cluster e reconciliam o cluster para o estado desejado. Com o GitOps, você pode usar o repositório Git como a fonte de verdade para a configuração do cluster e a implantação do aplicativo.

Neste tutorial, utilizamos um exemplo de configuração do GitOps com duas kustomizations, para que você possa ver como uma kustomization pode ter uma dependência de outra. Você pode adicionar mais kustomizações e dependências conforme necessário, dependendo do seu cenário.

Antes de se aprofundar, reserve um tempo para saber como o GitOps com o Flux funciona conceitualmente.

Dica

Enquanto a fonte deste tutorial é um repositório Git, o Flux também fornece suporte para outras fontes de arquivos comuns, tais como repositórios Helm, Buckets e Armazenamento de Blobs do Azure.

Você também pode criar configurações do Flux usando o Bicep, modelos do ARM ou o provedor AzAPI do Terraform. Para obter mais informações, confira Microsoft.KubernetesConfiguration fluxConfigurations.

Importante

A extensão microsoft.flux lançou a versão principal 1.0.0. Isso inclui o recurso de multilocação. Se você tiver configurações existentes do GitOps Flux v2 que usam uma versão anterior da extensão microsoft.flux, você pode atualizar para a última versão manualmente usando a CLI do Azure: az k8s-extension create -g <RESOURCE_GROUP> -c <CLUSTER_NAME> -n flux --extension-type microsoft.flux -t <CLUSTER_TYPE> (use -t connectedClusters para clusters Arc e -t managedClusters para clusters AKS).

Pré-requisitos

Para implantar aplicativos usando o GitOps com o Flux v2, é necessário:

Para clusters de Kubernetes habilitado para Azure Arc

Para clusters do Serviço de Kubernetes do Azure

  • Um cluster do AKS baseado em MSI que esteja em execução.

    Importante

    Verifique se o cluster do AKS foi criado com o MSI (não o SPN), porque a extensão microsoft.flux não funcionará com clusters do AKS baseados em SPN. Quanto aos novos clusters AKS criados com az aks create, o cluster é baseado em MSI por padrão. Para clusters baseados em SPN já criados que precisam ser convertidos em MSI, execute az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity. Para obter mais informações, confira Usar uma identidade gerenciada no AKS.

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

Comum a ambos os tipos de cluster

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

    • Microsoft.KubernetesConfiguration/extensions
    • Microsoft.KubernetesConfiguration/fluxConfigurations
  • CLI do Azure versão 2.15 ou posterior. Instale a CLI do Azure ou use os seguintes comandos para atualizá-la para a última versão:

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

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

    az aks install-cli
    
  • Registro dos provedores de recursos do Azure a seguir:

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

    O registro é um processo assíncrono e deve ser concluído em dez minutos. Use o seguinte código para monitorar o processo de registro:

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

Suporte de versão e região

Atualmente, há suporte para o GitOps em todas as regiões às quais o Kubernetes habilitado para Azure Arc dá suporte. No momento, o GitOps tem suporte em um subconjunto das regiões às quais o AKS dá suporte. O serviço GitOps adiciona novas regiões com suporte em uma cadência regular.

Há suporte para a versão mais recente da extensão do Flux v2 e para as duas versões anteriores (N-2). Geralmente, recomenda-se usar a versão mais recente da extensão.

Requisitos de rede

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

Ponto de extremidade (DNS) Descrição
https://management.azure.com Necessário para que o agente se comunique com o Serviço de Configuração de Kubernetes.
https://<region>.dp.kubernetesconfiguration.azure.com Ponto de extremidade do plano de dados para o agente enviar o status por push e buscar informações de configuração. Depende de <region> (as regiões com suporte mencionadas anteriormente).
https://login.microsoftonline.com Necessário para buscar e atualizar tokens do Azure Resource Manager.
https://mcr.microsoft.com Necessário para efetuar pull das imagens de contêiner para os controladores do Flux.

Habilitar as extensões da CLI

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

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

Para atualizar esses 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 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.2.7
False          whl             k8s-configuration      C:\Users\somename\.azure\cliextensions\k8s-configuration    False     1.5.0
False          whl             k8s-extension          C:\Users\somename\.azure\cliextensions\k8s-extension        False     1.1.0

Dica

Para obter ajuda para resolver erros, consulte a seção GitOps (Flux v2) de Solucionar problemas de extensão para clusters Kubernetes habilitados para Azure Arc.

Aplicar uma configuração do Flux

Use a extensão k8s-configuration da CLI do Azure ou o portal do Azure para habilitar o GitOps em um cluster do AKS ou de Kubernetes habilitado para Arc. Para ver uma demonstração, use o repositório público gitops-flux2-kustomize-helm-mt.

Importante

O repositório de demonstração foi projetado para simplificar o uso deste tutorial e ilustrar alguns princípios importantes. Para manter-se atualizado, o repositório pode receber alterações significativas ocasionalmente de atualizações de versão. Essas alterações não afetarão seu novo aplicativo deste tutorial, apenas os aplicativos de tutorial anteriores que não foram excluídos. Para saber como lidar com essas alterações, consulte o aviso de alteração de interrupção.

O exemplo a seguir usa o comando az k8s-configuration flux create para aplicar uma configuração do Flux a um cluster, usando os seguintes valores e configurações:

  • O grupo de recursos que contém o cluster é flux-demo-rg.
  • O nome do cluster do Azure Arc é flux-demo-arc.
  • O tipo de cluster é o Azure Arc (-t connectedClusters), mas este exemplo também funciona com o AKS (-t managedClusters).
  • O nome da configuração do Flux é cluster-config.
  • O namespace para a instalação de configuração é cluster-config.
  • A URL para o repositório Git público é https://github.com/Azure/gitops-flux2-kustomize-helm-mt.
  • O branch do repositório Git é main.
  • O escopo da configuração é cluster. Este escopo fornece as permissões de operadores para fazer alterações em todo o cluster. Para usar namespace o escopo com este tutorial, consulte as alterações necessárias.
  • Duas kustomizações são especificadas com os nomes infra e apps. Cada uma é associada a um caminho no repositório.
  • A kustomização apps depende da kustomização infra. (A kustomização infra precisa ser concluída antes da execução da kustomização apps.)
  • Defina prune=true em ambas as kustomizações. Essa configuração garante que os objetos que o Flux implantou no cluster sejam limpos se forem removidos do repositório ou se a configuração ou as personalizações do Flux forem excluídas.
az k8s-configuration flux create -g flux-demo-rg \
-c flux-demo-arc \
-n cluster-config \
--namespace cluster-config \
-t connectedClusters \
--scope cluster \
-u https://github.com/Azure/gitops-flux2-kustomize-helm-mt \
--branch main  \
--kustomization name=infra path=./infrastructure prune=true \
--kustomization name=apps path=./apps/staging prune=true dependsOn=\["infra"\]

A extensão microsoft.flux será instalada no cluster (se ainda não tiver sido instalada em uma implantação anterior do GitOps).

Dica

O comando az k8s-configuration flux create implanta a extensão microsoft.flux no cluster e cria a configuração. Em alguns cenários, talvez você queira criar a instância de extensão flux separadamente antes de criar seus recursos de configuração. Para fazer isso, use o comando az k8s-extension create para criar uma instância da extensão no cluster.

Quando a configuração de fluxo é instalada pela primeira vez, o estado de conformidade inicial pode ser Pending ou Non-compliant porque a reconciliação ainda está em andamento. Após cerca de um minuto, consulte a configuração novamente para ver o estado de conformidade final.

az k8s-configuration flux show -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters

Para confirmar se a implantação foi bem-sucedida, execute o seguinte comando:

az k8s-configuration flux show -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters

Com uma implantação bem-sucedida, os seguintes namespaces são criados:

  • flux-system: contém os controladores de extensão do Flux.
  • cluster-config: contém os objetos de configuração do Flux.
  • nginx, podinfo, redis: namespaces para cargas de trabalho descritas em manifestos no repositório Git.

Para confirmar os namespaces, execute o seguinte comando:

kubectl get namespaces

O namespace flux-system contém os objetos de extensão do Flux:

  • Controladores do Flux do Azure: fluxconfig-agent e fluxconfig-controller
  • Controladores do Flux do OSS: source-controller, kustomize-controller, helm-controller e notification-controller

O agente do Flux e os pods de controlador devem estar em estado de execução. Confirme isso usando o seguinte comando:

kubectl get pods -n flux-system

NAME                                      READY   STATUS    RESTARTS   AGE
fluxconfig-agent-9554ffb65-jqm8g          2/2     Running   0          21m
fluxconfig-controller-9d99c54c8-nztg8     2/2     Running   0          21m
helm-controller-59cc74dbc5-77772          1/1     Running   0          21m
kustomize-controller-5fb7d7b9d5-cjdhx     1/1     Running   0          21m
notification-controller-7d45678bc-fvlvr   1/1     Running   0          21m
source-controller-df7dc97cd-4drh2         1/1     Running   0          21m

O namespace cluster-config tem os objetos de configuração do Flux.

kubectl get crds

NAME                                                   CREATED AT
alerts.notification.toolkit.fluxcd.io                  2022-04-06T17:15:48Z
arccertificates.clusterconfig.azure.com                2022-03-28T21:45:19Z
azureclusteridentityrequests.clusterconfig.azure.com   2022-03-28T21:45:19Z
azureextensionidentities.clusterconfig.azure.com       2022-03-28T21:45:19Z
buckets.source.toolkit.fluxcd.io                       2022-04-06T17:15:48Z
connectedclusters.arc.azure.com                        2022-03-28T21:45:19Z
customlocationsettings.clusterconfig.azure.com         2022-03-28T21:45:19Z
extensionconfigs.clusterconfig.azure.com               2022-03-28T21:45:19Z
fluxconfigs.clusterconfig.azure.com                    2022-04-06T17:15:48Z
gitconfigs.clusterconfig.azure.com                     2022-03-28T21:45:19Z
gitrepositories.source.toolkit.fluxcd.io               2022-04-06T17:15:48Z
helmcharts.source.toolkit.fluxcd.io                    2022-04-06T17:15:48Z
helmreleases.helm.toolkit.fluxcd.io                    2022-04-06T17:15:48Z
helmrepositories.source.toolkit.fluxcd.io              2022-04-06T17:15:48Z
imagepolicies.image.toolkit.fluxcd.io                  2022-04-06T17:15:48Z
imagerepositories.image.toolkit.fluxcd.io              2022-04-06T17:15:48Z
imageupdateautomations.image.toolkit.fluxcd.io         2022-04-06T17:15:48Z
kustomizations.kustomize.toolkit.fluxcd.io             2022-04-06T17:15:48Z
providers.notification.toolkit.fluxcd.io               2022-04-06T17:15:48Z
receivers.notification.toolkit.fluxcd.io               2022-04-06T17:15:48Z
volumesnapshotclasses.snapshot.storage.k8s.io          2022-03-28T21:06:12Z
volumesnapshotcontents.snapshot.storage.k8s.io         2022-03-28T21:06:12Z
volumesnapshots.snapshot.storage.k8s.io                2022-03-28T21:06:12Z
websites.extensions.example.com                        2022-03-30T23:42:32Z

Confirme outros detalhes da configuração usando os comandos a seguir.

kubectl get fluxconfigs -A

NAMESPACE        NAME             SCOPE     URL                                                       PROVISION   AGE
cluster-config   cluster-config   cluster   https://github.com/Azure/gitops-flux2-kustomize-helm-mt   Succeeded   44m
kubectl get gitrepositories -A

NAMESPACE        NAME             URL                                                       READY   STATUS                                                            AGE
cluster-config   cluster-config   https://github.com/Azure/gitops-flux2-kustomize-helm-mt   True    Fetched revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   45m
kubectl get helmreleases -A

NAMESPACE        NAME      READY   STATUS                             AGE
cluster-config   nginx     True    Release reconciliation succeeded   66m
cluster-config   podinfo   True    Release reconciliation succeeded   66m
cluster-config   redis     True    Release reconciliation succeeded   66m
kubectl get kustomizations -A


NAMESPACE        NAME                   READY   STATUS                                                            AGE
cluster-config   cluster-config-apps    True    Applied revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   65m
cluster-config   cluster-config-infra   True    Applied revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   65m

As cargas de trabalho são implantadas de manifestos no repositório Git.

kubectl get deploy -n nginx

NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
nginx-ingress-controller                   1/1     1            1           67m
nginx-ingress-controller-default-backend   1/1     1            1           67m

kubectl get deploy -n podinfo

NAME      READY   UP-TO-DATE   AVAILABLE   AGE
podinfo   1/1     1            1           68m

kubectl get all -n redis

NAME                 READY   STATUS    RESTARTS   AGE
pod/redis-master-0   1/1     Running   0          68m

NAME                     TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
service/redis-headless   ClusterIP   None          <none>        6379/TCP   68m
service/redis-master     ClusterIP   10.0.13.182   <none>        6379/TCP   68m

NAME                            READY   AGE
statefulset.apps/redis-master   1/1     68m

Controlar quais controladores são implantados com a extensão de cluster do Flux

Para alguns cenários, talvez seja recomendável alterar quais controladores de Flux estão instalados com a extensão de cluster do Flux.

Os controladores do Flux source, helm, kustomize e notification são instalados por padrão. Os controladores image-automation e image-reflector, usados para atualizar um repositório Git quando novas imagens de contêiner estão disponíveis, devem ser habilitados explicitamente.

Você pode usar o comando k8s-extension para alterar as opções padrão:

  • --config source-controller.enabled=<true/false> (padrão true)
  • --config helm-controller.enabled=<true/false> (padrão true)
  • --config kustomize-controller.enabled=<true/false> (padrão true)
  • --config notification-controller.enabled=<true/false> (padrão true)
  • --config image-automation-controller.enabled=<true/false> (padrão false)
  • --config image-reflector-controller.enabled=<true/false> (padrão false)

Por exemplo, para desabilitar as notificações, você pode definir notification-controller.enabled como false.

Este comando de exemplo instala os controladores image-reflector e image-automation. Se a extensão Flux foi criada automaticamente quando uma configuração do Flux foi criada pela primeira vez, o nome da extensão é flux.

az k8s-extension create -g <cluster_resource_group> -c <cluster_name> -t <connectedClusters or managedClusters or provisionedClusters> --name flux --extension-type microsoft.flux --config image-automation-controller.enabled=true image-reflector-controller.enabled=true

Uso da identidade de Kubelet como método de autenticação para clusters AKS

Para clusters AKS, uma das opções de autenticação é a identidade de kubelet. Por padrão, o AKS cria sua própria identidade kubelet no grupo de recursos gerenciados. Se preferir, você poderá usar uma identidade gerenciada de kubelet criada previamente. Para fazer isso, adicione o parâmetro --config useKubeletIdentity=true no momento da instalação da extensão do Flux.

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type managedClusters --name flux --extension-type microsoft.flux --config useKubeletIdentity=true

Diretrizes de integração do Red Hat OpenShift

Os controladores Flux exigem uma Restrição de contexto de segurança não raiz para provisionar corretamente pods no cluster. Essas restrições precisam ser adicionadas ao cluster antes de implantar a extensão microsoft.flux.

NS="flux-system"
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:kustomize-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:helm-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:source-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:notification-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:image-automation-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:image-reflector-controller

Para obter mais informações sobre as diretrizes do OpenShift para integrar o Flux, confira a documentação do Flux.

Trabalhar com parâmetros

O Flux dá suporte a muitos parâmetros para habilitar vários cenários. Para ver uma descrição de todos os parâmetros compatíveis com o Flux, confira a documentação oficial do Flux. O Flux no Azure ainda não dá suporte a todos os parâmetros. Entre em contato conosco caso um parâmetro de que você precisa esteja ausente na implementação do Azure.

Para obter informações sobre parâmetros disponíveis e como usá-los, consulte parâmetros com suporte do GitOps (Flux v2).

Trabalhar com referência de autenticação de segredo local

Para usar uma referência de autenticação de segredo local, o segredo precisa existir no mesmo namespace em que fluxConfiguration será implantado. O segredo também precisa conter todos os parâmetros de autenticação necessários para a origem.

Para obter informações sobre como criar segredos para várias fontes de fluxConfiguration, consulte Segredo local para autenticação com a origem.

Gerenciar a configuração do cluster usando o controlador do Flux Kustomize

O controlador de kustomização do Flux é instalado como parte da extensão de cluster microsoft.flux. Ele permite o gerenciamento declarativo da configuração do cluster e a implantação de aplicativos usando manifestos de Kubernetes sincronizados de um repositório Git. Opcionalmente, esses manifestos do Kubernetes podem incluir um arquivo kustomize.yaml.

Para obter detalhes de uso, confira os seguintes recursos:

Gerenciar versões de gráfico do Helm usando o controlador do Flux para Helm

O controlador do Flux para Helm é instalado como parte da extensão de cluster microsoft.flux. Ele permite que você gerencie de modo declarativo as versões de gráfico do Helm com manifestos de Kubernetes que você mantém no repositório Git.

Para obter detalhes de uso, confira os seguintes recursos:

Dica

Devido à forma como o Helm lida com arquivos de índice, o processamento de gráficos helm é uma operação cara e pode ter um volume de memória muito alto. Como resultado, reconciliar um grande número de gráficos do Helm de uma só vez pode causar picos de memória e OOMKilled erros. Por padrão, o controlador define seu limite de memória em 1Gi e suas solicitações de memória em 64Mi. Para aumentar esse limite e as solicitações devido a um grande número de reconciliações de gráfico de Helm grandes, execute o seguinte comando após a instalação da extensão microsoft.flux:

az k8s-extension update -g <resource-group> -c <cluster-name> -n flux -t connectedClusters --config source-controller.resources.limits.memory=2Gi source-controller.resources.requests.memory=300Mi

Usar a origem GitRepository em gráficos do Helm

Se seus gráficos de Helm estiverem armazenados na origem GitRepository configurada como parte do recurso fluxConfigurations, será possível indicar que ela deve ser usada como a origem dos gráficos de Helm adicionando clusterconfig.azure.com/use-managed-source: "true" ao arquivo .yaml da HelmRelease, conforme mostrado no seguinte exemplo:

---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: somename
  namespace: somenamespace
  annotations:
    clusterconfig.azure.com/use-managed-source: "true"
spec:
  ...

Quando você usa essa anotação, o HelmRelease implantado é corrigido com a referência à origem configurada. Atualmente, só há suporte para GitRepository origem.

Detecção de descompasso do Helm

A detecção de descompasso para versões do Helm não está habilitada por padrão. A partir da microsoft.flux v1.7.5, você pode habilitar a detecção de descompasso do Helm executando o seguinte comando:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --name flux --cluster-type <cluster-type> --config helm-controller.detectDrift=true 

Dimensionamento vertical

O suporte para a realização de escala vertical está disponível a partir da versão microsoft.flux v1.12.0. Atualmente, somente parâmetros específicos descritos na documentação de escala vertical do Flux têm suporte nativo. Você pode aplicar outros parâmetros manualmente ao cluster.

Para aumentar os limites de recursos em controladores além dos limites atuais, execute este comando e, se necessário, altere o tipo de recurso e o valor em questão:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.resources.limits.memory=2Gi kustomize-controller.resources.limits.cpu=2000m

Para aumentar o número de reconciliações que você pode executar em paralelo, execute este comando:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.concurrent=6 kustomize-controller.requeue-dependency=50s

Para habilitar o build na memória, execute este comando:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.enable-in-memory-build=true

Vigilância de OOM do Helm

A partir da microsoft.flux v1.7.5, você pode habilitar a vigilância de OOM do Helm. Para obter mais informações, confira Habilitar a detecção de quase OOM do Helm.

Certifique-se de examinar as possíveis estratégias de correção e aplique-as conforme necessário ao habilitar esse recurso.

Para habilitar a vigilância de OOM, execute o seguinte comando:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --name flux --cluster-type <cluster-type> --config helm-controller.outOfMemoryWatch.enabled=true helm-controller.outOfMemoryWatch.memoryThreshold=70 helm-controller.outOfMemoryWatch.interval=700ms

Se você não especificar valores para memoryThreshold e outOfMemoryWatch, o limite de memória padrão será definido como 95%, com o intervalo no qual verificar a utilização da memória definido como 500 ms.

Parâmetros configuráveis de nível de registro

Por padrão, o log-level para controladores do Flux é definido como info. Começando com microsoft.flux v1.8.3, você pode modificar essas configurações padrão usando o comando k8s-extension da seguinte maneira:

--config helm-controller.log-level=<info/error/debug>
--config source-controller.log-level=<info/error/debug>
--config kustomize-controller.log-level=<info/error/debug>
--config notification-controller.log-level=<info/error/debug>
--config image-automation-controller.log-level=<info/error/debug>
--config image-reflector-controller.log-level=<info/error/debug>

Os valores válidos são debug, info ou error. Por exemplo, para alterar o log-level no source-controller e kustomize-controller, use o seguinte comando:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config source-controller.log-level=error kustomize-controller.log-level=error

Começando com microsoft.fluxv1.9.1, fluxconfig-agent e fluxconfig-controller dão suporte aos níveis de log info e error (mas não debug). Elas podem ser modificadas usando o comando k8s-extension da seguinte maneira:

--config fluxconfig-agent.log-level=<info/error>
--config fluxconfig-controller.log-level=<info/error>

Por exemplo, o comando a seguir muda log-level para error:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config fluxconfig-agent.log-level=error fluxconfig-controller.log-level=error

Substituição do SSH-RSA do Azure DevOps

O Azure DevOps anunciou a substituição do SSH-RSA como um método de criptografia com suporte para se conectar aos repositórios do Azure usando o SSH. Se você usar as chaves do SSH para se conectar aos repositórios do Azure nas configurações do Flux, recomendamos mover para as chaves RSA-SHA2-256 ou RSA-SHA2-512 mais seguras.

Ao reconciliar as configurações do Flux, você pode ver uma mensagem de erro indicando que ssh-rsa está prestes a ser preterido ou não tem suporte. Nesse caso, atualize o algoritmo da chave do host usado para estabelecer as conexões SSH nos repositórios do Azure DevOps do Flux source-controller e image-automation-controller (se habilitado) usando o comando az k8s-extension update. Por exemplo:

az k8s-extension update --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type <cluster-type> --name flux --config source-controller.ssh-host-key-args="--ssh-hostkey-algos=rsa-sha2-512,rsa-sha2-256"

az k8s-extension update --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type <cluster-type> --name flux --config image-automation-controller.ssh-host-key-args="--ssh-hostkey-algos=rsa-sha2-512,rsa-sha2-256"

Para obter mais informações sobre a substituição do SSH-RSA do Azure DevOps, consulte Fim do suporte do SSH-RSA para o Azure Repos.

Configurar anotação em pods de extensão do Flux

Ao configurar uma solução diferente do Firewall do Azure, as regras de rede e FQDN/aplicativo são necessárias para um cluster do AKS. A partir do microsoft.flux v1.11.1, os pods do controlador Flux agora podem definir a anotação kubernetes.azure.com/set-kube-service-host-fqdn nas especificações de pod deles. Isso permite o tráfego para o nome de domínio do Servidor de API mesmo quando um firewall de Camada 7 está presente, facilitando implantações durante a instalação da extensão. Use os comandos a seguir para configurar essa anotação ao usar a extensão Flux.

# Create flux extension with annotation

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --extension-type microsoft.flux --config setKubeServiceHostFqdn=true
    
# Update flux extension with annotation

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config setKubeServiceHostFqdn=true

Identidade da carga de trabalho nos clusters do AKS

A partir da versão microsoft.flux v1.8.0, você pode criar configurações do Flux em clusters do AKS com a identidade da carga de trabalho habilitada. Para isso, modifique a extensão do fluxo conforme mostrado nas etapas a seguir.

  1. Recupere a URL do emissor OIDC do seu cluster.

  2. Criar uma identidade gerenciada e anotar sua ID de cliente.

  3. Crie a extensão de fluxo no cluster, utilizando o seguinte comando:

    az k8s-extension create --resource-group <resource_group_name> --cluster-name <aks_cluster_name> --cluster-type managedClusters --name flux --extension-type microsoft.flux --config workloadIdentity.enable=true workloadIdentity.azureClientId=<user_assigned_client_id>
    
  4. Estabelecer uma credencial de identidade federada. 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 "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"source-controller" --audience api://AzureADTokenExchange
    
    # For image-reflector controller if you plan to enable it during extension creation, it is not deployed by default
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"image-reflector-controller" --audience api://AzureADTokenExchange
    
    # For kustomize-controller
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"kustomize-controller" --audience api://AzureADTokenExchange
    
  5. Certifique-se de que o recurso personalizado que precisa usar a identidade da carga de trabalho defina o valor .spec.provider como azure no manifesto. Por exemplo:

    apiVersion: source.toolkit.fluxcd.io/v1beta2
    kind: HelmRepository
    metadata:
      name: acrrepo
    spec:
      interval: 10m0s
      type: <helm_repository_type>
      url: <helm_repository_link>
      provider: azure
    
  6. Certifique-se de fornecer as permissões adequadas para a identidade da carga de trabalho do recurso que você deseja que o controlador de origem ou do refletor de imagens efetue pull. Por exemplo, se utilizar o Registro de Contêiner do Azure, são exigidas as permissões AcrPull.

Excluir a configuração e a extensão do Flux

Use os comandos a seguir para excluir a configuração do Flux e, se desejado, a extensão do Flux propriamente dita.

Excluir as configurações do Flux

O comando a seguir exclui o recurso fluxConfigurations no Azure e os objetos de configuração do Flux no cluster. Como a configuração do Flux foi criada originalmente com o parâmetro prune=true para a personalização, todos os objetos criados no cluster com base em manifestos no repositório Git serão removidos quando a configuração do Flux for removida. No entanto, esse comando não remove a própria extensão do Flux.

az k8s-configuration flux delete -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters --yes

Excluir a extensão do cluster do Flux

Quando você excluir a extensão do Flux, o recurso de extensão microsoft.flux no Azure e os objetos de extensão do Flux no cluster serão removidos.

Importante

Exclua todas as configurações do Flux no cluster antes de excluir a extensão Flux. Excluir a extensão sem primeiro excluir as configurações do Flux pode deixar o cluster em uma condição instável.

Se a extensão do Flux tiver sido criada automaticamente quando a configuração do Flux foi criada pela primeira vez, o nome da extensão será flux.

az k8s-extension delete -g flux-demo-rg -c flux-demo-arc -n flux -t connectedClusters --yes

Dica

Esses comandos usam -t connectedClusters, que é apropriado para um cluster do Kubernetes habilitado para Azure Arc. Para um cluster do AKS, use -t managedClusters em vez disso.

Próximas etapas