본문 바로가기
문서 목차
ORKESTRIX설치

ArgoCD (CD)

Git 저장소 기반의 선언적 쿠버네티스 애플리케이션 자동 배포(CD) 를 위한 ArgoCD 를 구성합니다. Helm 차트에 SOPS 기반 시크릿 복호화(helm secrets) 기능이 추가로 포함됩니다.

QUANTUM C&S

Git 저장소 기반의 선언적 쿠버네티스 애플리케이션 자동 배포(CD)를 위한 ArgoCD를 구성합니다. Helm 차트에 SOPS 기반 시크릿 복호화(helm-secrets) 기능이 추가로 포함됩니다.

설정값

inventory/qks/group_vars/all/all-k8s.yaml:

qks_argocd_enabled: true
qks_argocd_version: 10.9.2
qks_argocd_app_version: 3.5.3
qks_argocd_release: qks-cd
qks_argocd_namespace: qks-cicd
qks_argocd_fqdn: "cd.{{ kube_default_domain }}"
qks_argocd_admin_pass: "{{ kube_default_passwd }}"

실행

./install.sh ubuntu plays/qks-argocd.yaml

설치 흐름

./install.sh ubuntu plays/qks-argocd.yaml
  ├─ 1. 접속 도메인을 각 노드 /etc/hosts에 등록
  ├─ 2. Helm 저장소 등록 ('argocd')
  ├─ 3. helm-secrets용 age 키 Secret 생성
  ├─ 4. Helm으로 ArgoCD 배포 (server+controller+repo-server+applicationset+redis)
  ├─ 5. Ingress에 Traefik 어노테이션 패치
  └─ 6. admin 비밀번호를 bcrypt 해시로 패치

설치 확인

kubectl get pods -n <qks_argocd_namespace>

qks-cd-application-controller · qks-cd-applicationset-controller · qks-cd-repo-server · qks-cd-server · qks-cd-redis 파드가 모두 Running이어야 합니다.

실제 동작 확인

웹 접속:

curl -k -s -o /dev/null -w "%{http_code}\n" https://<qks_argocd_fqdn>/

200이 나오면 정상입니다.

로그인:

curl -k -s -X POST https://<qks_argocd_fqdn>/api/v1/session \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"<qks_argocd_admin_pass>"}'

응답으로 token이 나오면 정상입니다.

Git 저장소 기반 자동 배포 확인:

curl -k -s -X POST https://<qks_argocd_fqdn>/api/v1/applications \
  -H "Authorization: Bearer <token>" -H "Content-Type: application/json" \
  -d '{
    "metadata": {"name": "test-app"},
    "spec": {
      "project": "default",
      "source": {"repoURL": "<git 저장소 URL>", "path": "<매니페스트 경로>", "targetRevision": "HEAD"},
      "destination": {"server": "https://kubernetes.default.svc", "namespace": "test-app"},
      "syncPolicy": {"automated": {"prune": true, "selfHeal": true}, "syncOptions": ["CreateNamespace=true"]}
    }
  }'
curl -k -s -H "Authorization: Bearer <token>" https://<qks_argocd_fqdn>/api/v1/applications/test-app

status.sync.status가 Synced, status.health.status가 Healthy이고 대상 네임스페이스에 실제 리소스(Deployment/Service 등)가 생성되어 있으면 정상입니다.

다음 단계