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
Um cluster conectado ao Kubernetes habilitado para Azure Arc que está ativo e em execução. Clusters baseados em ARM64 são suportados a
microsoft.flux
partir da versão 1.7.0.Saiba como conectar um cluster Kubernetes ao Azure Arc. Se você precisar se conectar através de um proxy de saída, certifique-se de instalar os agentes Arc com configurações de proxy.
Permissões de
Microsoft.Kubernetes/connectedClusters
leitura e gravação no tipo de recurso.
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 comaz aks create
o , 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, 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 oaz 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 flux 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 usarnamespace
o escopo com este tutorial, consulte as alterações necessárias. - Duas kustomizations são especificadas com nomes
infra
eapps
. Cada um está associado a um caminho no repositório. - A
apps
kustomização depende dainfra
kustomização. (Ainfra
kustomização deve terminar antes que aapps
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 flux 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 source
controladores , helm
, kustomize
e 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ã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 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 raiz para provisionar adequadamente pods no cluster. Essas restrições devem ser adicionadas ao cluster antes de implantar a 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).
Trabalhar com referência de autenticação secreta local
Para usar uma referência de autenticação de segredo local, o segredo deve existir dentro do mesmo namespace onde o fluxConfiguration
será implantado. O segredo também deve conter todos os parâmetros de autenticação necessários para a origem.
Para obter informações sobre como criar segredos para várias fluxConfiguration
fontes, consulte Segredo local para autenticação com origem.
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:
- Controlador Flux Kustomize
- Documentos de referência Kustomize
- O arquivo de kustomização
- Projeto Kustomize
- Guias de Kustomize
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:
- Fluxo para usuários do Helm
- Gerenciar lançamentos do Helm
- Migrar para o Flux v2 Helm a partir do Flux v1 Helm
- Controlador Flux Helm
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
Substituição rigorosa de variáveis pós-construção
A substituição rigorosa de variáveis pós-compilação está disponível a microsoft.flux
partir da v1.13.1.
Para criar uma extensão do Flux com a política de substituição estrita ativada, execute este comando:
az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --extension-type microsoft.flux --config kustomize-controller.strict-substitution-mode=true
Para atualizar uma extensão existente do Flux para habilitar a política de substituição estrita, execute este comando:
az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.strict-substitution-mode=true
Dimensionamento vertical
O suporte para dimensionamento vertical está disponível a partir da microsoft.flux
v1.12.0. Atualmente, apenas parâmetros específicos descritos na documentação de dimensionamento vertical do Flux são suportados nativamente. Outros parâmetros podem ser aplicados manualmente ao cluster.
Para aumentar os limites de recursos em controladores além dos limites atuais, execute este comando, alterando o tipo de recurso específico e o valor conforme necessário:
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 podem ser executadas 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 a compilação 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
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.
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 AKS. A partir da microsoft.flux
v1.11.1, os pods do controlador Flux agora podem definir a anotação kubernetes.azure.com/set-kube-service-host-fqdn
em suas especificações de pod. 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 as implantações durante a instalação da extensão. Para configurar essa anotação ao usar a extensão Flux, use os comandos a seguir.
# 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 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.
Recupere a URL do emissor OIDC para seu cluster.
Crie uma identidade gerenciada e anote sua ID de cliente.
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>
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 # 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
Verifique se o recurso personalizado que precisa usar a identidade da carga de trabalho define
.spec.provider
o valor noazure
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 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
- Leia mais sobre configurações e GitOps.
- Saiba como usar a Política do Azure para impor o GitOps em escala.
- Saiba mais sobre como monitorar o status e a atividade do GitOps (Flux v2).