Skip to main content

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