먼저, 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을 구성해서 자동화를 완성시켜보도록 하겠습니다.
'EKS > Jenkins & ArgoCD' 카테고리의 다른 글
EKS CICD Automation - 4. ArgoCD Blue/Green Deployment (0) | 2020.09.07 |
---|---|
EKS CICD Automation - 3. Jenkins Pipeline (Rolling) (0) | 2020.02.06 |
EKS CICD Automation - 1. Intro (0) | 2020.02.06 |