지난 Github Actions를 이용해서 CI/CD 중 CI 라인을 구축하고 이제, CD라인을 구축 할 차례입니다.
제가 사용할 CD파이프 라인은 Argo CD입니다.
Argo CD
Argo CD는 쿠버네티스 클러스터 배포 도구입니다.
최근 쿠버네티스의 장점이 너무 많아, 대부분의 기업들이 쿠버네티스를 사용하고 있습니다.
Argo CD는 이러한 쿠버네티스 환경에서 클러스터를 배포하도록 도와주는 도구입니다.
이는 GitOps 스타일의 배포를 지원합니다. ( 제가 CD 라인으로 고른 이유 입니다. )
간단하게 말하면, 깃허브 같은 깃 환경에서 업데이트를 하면, 이를 Argo CD가 감지하여 업데이트 하도록 합니다.
이러한 환경 구축 과정은 천천히 알아보도록 하겠습니다.
ArgoCD 설치하기
먼저 ArgoCD를 사용하기 위해서 설치하는 과정입니다.
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
쿠버네티스 환경에서 argocd라는 네임스페이스를 만들고, yaml파일을 통해 설치합니다.
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
이후, loadbalancer 타입으로 argocd를 노출시켜줍니다. 이를 통해서 접속할 수 있습니다.
kubectl port-forward svc/argocd-server -n argocd 8080:443
포트포워딩을 통해 원하는 포트로 접속할 수 있습니다.
kubectl get service -n argocd
위의 명령어로, argocd를 어떤 ip에 노출했는지 확인한 뒤, 설정한 포트포워딩 포트를 이용해서 접속합니다.
(사이트에 접속하니 귀여운 문어가 저를 맞이해주네요.)
초기 아이디는 admin이지만, password는 password로 설정되어있지 않습니다.
따라서, 이를 찾아내야하는데 이는 아래 명령어를 통해 알아 낼 수 있습니다.
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
해당 아이디 및 패스워드로 접속한 뒤, 본인이 사용하기 원하는 패스워드로 변경해주세요.
여기 까지 하면, argoCD를 사용하기 위한 기본 준비는 완료되었습니다.
Git 연동하기
이제, Git repositories를 연동하는 방법을 알아봅니다.
먼저 CD라인을 구축하고 싶은 레파지토리를 정하고, 해당 URL을 복사합니다.
다시 argoCD에 접속해서 톱니바퀴모양의 설정을 들어가면 Repositories가 보이네요.
레파지토리와 연결하는 3가지 방법이 있는 것 같은데, 저는 그 중 가장 간단하게 연결할 수 있는 HTTPS를 이용한 연결 방법을 사용합니다.
CONNECT REPO USING HTTPS를 클릭합니다.
이후 복사한 URL을 입력합니다. 이러면 간단하게 연결이 됨을 알 수 있습니다.
만약 Public한 레파지토리가 아니라면, 추가적으로 깃헙 아이디 및 비밀번호를 입력해야합니다.
애플리케이션 배포하기
깃과 연동까지 완료되었으면, 이제 애플리케이션을 배포할 차례입니다.
좌측 사이트바에서 맨위 스택같은 모양을 클릭하고 NEW APP을 클릭합니다. 그러면 위와 같은 모습이 보일 겁니다.
Application Name에는 본인이 인지할 수 있는 이름을 설정해주시면 되고, project같은 경우, 묶을 프로젝트가 없으면 default로 설정해주시면 간단합니다.
SYNC 정책은, 둘다 체크해줬습니다. ( 이는 어떻게 싱크를 맞추는가에 대한 정책입니다. )
이후 옵션은 다음과 같습니다.
- Repository URL : 사용할 레포지토리 URL , 이전에 연동했던 레포지토리가 등록될 것이다.
- Revision : git의 어떤 Revision (HEAD , Master branch 등)을 바라볼지 결정
- Path : Git에서 어떤 저장소의 어떤 디렉토리를 바라볼지 결정
- Cluster URL : Kubernetes의 어느 클러스터에 배포할지 결정
- Namespace : Kubernetes 클러스터의 어느 Namespace에 배포할지 결정
제가 ArgoCD를 구축할 때 참고한 potato-young님의 블로그 에서 가져왔습니다.
이렇게 설정이 완료되었으면 애플리케이션 구축 완료입니다.
Git yaml 파일 추가하기
이제 마지막으로, 어떤 서비스 및 디플로이먼트를 구성할지 정의해주는 파일입니다.
이는 kubernetes환경에서 사용하는 서비스 및 디플로이먼트를 입력해 주면됩니다.
다시 깃 레파지토리로 가서, argo폴더를 만들고 그 안에 deployment.yaml 파일과 service.yaml파일을 정의합니다.
제가 사용한 yaml파일은 아래와 같습니다. 참고하세요!
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: semogong
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
name: semogong-pod
labels:
app: web
spec:
containers:
- name: semogong-container
image: wjdqlsdlsp/semogong:1.0.11
ports:
- containerPort: 8080
envFrom:
- configMapRef:
name: config-dev
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: semogong
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: web
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 43200
type: LoadBalancer
저와 저희팀원들이 사용하고 있는 deployment 및 service내용입니다.
당연히 그대로 사용하면 환경변수로 오류가 날테니 주의하세요.
이렇게 구성이 완료되면, argoCD가 깃 환경이 변함에 따라서 이를 업데이트합니다.
default로 설정했을 때, 싱크방식은 3분마다 확인하고 업데이트 한다고 하네요.
이렇게 편한 CD 파이프라인이 있어서 다행입니다.