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
Um cluster conectado de Kubernetes habilitado para Azure Arc que esteja em execução. Há suporte para clusters baseados em ARM64 a partir da
microsoft.flux
versão 1.7.0.Saiba como conectar um cluster de Kubernetes ao Azure Arc. Caso precise se conectar por meio de um proxy de saída, instale os agentes do Arc com as configurações de proxy.
Permissões de leitura e de gravação no tipo de recurso
Microsoft.Kubernetes/connectedClusters
.
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 comaz aks create
, o cluster é baseado em MSI por padrão. Para clusters baseados em SPN já criados que precisam ser convertidos em MSI, executeaz 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 comandoaz 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 usarnamespace
o escopo com este tutorial, consulte as alterações necessárias. - Duas kustomizações são especificadas com os nomes
infra
eapps
. Cada uma é associada a um caminho no repositório. - A kustomização
apps
depende da kustomizaçãoinfra
. (A kustomizaçãoinfra
precisa ser concluída antes da execução da kustomizaçãoapps
.) - 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
efluxconfig-controller
- Controladores do Flux do OSS:
source-controller
,kustomize-controller
,helm-controller
enotification-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ãotrue
)--config helm-controller.enabled=<true/false>
(padrãotrue
)--config kustomize-controller.enabled=<true/false>
(padrãotrue
)--config notification-controller.enabled=<true/false>
(padrãotrue
)--config image-automation-controller.enabled=<true/false>
(padrãofalse
)--config image-reflector-controller.enabled=<true/false>
(padrãofalse
)
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:
- Controlador do Flux Kustomize
- Documentos de referência do Kustomize
- O arquivo de kustomização
- Projeto do Kustomize
- Guias do Kustomize
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:
- Flux para usuários do Helm
- Gerenciar versões do Helm
- Migração para o Flux v2 para Helm do Flux v1 para Helm
- Controlador do Flux para Helm
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.flux
v1.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.
Recupere a URL do emissor OIDC do seu cluster.
Criar uma identidade gerenciada e anotar sua ID de cliente.
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>
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
Certifique-se de que o recurso personalizado que precisa usar a identidade da carga de trabalho defina o valor
.spec.provider
comoazure
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
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
- Leia mais sobre as configurações e GitOps.
- Saiba como usar o Azure Policy para impor o GitOps em escala.
- Saiba mais sobre como monitorar o status e a atividade do GitOps (Flux v2).