연재 시리즈

pkos 스터디 3주차 4편 - argo cd와 gitlab파이프라인 연동

악분 2023. 3. 26. 09:16
반응형

3주차 4편에서는 gitops시스템에서 git서비스인 argo cd를 다룹니다. 이 글에서 다루는 파이프라인 예제는 아래 링크에서 볼 수 있습니다.

파이프라인 예제: https://gitlab.com/choisungwook/pkos_study/-/tree/main

 

📘 argo cd란?

argocd는 쿠버네티스 전용 gitops도구입니다. gitops시스템에서 git에 있는 쿠버네티스 리소스를 쿠버네티스에 반영하는 역할을 합니다.

 

📘 argo cd와 gitlab파이프라인 연동

argocd 사용방법은 제 블로그에 정리했으므로 이 글에서는 argocd 사용방법을 생략합니다. 현업에서 사용하는 gitlab 파이프라인과 argocd를 연동하려고 합니다!

argocd 정리문서 링크: https://malwareanalysis.tistory.com/category/%EC%97%B0%EC%9E%AC%EC%99%84%EB%A3%8C/ArgoCD

 

📘 gitlab 파이프라인이란?

gitlab에서는 git 이벤트가 발생하면 특정 작업을 실행하게 설정할 수 있습니다. 여기서 특정 작업을 파이프라인이라고 부르며 파이프라인이 실행되는 클라이언트를 gitlab runner라고 합니다. github action과 비슷한 역할을 합니다.

 

파이프라인은 .gitlab-ci.yaml파일로 정의합니다. 

 

파이프라인을 실행하려면 runner라는 컴퍼넌트를 설치해야합니다. 저는 설치하는 대신 온라인 gitlab 서비스를 이용했습니다.

 

📘 파이프라인 구성

사용자가 main브랜치에 git push를 하면, deploy폴더에 있는 yaml을 쿠버네티스에 배포합니다. 배포는 gitlab 파이프라인이 수행합니다. 파이프라인은 argocd CLI를 사용합니다.

 

📘 인프라 구성

- argocd: argocd는 로컬pc에 설치했습니다. 외부에 접속하기 위해 공유기 포트포워딩을 사용했습니다.
- gitlab: 온라인 gitlab서비스를 사용했습니다. 파이프라인 yaml와 pod를 정의합니다.

 

📘 파이프라인 정의

파이프라인은 main브랜치에 git이벤트가 발생하면 deploy폴더에 있는 쿠버네티스에 yaml을 배포합니다. 배포는 argocd를 사용하므로 argocd CLI를 사용했습니다. 저는 chatgpt를 사용해서 파이프라인을 만들었습니다.

stages:
  - validate
  - deploy

variables:
  KUBEVAL_VERSION: v0.16.1
  ARGOCD_CLI_VERSION: v2.5.16
  ARGOCD_SERVER: $ARGOCD_SERVER
  ARGOCD_USERNAME: admin
  ARGOCD_PASSWORD: $ARGOCD_PASSWORD
  ARGOCD_KUBE_NAMESPACE: default
  ARGOCD_KUBE_SERVER: https://kubernetes.default.svc

before_script:
  - curl -LO "https://github.com/instrumenta/kubeval/releases/download/${KUBEVAL_VERSION}/kubeval-linux-amd64.tar.gz"
  - tar xf kubeval-linux-amd64.tar.gz
  - curl -LO "https://github.com/argoproj/argo-cd/releases/download/${ARGOCD_CLI_VERSION}/argocd-linux-amd64" && mv ./argocd-linux-amd64 ./argocd && chmod +x ./argocd  

# 쿠버네티스 리소스 yaml포맷 검증
validate:
  stage: validate
  script:
    - ./kubeval ./deploy/*

# argocd CLI를 사용하여 배포
deploy:
  stage: deploy
  script:
    - ./argocd login $ARGOCD_SERVER --insecure --username $ARGOCD_USERNAME --password $ARGOCD_PASSWORD
    - ./argocd app create kops-helloworld --repo $CI_PROJECT_URL.git --path deploy --dest-server $ARGOCD_KUBE_SERVER --dest-namespace $ARGOCD_KUBE_NAMESPACE --upsert
    - ./argocd app sync kops-helloworld --server $ARGOCD_SERVER

 

파이프라인에서 민감정보는 gitlab environment를 정의했습니다.

 

📘  파이프라인 실행

파이프라인은 수동으로 실행하거나 main브랜치에 git push이벤트를 발생시키면 됩니다. 수동 실행은 파이프라인 메뉴에서 Run pipline버튼을 클릭하면 됩니다.

 

파이프라인이 잘 실행되면 passed상태로 표시됩니다.

 

argocd 대시보드를 확인하면 gitlab파이프라인이 배포한 kops-helloworld app이 보입니다. 초록색아이콘이므로 의도한 쿠버네티스 리소스가 잘 배포가 되었습니다.

 

kubectl로 직접 확인해보세요. pod가 잘 실행되었습니다.

반응형