Tutorial: Implantar aplicativos usando GitOps com o Flux v2

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

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

Antes de mergulhar, reserve um momento para aprender como o GitOps com o Flux funciona conceitualmente.

Gorjeta

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

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

Importante

A microsoft.flux extensão 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 microsoft.flux extensão, poderá atualizar para a versão mais recente 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 clusters AKS).

Pré-requisitos

Para implantar aplicativos usando GitOps com o Flux v2, você precisa:

Para clusters Kubernetes habilitados para Azure Arc

Para clusters do Serviço Kubernetes do Azure

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

    Importante

    Certifique-se de que o cluster AKS é criado com MSI (não SPN), porque a microsoft.flux extensão não funcionará com clusters AKS baseados em SPN. Para novos clusters AKS criados com az aks createo , 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, 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
    • Microsoft.KubernetesConfiguration/fluxConfigurations
  • 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
    

Suporte a versões e regiões

Atualmente, há suporte para o GitOps em todas as regiões suportadas pelo Kubernetes habilitado para Azure Arc. O GitOps é suportado atualmente num subconjunto das regiões suportadas pelo AKS. O serviço GitOps está adicionando novas regiões suportadas em uma cadência regular.

A versão mais recente da extensão Flux v2 e as duas versões anteriores (N-2) são suportadas. Geralmente, recomendamos que você use a versão mais recente da extensão.

Requisitos da rede

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

Ponto final (DNS) Description
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 O ponto final do plano de dados para o agente emitir o estado e obter 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 solicitar as imagens de contentor para os controladores do Flux.

Habilitar extensões de CLI

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

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

Gorjeta

Para obter ajuda na resolução de 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 k8s-configuration extensão da CLI do Azure ou o portal do Azure para habilitar o GitOps em um cluster Kubernetes habilitado para AKS ou Arc. Para 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-chave. Para se manter atualizado, o repositório pode obter alterações de quebra ocasionalmente a partir 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 a declaração de isenção de responsabilidade de alteração de quebra.

O exemplo a seguir usa o az k8s-configuration create comando para aplicar uma configuração 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 é Azure Arc (-t connectedClusters), mas este exemplo também funciona com AKS (-t managedClusters).
  • O nome da configuração do Flux é cluster-config.
  • O namespace para instalação de configuração é cluster-config.
  • A URL do repositório Git público é https://github.com/Azure/gitops-flux2-kustomize-helm-mt.
  • A ramificação do repositório Git é main.
  • O escopo da configuração é cluster. Esse escopo dá aos operadores permissões para fazer alterações em todo o cluster. Para usar namespace o escopo com este tutorial, consulte as alterações necessárias.
  • Duas kustomizations são especificadas com nomes infra e apps. Cada um está associado a um caminho no repositório.
  • A apps kustomização depende da infra kustomização. (A infra kustomização deve terminar antes que a apps kustomização seja executada.)
  • Definido prune=true em ambas as kustomizations. 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 kustomizations 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 microsoft.flux extensão é instalada no cluster (se ainda não tiver sido instalada em uma implantação anterior do GitOps).

Gorjeta

O az k8s-configuration create comando implanta a microsoft.flux extensão no cluster e cria a configuração. Em alguns cenários, convém criar a instância de extensão de fluxo separadamente antes de criar seus recursos de configuração. Para fazer isso, use o az k8s-extension create comando 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 que 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 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 flux-system namespace contém os objetos de extensão Flux:

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

Os pods do agente Flux e do 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 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 a partir 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

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

Para alguns cenários, você pode querer alterar quais controladores Flux estão instalados com a extensão de cluster Flux.

Os sourcecontroladores , helm, kustomizee notification Flux são instalados por padrão. Os image-automation controladores 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 k8s-extension comando 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 desativar notificações, você pode definir notification-controller.enabled como false.

Este comando de exemplo instala os image-reflector controladores 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

Usando a identidade Kubelet como método de autenticação para clusters AKS

Para clusters AKS, uma das opções de autenticação a serem usadas é a identidade kubelet. Por padrão, o AKS cria sua própria identidade kubelet no grupo de recursos gerenciados. Se preferir, você pode usar uma identidade gerenciada kubelet pré-criada. Para fazer isso, adicione o parâmetro --config useKubeletIdentity=true no momento da instalação da extensão 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

