cluster 구축 후, kubeconfig 파일을 cli server(또는 local)에 가져온 상태(kubectl을 통해 cluster에 명령 날릴 수 있는 상태)여야 합니다.
1. 다음 명령을 순서대로 실행합니다.
# argocd namespace 생성
kubectl create namespace argocd
# apply argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
# delete argocd
# kubectl delete -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
VERSION=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
sudo curl --silent --location -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/$VERSION/argocd-linux-amd64
sudo chmod +x /usr/local/bin/argocd
# argocd-server service의 타입을 NLB로 변경
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
# NLB domain name 확인
export ARGOCD_SERVER=`kubectl get svc argocd-server -n argocd -o json | jq --raw-output .status.loadBalancer.ingress[0].hostname`
echo $ARGOCD_SERVER
# argocd 초기 비밀번호 확인
ARGO_PWD=`kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d`
echo $ARGO_PWD
# argocd 비밀번호 변경 (생략 가능)
kubectl exec -it -n argocd deployment/argocd-server -- /bin/bash
argocd login localhost:8080
argocd account update-password
2. echo $ARGOCD_SERVER 를 실행했을 때 나오는 주소로 접근하면 아래와 같은 화면이 나옵니다.
고급-> {NLB-domain-name}(안전하지 않음)으로 이동을 클릭하면 argocd 웹 콘솔로 이동합니다.
3. Username에 admin을 입력하고, echo $ARGO_PWD를 통해 확인한 비밀번호를 Password에 입력하여 argocd 웹 콘솔에 로그인 합니다.
+ 만약 비밀번호를 변경했다면 변경한 비밀번호를 입력해야 합니다.
4. Github private repository 연결하기 위해 다음 과정이 필요합니다.
4-1. argocd web console -> (왼쪽 탭의 위에서 두번째) Settings -> connect repo
4-2. connection method를 HTTPS로 설정하고 Type은 git, Project는 default로 설정합니다.
4-3. public repository라면 Repository URL만 입력한 후 오른쪽 상단의 CONNECT 버튼을 누르면 되고, private repository라면 Github에서 argocd용 토큰을 발급받아야 합니다. 예시는 다음과 같습니다.
토큰을 발급받았다면 Username에 Github ID를, Password에는 token을 입력하면 Repository가 성공적으로 등록됩니다.
5. Applications에서 New app을 눌러 Application을 생성합니다.
Application의 이름은 자유이고, Project name은 project를 별도로 생성한 것이 없다면 default(repo와 동일한 프로젝트여야 함)를 사용합니다.
Sync policy는 테스트를 위해 우선은 Manual로 설정합니다.
이전 단계에서 repo 등록이 정상적으로 되었다면 repository URL이 목록으로 보여지고, Revision과 argocd가 sync를 맞춰줄 repo의 경로를 설정합니다.
마찬가지로 별다른 설정을 하지 않았다면 위처럼 입력한뒤 App 생성을 마무리 합니다.
6. Sync를 Manual로 설정했기 때문에 수동으로 Sync 버튼을 눌러 argocd가 등록된 repo와 cluster의 상태를 동기화하도록 합니다.
참고) argo rollouts, Karpenter 사용 시, Sync 맞추기 위해서는 별도의 설정 필요
(https://jsyeo.tistory.com/74, https://jsyeo.tistory.com/75)
Github repo의 manifest file과 cluster의 상태가 동기화되면 다음과 같은 화면을 볼 수 있습니다.
7. (선택) Auto Sync 설정하기
(Sync가 Auto이면 argocd는 기본적으로는 3분 간격으로 repo를 확인 후 변경 사항을 반영합니다.)
Application의 Details에서 Sync Policy 부분의 Enable Auto-Sync를 눌러 auto sync 기능을 활성화 합니다.
8. Github Webhooks 추가
Auto Sync의 경우 운이 나쁘면 최대 3분 후에 동기화가 시작되므로, commit이 push된 시점에 바로 sync를 맞춰주기를 원한다면 Github Webhooks를 이용해야 합니다.
Gihub의 webhook 기능을 이용하기 위해서는 argocd에 연결된 repository의 settings에서 webhooks를 추가해주어야 합니다.
Add webhook을 눌러 Settins에 들어온 뒤, Payload URL은 위 화면처럼 "https://" + $ARGOCD_SERVER + "/api/webhook"로 설정해주고 Content type은 application/json으로 설정합니다.
위 화면처럼 ping이 정상적으로 전송되었다면 webhook 설정이 성공적으로 완료되었습니다.
이후 push 이벤트가 발생하면 argocd는 github webhook을 수신하고, 클러스터와 매니페스트 파일의 차이를 확인하여 싱크를 맞춰주면 CD 과정이 마무리 됩니다.
'Cloud engineering' 카테고리의 다른 글
Karpenter 활용하기 (6) | 2024.09.01 |
---|---|
Argo Rollouts 설치 및 활용 (0) | 2024.09.01 |
Terraform 이용해 EKS Cluster 구축하기 (0) | 2024.09.01 |
올리브영 온라인 쇼핑몰 public cloud(AWS) 인프라 구축 프로젝트 (3) | 2024.08.31 |
부하 테스트 및 조회 성능 개선(Ehcache, DB index) (0) | 2024.06.11 |