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가 잘 실행되었습니다.
'연재 시리즈' 카테고리의 다른 글
pkos 스터디 5주차 1편 - AWS EC2 인스턴스 메타데이터 (0) | 2023.04.03 |
---|---|
pkos 스터디 4주차 - 메트릭 오픈소스 프로메테우스 (3) | 2023.03.29 |
pkos 스터디 3주차 3편 - git서비스 gitlab (0) | 2023.03.25 |
pkos 스터디 3주차 2편 - 도커 레지스트리 harbor (0) | 2023.03.25 |
pkos 스터디 3주차 1편 - gitops란? (0) | 2023.03.25 |