
본 게시물은 CloudNet@팀 Gasida(서종호) 님이 진행하시는
AWS EKS Workshop Study 내용을 기반으로 작성되었습니다.

API Server : Web UI 대시보드, k8s api 처럼 API 서버 역할
Repository Server : Git 연결 및 배포할 yaml 생성
Application Controller : k8s 리소스 모니터링, Git과 비교
Redis : k8s api와 git 요청을 줄이기 위한 캐싱
Notification : 이벤트 알림, 트리거
Dex : 외부 인증 관리
ApplicationSet Controller : 멀티 클러스터를 위한 App 패키징 관리
# helm 설치
cat <<EOT > argocd-values.yaml
global:
domain: argocd.$MyDomain
configs:
params:
server.insecure: true
controller:
metrics:
enabled: true
serviceMonitor:
enabled: true
server:
ingress:
enabled: true
controller: aws
ingressClassName: alb
hostname: "argocd.$MyDomain"
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/backend-protocol: HTTP
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":80}, {"HTTPS":443}]'
alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
alb.ingress.kubernetes.io/ssl-redirect: '443'
aws:
serviceType: ClusterIP
backendProtocolVersion: GRPC
metrics:
enabled: true
serviceMonitor:
enabled: true
repoServer:
metrics:
enabled: true
serviceMonitor:
enabled: true
applicationSet:
metrics:
enabled: true
serviceMonitor:
enabled: true
notifications:
metrics:
enabled: true
serviceMonitor:
enabled: true
EOT
kubectl create ns argocd
helm repo add argo https://argoproj.github.io/argo-helm
helm install argocd argo/argo-cd --version 6.7.11 -f argocd-values.yaml --namespace argocd
# 확인
kubectl get ingress,pod,svc -n argocd
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/argocd-server alb argocd.tkops.click 80 23s
NAME READY STATUS RESTARTS AGE
pod/argocd-application-controller-0 0/1 Running 0 23s
pod/argocd-applicationset-controller-85d64c6b7f-m6zfb 1/1 Running 0 23s
pod/argocd-dex-server-7746bdfd75-dfgrd 1/1 Running 0 23s
pod/argocd-notifications-controller-64d9b554f4-9kbpk 1/1 Running 0 23s
pod/argocd-redis-554fbc6587-5bhsm 1/1 Running 0 23s
pod/argocd-repo-server-5cd49b877-6d2zx 0/1 Running 0 23s
pod/argocd-server-6c757c4964-9gr4b 0/1 Running 0 23s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/argocd-application-controller-metrics ClusterIP 10.100.212.39 <none> 8082/TCP 24s
service/argocd-applicationset-controller ClusterIP 10.100.192.94 <none> 7000/TCP 24s
service/argocd-applicationset-controller-metrics ClusterIP 10.100.253.157 <none> 8080/TCP 24s
service/argocd-dex-server ClusterIP 10.100.149.102 <none> 5556/TCP,5557/TCP 24s
service/argocd-notifications-controller-metrics ClusterIP 10.100.106.72 <none> 9001/TCP 24s
service/argocd-redis ClusterIP 10.100.36.34 <none> 6379/TCP 24s
service/argocd-repo-server ClusterIP 10.100.238.214 <none> 8081/TCP 24s
service/argocd-repo-server-metrics ClusterIP 10.100.29.152 <none> 8084/TCP 24s
service/argocd-server ClusterIP 10.100.226.123 <none> 80/TCP,443/TCP 24s
service/argocd-server-grpc ClusterIP 10.100.73.20 <none> 80/TCP,443/TCP 24s
service/argocd-server-metrics ClusterIP 10.100.22.50 <none> 8083/TCP 24s
kubectl get crd | grep argo
applications.argoproj.io 2024-04-20T14:08:22Z
applicationsets.argoproj.io 2024-04-20T14:08:22Z
appprojects.argoproj.io 2024-04-20T14:08:21Z
# 최초 접속 암호 확인
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d ;echo

App 생성

[체크] AUTO-CREATE-NAMESPACE

SOURCE

DESTINATION

화면 상단 [CREATE] 클릭
PRUNE : GIt에서 자원 삭제 후 배포시 K8S에서는 삭제되지 않으나, 해당 옵션을 선택하면 삭제시킴
FORCE : --force 옵션으로 리소스 삭제
APPLY ONLY : ArgoCD의 Pre/Post Hook은 사용 안함 (리소스만 배포)
DRY RUN : 테스트 배포 (배포에 에러가 있는지 한번 확인해 볼때 사용)


리소스 클릭 -> LIVE MANIFEST(쿠버네티스 기준) & DESIRED MANIFEST(Git 기준) 확인

manifest 수정
in argocd

# label 추가 확인
kubectl get deploy -n first --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
myweb 4/4 4 4 14m add=label-test,argocd.argoproj.io/instance=first-myweb,gitadd=webeditin Kubernetes
# label 추가
kubectl edit deploy -n first myweb
...
labels:
add: label-test
add2: k8s-test
...
kubectl get deploy -n first --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
myweb 4/4 4 4 18m add2=k8s-test,add=label-test,argocd.argoproj.io/instance=first-myweb,gitadd=webedit
확인
argocd는 Git을 기준으로 Sync하기 때문에 DIFF 및 DESIRED MANIFEST에 변경점이 없다.


in Github

확인
OutOfSync 상태로 DIFF가 확인되며, Sync를 진행한다.

kubectl get deploy -n first --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
myweb 4/4 4 4 31m add2=k8s-test,add3=git-test,add=label-test,argocd.argoproj.io/instance=first-myweb,gitadd=webedit