올해 상반기가 지나기 전까지 CI/CD 구축을 해봐야겠다는 생각이 있었다. 마침 GCP 크레딧 기한이 얼마 남지 않은 상황이라서 Github Action/ArgoCD를 통해 빠르게 시작해 보았다.
클라우드 리소스는 테라폼을 사용해 구축했고, github action workflow는 테라폼 코드를 repository에 v&*(버전명을 태그할시)에 해당하는 태그를 달고 push될 때 작동되도록 코드를 짰다. 여기서의 workflow자체는 terraform init ~ terraform apply를 위한 코드로 어렵지 않으니, Environment secrets 만 잘 설정해주면 된다!
CI 및 리소스 환경 구축은 아래 env 테라폼 코드(git)를 참고 하면 되고, 본 포스팅 내용은 terrafrom apply 이후 발생한 상황부터 기록할 것이다.
이번 포스팅은 단순 과정 기록일 뿐이지만, 파이프라인 구축을 하며 가장 많이 배운 것은 ArgoCD 자체였다. 거기에 대한 내용은 다음 →ArgoCD(w/helm)←포스팅에 정리해 놓았다.
env 테라폼 코드:
GitHub - dusdjhyeon/infra-staging-env
API 코드 repository는 주 목적이 아니므로 생략하겠다.
사실 apply후 에러를 꽤 많이 겪었다… 다 권한, 설치 문제였고, 이 순서대로 해주어 거의 다 해결되었다.
리소스 생성에 필요한 권한(확인 필요!)들이 부여된 service-account 인증
$ gcloud auth activate-service-account {서비스 account이름}@{project 이름}.iam.gserviceaccount.com \
--key-file=$GOOGLE_APPLICATION_CREDENTIALS --project={project이름}
#이때 $GOOGLE_APPLICATION_CREDENTIALS는 다운 받은 service account json파일의 경로를 export해준 환경변수다.
(본 프로젝트의 경우) Cloud SQL을 프로비저닝 해야 하니 Cloud SQL Admin API를 활성화 해줘야 한다. (터미널에 뜨는 링크로 들어가면 바로 접속 설정 가능하다!)
k8s 클러스터에 대한 인증 및 안전성 도모를 위한 gke-gcloud-auth-plugin 설치 (Google Cloud SDK의 플러그인)
$ gcloud components install gke-gcloud-auth-plugin
이제 terraform apply
argocd를 위한 namespace 생성 및 helm repo 추가
$ kbuectl create ns argo
$ helm repo add argo https://argoproj.github.io/argo-helm
$ helm repo update
pod들과 service를 확인할 수 있다..
$ kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
접속
#password 확인 코드
$ kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
#port-forwarding
$ kubectl port-forward svc/argocd-server -n argocd 8080:443
위 코드로 password확인하고 포트포워딩을 사용하면, argocd-server에 할당된 external ip로 접속 가능하다!(초기 username은 admin)
TLS 설정을 제대로 해주지 않았어서, HTTPS 문제나 인증서 문제가 뜰 수 있다. 로컬에서 시범 삼아 해보는 것이므로 일단은 thisisunsafe로 진행했다!
우선, settings/repositories에서 API repo 접근(connect)설정을 해준다.
그리고, App을 생성해준다. (이때, 애플리케이션의 메타데이터와 핼름 패키지의 위치를 정의한다..)
나는 ArgoCD 첫 사용이었기 때문에 쉽게 콘솔에서 Application을 생성했다. 하지만 ArgoCD에서 쓰이는 대부분의 리소스는 k8s CRD로 관리되고, 그 외의 것들도 configmap 설정을 기입해 설정 가능하므로, yaml 파일로 Application을 직접 작성해 적용해 줄 수도 있다!
이 후부터 ArgoCD는 헬름 패키지에서 설명한 상태와 애플리케이션이 일치하게 만든다.
참고