[EKS] ArgoCD 설치
0. 작성 취지
EKS 환경에 ArgoCD를 helm으로 설치하는 과정을 작성하려고 한다.
해당 글의 핵심은 nodeSelector
, nodeAffinity
, targetgroupbindings
이 될 것 같다.
순서는 아래와 같이 작성된다.
- helm 단계
- 외부 노출 단계
1. helm 단계
helm repo add argo https://argoproj.github.io/argo-helm
helm show values argo/argo-cd > argocd.yaml
위 명령어로 ArgoCD helm 단계 준비를 한다.
global:
domain: argocd.may30.xyz
nodeSelector:
node-type: mgmt
affinity:
podAntiAffinity: soft
nodeAffinity:
type: hard
matchExpressions:
- key: node-type
operator: In
values:
- mgmt
configs:
cm:
timeout.reconciliation: 60s
params:
server.insecure: true
repoServer:
autoscaling:
enabled: true
1-1. global 부분
1-1-1. domain
ArgoCD에 접속할 도메인을 기입한다.
1-1-2. nodeSelector, affinity
현재 하고 있는 테스트는 node에 label을 적용해서 해당 node에만 생성되도록 설정해두는 것이다.
때문에 key-value가 node-type
- mgmt
로 되어 있는 node에 Jenkins가 생성되도록 설정해두었다.
1-2. configs 부분
1-2-1. cm
ArgoCD는 Source에 해당하는 Git Repsoitory를 주기적으로 Sync해서 변경되는 포인트가 발생하면 자동으로 Update가 되는 구조인데 기본적으로 180초(3분)이다.
이를 짧게 가져가기 위해서 60초(1분)으로 설정했다.
1-2-2. params
ArgoCD는 자체적으로 인증서를 가지고 있다.
때문에 외부에서 들어오는 트래픽에 대해서 자동으로 Redirect가 처리되어 자신만의 인증서로 인증하려고 하는데 이를 방지하고자 true로 해주었다.
1-3. repoServer 부분
repoServer에 한하여 autoscaling이 되도록 구성하였고 HPA로 동작하기 때문에 metrics-server
는 필수로 설치되어 있어야 한다.
2. 외부 노출 단계
2-1. Health Check 경로 변경
/healthz
로 변경해주었다.
생성된 ArgoCD의 Probe 설정을 보면 /healthz
로 되어 있는 것을 확인할 수 있다.
2-2. targetgroupbindings
apiVersion: elbv2.k8s.aws/v1beta1
kind: TargetGroupBinding
metadata:
name: argocd-tgb
namespace: argo
spec:
serviceRef:
name: argocd-server
port: 80
targetGroupARN: # TARGETGROUP ARN
vpcID: # VPC ID
targetgroupbinding을 통해서 Target Group과 K8s의 Service를 연결시켜주고 ALB에 등록하면 된다.
targetgroupbinding은 링크에서 더 자세하게 볼 수 있다.
targetgroupbindings까지 생성을 완료하면 외부에서 정상적으로 접속할 수 있는 모습을 확인할 수 있다.
3. 마치며
우선, ArgoCD 설치에 대해 알아보았다.
ArgoCD는 운영 환경에서 사용할 경우라면 직접 화면에서 수정해주어야 할 부분들이 상당히 많다.
하나씩 테스트 해보면서 알아가보면 좋을 듯 하다.
댓글남기기