Algumas formas de instalação
Conceitos e componentes
Requisitos Gerais
- Versão mínima: 1.24+
- Recomendado: 1.27+
- Suporte: IPv4 ou dual-stack (IPv4+IPv6)
- kubectl
- helm
Requisitos para cada tipo de instalação
Standard (Non-HA)
RequisitoEspecificaçãoNós KubernetesMínimo 1 worker (pode rodar no master schedulable)CPU Total2 cores (requests) / 4 cores (limits)RAM Total2 GB (requests) / 4 GB (limits)Storage5-10 GB para repos e cacheCasos de usoDev, Test, Homelab, Avaliação
High Availability (HA)
RequisitoEspecificaçãoNós KubernetesMÍNIMO 3 nós diferentes (devido a pod anti-affinity)CPU Total6-8 cores (requests) / 12-15 cores (limits)RAM Total6-8 GB (requests) / 12-16 GB (limits)Storage10-20 GB para repos e cacheCasos de usoProdução, ambientes críticos
⚠️ Por que 3 nós para HA? A instalação HA usa pod anti-affinity para garantir que:
- Réplicas do mesmo componente rodem em nós diferentes;
- Redis HA deploy com 3 réplicas em 3 nós distintos;
- Alta disponibilidade: se 1 nó cai, serviço continua.
Instalação Standard
A instalação Standard é ideal para:
- Ambientes de desenvolvimento;
- Testes e avaliação;
- Homelabs;
- Clusters com 1-2 nós.
Método 1: Via Kubectl (Recomendado)
Passo 1: Criar namespace
kubectl create namespace argocd
Passo 2: Instalar ArgoCD
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Passo 3: Verificar instalação
# Ver todos os pods
kubectl get pods -n argocd
# Ver os services criados
kubectl get svc -n argocd
Output esperado:
NAME READY STATUS RESTARTS AGE
argocd-application-controller-0 1/1 Running 0 2m
argocd-applicationset-controller-x 1/1 Running 0 2m
argocd-dex-server-xxx 1/1 Running 0 2m
argocd-notifications-controller-xxx 1/1 Running 0 2m
argocd-redis-xxx 1/1 Running 0 2m
argocd-repo-server-xxx 1/1 Running 0 2m
argocd-server-xxx 1/1 Running 0 2m
Método 2: Via Helm
Passo 1: Adicionar repositório Helm
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
Passo 2: Instalar ArgoCD
helm install argocd argo/argo-cd \
--namespace argocd \
--create-namespace
Passo 3: Verificar instalação
helm list -n argocd
kubectl get pods -n argocd
Instalação High Availability (HA)
A instalação HA é recomendada para:
- Ambientes de produção
- Clusters críticos
- Gerenciamento de múltiplas aplicações
- Requisitos de uptime elevados
# Listar nodes ready
kubectl get nodes
# Ver quais podem receber pods
kubectl get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints
Método 1: Via Kubectl
Passo 1: Criar namespace
kubectl create namespace argocd
Passo 2: Instalar ArgoCD HA
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/ha/install.yaml
Este comando instala:
- ✅ API Server (3 réplicas)
- ✅ Application Controller (3 réplicas)
- ✅ Repo Server (3 réplicas)
- ✅ Redis HA (3 réplicas + Sentinel)
- ✅ Redis HAProxy (3 réplicas)
- ✅ Dex Server (1 réplica)
- ✅ ApplicationSet Controller (2 réplicas)
Passo 3: Verificar instalação HA
# Ver todos os pods e em quais nós estão
kubectl get pods -n argocd -o wide
# Verificar Redis HA
kubectl get pods -n argocd | grep redis
# Ver distribuição dos pods nos nós
kubectl get pods -n argocd -o wide | awk '{print $1"\t"$7}' | column -t
Output esperado (HA): NAME READY STATUS NODE argocd-application-controller-0 1/1 Running node-1 argocd-application-controller-1 1/1 Running node-2 argocd-application-controller-2 1/1 Running node-3 argocd-applicationset-controller-xxx 1/1 Running node-1 argocd-applicationset-controller-yyy 1/1 Running node-2 argocd-dex-server-xxx 1/1 Running node-1 argocd-redis-ha-haproxy-xxx 1/1 Running node-1 argocd-redis-ha-haproxy-yyy 1/1 Running node-2 argocd-redis-ha-haproxy-zzz 1/1 Running node-3 argocd-redis-ha-server-0 1/1 Running node-1 argocd-redis-ha-server-1 1/1 Running node-2 argocd-redis-ha-server-2 1/1 Running node-3 argocd-repo-server-xxx 1/1 Running node-1 argocd-repo-server-yyy 1/1 Running node-2 argocd-repo-server-zzz 1/1 Running node-3 argocd-server-xxx 1/1 Running node-1 argocd-server-yyy 1/1 Running node-2 argocd-server-zzz 1/1 Running node-3
Observe que os pods estão distribuídos entre os 3 nós.
Método 2: Via Helm
Passo 1: Criar values-ha.yaml
# values-ha.yaml
# Configuração High Availability
# Não instalar CRDs se já existem
crds:
install: true
# Redis HA
redis-ha:
enabled: true
# Controller com 3 réplicas
controller:
replicas: 3
# Server com 3 réplicas
server:
replicas: 3
service:
type: ClusterIP # ou NodePort, LoadBalancer
# Repo Server com 3 réplicas
repoServer:
replicas: 3
# ApplicationSet com 2 réplicas
applicationSet:
replicas: 2
# Dex (não suporta múltiplas réplicas)
dex:
enabled: true
Passo 2: Instalar
helm install argocd argo/argo-cd \
--namespace argocd \
--create-namespace \
--values values-ha.yaml
Passo 3: Verificar
helm list -n argocd
kubectl get pods -n argocd -o wide
Troubleshooting minimo na instalação HA
# Status geral
kubectl get all -n argocd
# Verificar endpoints (deve ter múltiplos IPs)
kubectl get endpoints argocd-server -n argocd
kubectl get endpoints argocd-repo-server -n argocd
# Ver eventos recentes
kubectl get events -n argocd --sort-by='.lastTimestamp'
# Logs do controller (escolha um pod)
kubectl logs -n argocd argocd-application-controller-0 -f
# Logs do server
kubectl logs -n argocd deployment/argocd-server -f
Acessando o ArgoCD
Após a instalação, você precisa acessar a interface do ArgoCD.
Passo 1: Obter senha inicial do admin
# Obter senha
kubectl -n argocd get secret argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d; echo
Credenciais padrão:
- Username:
admin - Password: [output do comando acima]
⚠️ Importante: Troque essa senha após o primeiro login!
Opção A: Port-Forward (Mais Rápido para Testar)
# Forward do serviço para localhost
kubectl port-forward svc/argocd-server -n argocd 8080:443
Acesse: https://localhost:8080
⚠️ Certificado auto-assinado → Aceite o aviso de segurança no browser
Vantagens:
- ✅ Rápido para testar
- ✅ Não requer configuração adicional
- ✅ Funciona em qualquer ambiente
Desvantagens:
- ❌ Funciona apenas localmente
- ❌ Conexão morre se terminal fechar
Opção B: NodePort (Recomendado para Homelab)
# Mudar service para NodePort
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'
# Ver a porta atribuída
kubectl get svc argocd-server -n argocd
Output:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
argocd-server NodePort 10.96.100.50 <none> 80:30123/TCP,443:30456/TCP 5m
Exemplo:
- Se IP do node é
192.168.1.100 - Porta HTTPS é
30456 - URL:
https://192.168.1.100:30456
Vantagens:
- ✅ Acesso persistente
- ✅ Funciona de qualquer máquina na rede
- ✅ Simples para ambientes de teste
Desvantagens:
- ❌ Porta aleatória (pode customizar)
- ❌ Requer acesso à rede do node
Opção C: LoadBalancer (Se tiver MetalLB/Cloud)
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
# Ver IP externo atribuído
kubectl get svc argocd-server -n argocd
Output (exemplo com MetalLB):
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
argocd-server LoadBalancer 10.96.100.50 192.168.1.200 80:30123/TCP,443:30456/TCP
Acesse: https://192.168.1.200
Vantagens:
- ✅ IP fixo e dedicado
- ✅ Portas padrão (80/443)
- ✅ Profissional
Requer:
- LoadBalancer controller (MetalLB, cloud provider, etc.)
Opção D: Ingress (Mais Profissional)
Pré-requisito: Ingress Controller instalado
# Verificar se tem ingress controller
kubectl get ingressclass
Criar Ingress para ArgoCD
# argocd-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-server-ingress
namespace: argocd
annotations:
# Para NGINX Ingress Controller
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
# Para Traefik
# traefik.ingress.kubernetes.io/router.tls: "true"
spec:
ingressClassName: nginx # ou traefik
rules:
- host: argocd.example.com # SEU DOMÍNIO
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
number: 443
tls:
- hosts:
- argocd.example.com
secretName: argocd-tls # opcional: seu certificado TLS
kubectl apply -f argocd-ingress.yaml
Configurar DNS/Hosts
Opção 1: DNS Real
argocd.example.com → IP do LoadBalancer/NodePort
Opção 2: /etc/hosts (para testes)
echo "<IP_DO_NODE> argocd.example.com" | sudo tee -a /etc/hosts
Acesse: https://argocd.example.com
Vantagens:
- ✅ Domínio customizado
- ✅ Certificado TLS próprio
- ✅ Padrão para produção
- ✅ Path-based routing (múltiplos serviços)
Desabilitar TLS no Server (Opcional)
Se usar Ingress com TLS termination:
kubectl patch configmap argocd-cmd-params-cm -n argocd \
--type merge \
-p '{"data":{"server.insecure":"true"}}'
# Restart do server
kubectl rollout restart deployment argocd-server -n argocd
Instalar ArgoCD CLI
# Download da versão mais recente
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
# Instalar
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
# Limpar
rm argocd-linux-amd64
# Verificar
argocd version --client
Login via CLI
# Login (ajuste o endereço)
argocd login <ARGOCD_SERVER_ADDRESS> --username admin --insecure
# Exemplos:
argocd login localhost:8080 --username admin --insecure
argocd login 192.168.1.100:30456 --username admin --insecure
argocd login argocd.example.com --username admin
# Trocar senha
argocd account update-password