Este tópico responde às perguntas frequentes (FAQs) sobre o uso do GitOps.
Como um engenheiro de O&M controla as implantações de aplicações?
O que devo fazer se o repo-server do Argo CD retornar um erro "Out of diskspace"?
Como impedir que uma aplicação GitOps rastreie recursos externos à aplicação?
Como reinicio um componente do Argo CD após modificar seu ConfigMap?
Por que o gerador git do ApplicationSet não reflete as alterações de diretório do repositório git?
Conexão com um repositório git privado
Por questões de segurança, repositórios git privados geralmente não são acessíveis pela internet pública. Para conectar o ACK One GitOps a um repositório git privado, estabeleça a conectividade de rede e configure o ambiente adequadamente.
Etapa 1: Configure a resolução de nomes de domínio
Os passos a seguir usam git.abc.cn como exemplo de nome de domínio para o repositório git.
Conecte sua rede local à VPC do ACK One. Para mais informações, consulte Conectar um IDC local a uma VPC.
-
Use o PrivateZone para resolver nomes de domínio dentro da VPC.
-
Faça login no console DNS da Alibaba Cloud. Na página Private Zone, clique em na aba User Defined Zones e, em seguida, clique em Add Zone. Na caixa de diálogo, configure os parâmetros abaixo e clique em OK.
Authoritative Zone: abc.cn (exemplo baseado no domínio do repositório git
git.abc.cn)Recursive Resolution Proxy for Subdomain Names: Ative
: Selecione a VPC vinculada ao ACK One.
Na lista de nomes de domínio, localize o PrivateZone recém-criado. Na coluna Actions, clique em Settings para abrir a página Settings.
-
Na página Settings, clique em Add Record. Configure os seguintes parâmetros na caixa de diálogo e clique em OK.
Record Type: A
Hostname: git (exemplo:
git.abc.cn)Record Value: Insira o endereço IP do repositório git interno.
-
Etapa 2: Conectar-se ao repositório git
Após configurar a resolução de nomes de domínio, o ACK One GitOps poderá acessar o repositório git privado. Em seguida, conecte-se ao repositório git pelo console do GitOps ou pela interface de linha de comando (cli) para implantar aplicações. Para mais detalhes, consulte Repositórios Privados.
Agrupamento de aplicações no console
Agrupar aplicações melhora a usabilidade quando há um grande volume delas. No painel de navegação à esquerda do console GitOps, você pode:
Filtrar por Favorites Only, SYNC STATUS ou HEALTH STATUS.
Agrupar por LABELS, PROJECTS, CLUSTERS, NAMESPACES ou AUTO SYNC.
Controle das implantações de aplicações
É comum precisar controlar as implantações de aplicações, especialmente em pipelines automatizados de CI/CD. Use os métodos abaixo:
Use aplicações no modo
ManualSync. Após o push do código, um engenheiro de O&M revisa e verifique a aplicação. Se os requisitos forem atendidos, clique em manualmente emSyncpara sincronizar a aplicação com o cluster de destino.Atualize manualmente a versão da imagem no repositório de implantação. Caso não haja monitoramento automático de alterações no repositório de imagens, um engenheiro de O&M deve validar as novas imagens. Após a validação, atualize manualmente a versão da imagem no repositório de implantação da aplicação para acionar uma sincronização no Argo CD.
Estabeleça um mecanismo de revisão de código para o repositório de código de negócios em seu pipeline automatizado de CI/CD. Depois que um engenheiro de O&M aprovar a revisão e fizer o merge do código, o pipeline de CI constrói e envia a imagem automaticamente. O Argo CD detecta a mudança na imagem e a implanta nos ambientes configurados com
AutoSync. Também é possível implantar manualmente em ambientes configurados paraManualSync.
O que fazer se o repo-server do Argo CD reportar um erro Out of diskspace?
Sintoma
Ao verificar os logs executando o comando kubectl -nargocd logs xxxx, o repo-server retorna a seguinte mensagem de erro:
'git checkout --force xxx' failed exit status 128: error: unable to write file templates/deployment.yaml\nfat al: sha1 file '/tmp/_argocd-repo/xxx/.git/index.lock' write error. Out of diskspace...
Solução
Esse problema ocorre porque a falta de espaço em disco causa falha na gravação do arquivo .git/index.lock. Para resolver, aumente o armazenamento temporário dos Pods do componente Argo CD do ACK One GitOps. Esses componentes são executados no Elastic Container Instance (ECI) e possuem 30 GiB de armazenamento temporário padrão. Siga os passos abaixo para aumentar o armazenamento. Para informações sobre faturamento, consulte Faturamento de espaço de armazenamento temporário.
Obtenha o KubeConfig da instância fleet no console do ACK One e conecte-se à instância fleet usando kubectl. Para mais informações, consulte Obter o KubeConfig de um cluster e usar kubectl para conectar-se ao cluster.
-
No modelo de Pod do Deployment correspondente, adicione a anotação
k8s.aliyun.com/eci-extra-ephemeral-storage: "20Gi"ao Pod. É possível personalizar a quantidade de armazenamento temporário.-
Se o GitOps estiver no modo padrão, adicione a anotação ao Deployment argocd-server.
kubectl edit deployment -nargocd argocd-server -
Caso o GitOps esteja no Modo de Alta Disponibilidade, adicione a anotação ao Deployment argocd-dex-imageupdate-repo-server.
kubectl edit deployment -nargocd argocd-dex-imageupdate-repo-server
apiVersion: apps/v1 kind: Deployment metadata: ... ... spec: template: metadata: annotations: # This adds 20 GiB to the default 30 GiB, for a total of 50 GiB. The amount of extra temporary storage is customizable. k8s.aliyun.com/eci-extra-ephemeral-storage: "20Gi" ... ... ... -
Impedir o rastreamento de recursos fora da aplicação
Informações de base
O Argo CD usa o rótulo app.kubernetes.io/instance para rastrear recursos do Kubernetes. Se um recurso possuir esse rótulo e seu valor corresponder ao nome da Application, o Argo CD o rastreará. Isso pode manter o status da Application como OutOfSync e resultar na exclusão não intencional do recurso externo à aplicação. Para evitar esse comportamento, use uma das soluções a seguir.
Soluções
Solução 1: No ConfigMap
argocd/argocd-cmda instância fleet, adicioneresource.exclusionspara ignorar os recursos rastreados que não pertençam à aplicação. A configuração abaixo ignora recursosCiliumIdentity.
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
labels:
app.kubernetes.io/name: argocd-cm
app.kubernetes.io/part-of: argocd
data:
...
resource.exclusions: |
- apiGroups:
- cilium.io
kinds:
- CiliumIdentity
clusters:
- "*"
-
Solução 2: No ConfigMap
argocd/argocd-cmda instância fleet, adicione o rótulo de rastreamento personalizadoapplication.instanceLabelKey: argocd.argoproj.io/instance. Após essa alteração, os recursos gerenciados pelo Argo CD passarão a usar o rótuloargocd.argoproj.io/instance. Isso impede que o Argo CD rastreie outros recursos que possuam apenas o rótuloapp.kubernetes.io/instance. Ao aplicar essa configuração, as Applications existentes podem apresentar statusOutOfSyncaté serem ressincronizadas.apiVersion: v1 kind: ConfigMap metadata: name: argocd-cm labels: app.kubernetes.io/name: argocd-cm app.kubernetes.io/part-of: argocd data: ... application.instanceLabelKey: argocd.argoproj.io/instance
Reiniciar componentes após alterações no ConfigMap
No Argo CD, certas alterações no ConfigMap só entram em vigor após o reinício do componente correspondente.
A tabela abaixo lista os ConfigMaps frequentemente modificados.
|
Parâmetro |
Descrição |
Requer reinício? |
|
argocd-cm |
Defina configurações como OpenID Connect (OIDC) personalizado, |
Geralmente não requer reinício. Contudo, se a configuração não surtir efeito, reinicie o argocd-server. |
|
argocd-cmd-params-cm |
Configure variáveis de ambiente dos componentes do Argo CD. |
É necessário reiniciar o componente correspondente ou o argocd-server. |
|
argocd-rbac-cm |
Configure permissões de Controle de Acesso Baseado em Função (RBAC) do Argo CD. |
Normalmente, nenhum reinício é necessário. |
|
argocd-image-updater-config |
Gerencie as configurações do image-updater. |
Exige o reinício do componente correspondente ou do argocd-server. |
|
argocd-notifications-cm |
Gerencie as configurações do argocd-notification-controller. |
Requer o reinício do componente correspondente ou do argocd-server. |
O ACK One GitOps oferece dois modos operacionais:
No modo padrão, todos os componentes execute em um único Deployment. Para aplicar mudanças, reinicie o Deployment argocd-server.
-
No Modo de Alta Disponibilidade, os componentes são divididos em múltiplos Deployments. Reinicie componentes individuais conforme necessário.
argocd-server
argocd-application-controller: contém application-controller e applicationset-controller.
argocd-repo-server
argocd-dex-imageupdate-notification: contém image-updater, notification-controller e dex.
argocd-redis
Siga estes passos para reiniciar um componente:
Na página Multi-cluster GitOps, localize a seção Argo CD Component dentro do painel expansível GitOps.
Clique em Restart ao lado de Argo CD Component.
Na caixa de diálogo, selecione o componente a ser reiniciado na lista suspensa Select Application to Restart, por exemplo argocd-server, e clique em OK.
Gerador git não reflete alterações de diretório
Sintoma
Ao usar o gerador git com um ApplicationSet do Argo CD, novos recursos Application podem falhar ao serem criados após a adição ou renomeação de um diretório dependente no repositório git. Esse problema pode ocorrer mesmo que você atualize imediatamente o recurso ApplicationSet para apontar para o novo caminho do diretório.
Solução
Isso acontece porque o Argo CD não atualize automaticamente seu cache quando há mudança no caminho de um diretório. Para corrigir, force uma atualização adicionando a anotação argocd.argoproj.io/application-set-refresh="true" ao ApplicationSet que contém o gerador git. Veja o exemplo a seguir:
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
···
annotations:
···
argocd.argoproj.io/application-set-refresh: "true"
spec:
···
generators:
- git:
···
template:
···