Orientação de integração do Red Hat OpenShift

Os controladores de fluxo exigem uma restrição de contexto de segurança não raizpara provisionar adequadamente pods no cluster. Essas restrições devem ser adicionadas ao cluster antes da integração da microsoft.flux extensão.

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 orientações do OpenShift para integração do Flux, consulte a documentação do Flux.

Trabalhar com parâmetros

O Flux suporta muitos parâmetros para permitir vários cenários. Para obter uma descrição de todos os parâmetros suportados pelo Flux, consulte a documentação oficial do Flux. O Flux no Azure ainda não suporta todos os parâmetros. Deixe-nos saber se um parâmetro que você precisa está faltando na implementação do Azure.

Para obter informações sobre os parâmetros disponíveis e como usá-los, consulte Parâmetros suportados pelo GitOps (Flux v2).

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

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

Para obter detalhes de uso, consulte os seguintes recursos:

Gerencie as liberações do gráfico Helm usando o controlador Flux Helm

O controlador Flux Helm é instalado como parte da microsoft.flux extensão do cluster. Ele permite que você gerencie declarativamente as liberações de gráficos do Helm com manifestos do Kubernetes que você mantém em seu repositório Git.

Para obter detalhes de uso, consulte os seguintes recursos:

Gorjeta

Devido à forma como o Helm lida com arquivos de índice, o processamento de gráficos Helm é uma operação cara e pode ter um espaço de memória muito alto. Como resultado, conciliar um grande número de gráficos 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 solicitações devido a um grande número de reconciliações de gráficos Helm, execute o seguinte comando depois de instalar a 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

Use a fonte GitRepository para gráficos Helm

Se os gráficos Helm estiverem armazenados na GitRepository fonte que você configurar como parte do recurso, você poderá indicar que a fonte configurada fluxConfigurations deve ser usada como a origem dos gráficos Helm adicionando clusterconfig.azure.com/use-managed-source: "true" ao arquivo HelmRelease.yaml, conforme mostrado no exemplo a seguir:

---
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 à fonte configurada. Atualmente, apenas GitRepository o código-fonte é suportado.

Deteção de desvio de leme

A deteção de desvio para versões do Helm não está habilitada por padrão. A partir da microsoft.flux v1.7.5, você pode habilitar a deteção de desvio 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 

Relógio Helm OOM

A partir da microsoft.flux v1.7.5, você pode ativar o relógio Helm OOM. Para obter mais informações, consulte Habilitar Helm perto da deteção OOM.

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

Para habilitar o monitoramento 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 no nível de log

Por padrão, o log-level para controladores Flux é definido como info. A partir da microsoft.flux v1.8.3, você pode modificar essas configurações padrão usando o k8s-extension comando 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 para o 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 v1.9.1fluxconfig-agent e fluxconfig-controller níveis de suporte info e error log (mas não debug).microsoft.flux Eles podem ser modificados 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

Descontinuação do Azure DevOps SSH-RSA

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 SSH. Se você usar chaves SSH para se conectar a repositórios do Azure em configurações do Flux, recomendamos mudar para 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 o ssh-rsa está prestes a ser preterido ou não é suportado. Em caso afirmativo, atualize o algoritmo de chave de host usado para estabelecer conexões SSH com repositórios de DevOps do Azure a partir do Flux source-controller e image-automation-controller (se habilitado) usando o az k8s-extension update comando. 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 Azure DevOps SSH-RSA, consulte Fim do suporte SSH-RSA para Azure Repos.

Identidade da carga de trabalho em clusters AKS

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

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

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

  3. Crie a extensão de fluxo no cluster, usando 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. Estabeleça 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
    
  5. Verifique se o recurso personalizado que precisa usar a identidade da carga de trabalho define .spec.provider o valor no azure 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 permissões adequadas para a identidade da carga de trabalho para o recurso que você deseja que o controlador de origem ou o controlador refletor de imagem extraia. Por exemplo, se estiver usando o Registro de Contêiner do Azure, AcrPull as permissões serão necessárias.

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

Use os comandos a seguir para excluir suas configurações do Flux e, se desejar, a própria extensão do Flux.

Excluir as configurações do Flux

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

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

Excluir a extensão de cluster do Flux

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

Importante

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

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

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

Gorjeta

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

Próximos passos