본문 바로가기

EKS/Jenkins & ArgoCD

EKS CICD Automation - 2. Install ArgoCD

먼저, ArgoCD가 바라보게 할 Repository를 만들어줍니다.

 

 

이제 ArgoCD를 설치해보겠습니다.

 

먼저 ArgoCD 버전을 체크하도록 하겠습니다.

저는 현재 작성 기준 1.4.2가 가장 최신이며, HA로 구성을 하도록 하겠습니다.

 

ArgoCD CLI를 설치하는 명령어입니다.

curl -LO https://github.com/argoproj/argo-cd/releases/download/v1.4.2/argocd-linux-amd64
chmod u+x argocd-linux-amd64
sudo mv argocd-linux-amd64 /usr/local/bin/argocd

 

만약 CLI 명령어를 찾지 못한다면, 아래와 같이 Path 등록을 해주시면 됩니다.

export PATH=/usr/local/bin:$PATH
echo 'export PATH=/usr/local/bin:$PATH' >> ~/.bashrc

 

이제 ArgoCD Apply를 해주도록 합니다.

kubectl create namespace prd-cicd
kubectl apply -n prd-cicd -f https://raw.githubusercontent.com/argoproj/argo-cd/v1.4.2/manifests/ha/install.yaml

 

ALB로 저는 매핑을 하기 위해서 아래와 같이 type및 ingress를 설정해주도록 하겠습니다.

kubectl patch svc argocd-server -n prd-cicd -p '{"spec": {"type": "NodePort"}}'

 

여기서 주의할 점은 ArgoCD는 backend-protocol을 HTTPS로 해주지 않으면, too many redirect에러가 발생한다는 것입니다.

만약 EKS에서 ALB구축하기 기본 포스터를 보지 않으셨다면 꼭 보고오시기 바랍니다.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: argocd-ingress
  namespace: prd-cicd
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:ap-northeast-2:{account-number}:certificate/{id}
    alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-2016-08
    alb.ingress.kubernetes.io/backend-protocol: HTTPS
    alb.ingress.kubernetes.io/healthcheck-path: /login
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80,"HTTPS": 443}]'
    alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
  labels:
    app: argocd-ingress
spec:
  rules:
    - http:
        paths:
          - backend:
              serviceName: ssl-redirect
              servicePort: use-annotation
    - host: argocd.domain.shop
      http:
        paths:
          - backend:
              serviceName: argocd-server
              servicePort: 443

 

 

자, 이제 ArgoCD를 외부에서 접속하실 수 있습니다.

접속하기위해서 argocd admin password를 가져오도록 하겠습니다.

가장 위의 것을 선택하셔서 사용하시면 됩니다.

kubectl get pods -n prd-cicd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2

 

로그인을 CLI를 통해 할 것인데, LB를 설정하기 전 후가 방법이 조금 다릅니다.

 

설정 전

argocd login $(kubectl get pods -n prd-cicd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2)
argocd account update-password

 

설정 후

argocd login --grpc-web argocd.domain.shop
Username:  admin
Password: 'argocd-server pod name' (ex argocd-server-5d5994fff7-cjk2t)

 

자 로그인이 되셨다면, 아래 명령어로 비밀번호를 바꿔주세요

argocd account update-password

 

아래와 같이 비밀번호 변경이 되셨다면 성공한 것입니다.

 

 

마지막으로 ArgoCD가 kubernetes에 배포를 할 수 있도록 admin 권한을 부여하겠습니다.

kubectl create clusterrolebinding default-admin --clusterrole=admin --serviceaccount=prd-cicd:default

 

추가적으로 저는 namespace를 argocd로 안 했기 때문에 아래와 같은 수정작업이 더 필요합니다.

kubectl edit ClusterRoleBinding argocd-application-controller
kubectl edit ClusterRoleBinding argocd-server
가장 하단 namespace argocd -> prd-cicd로 변경

 

 

ArgoCD는 빈 레파지토리를 등록할 수 없기 때문에 deployment.yaml을 푸시해주도록 하겠습니다.

먼저 빈 레파지토리를 git clone 해주시고 해당 디렉토리에서 yaml 폴더 안에 cb-test-api의 deploymeny.yaml을 넣어주겠습니다.

 

 

이후 git add, commit, push를 순서대로 해서 파일을 업로드해주세요.

이제 ArgoCD CLI를 통해 이제 레파지토리를 등록해주시면 됩니다.

argocd repo add <repo_url> --username <username> --password <password>

 

그리고 콘솔에서 확인해보면, 정상적으로 잘 등록된 것을 보실 수 있습니다.

 

물론, argocd에 접속하셔서 아래와 같은 화면에서 등록해주셔도 됩니다.

 

 

마지막으로 ArgoCD Application을 만들어주시면 끝납니다.

저는 콘솔에서 만들었으나 아래와 같은 CLI를 수행하셔도 됩니다.

argocd app create cb-test-api \
--repo https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/cb-test-api-yaml \
--path yaml \
--dest-server https://kubernetes.default.svc \
--dest-namespace prd-api

 

정상적으로 만들어지고 Repository와의 Sync여부를 확인해서 문제가 없는 것을 볼 수 있습니다.

 

이제, 다음 포스터에서 Jenkins Pipeline을 구성해서 자동화를 완성시켜보도록 하겠습니다.