3 분 소요

5 지속적 통합과 배포 자동화, 젠킨스

  • 4장에서 진행한 과정을 파이프라인이라고 한다.
  • 자동화는 크게 지속적 통합(CI), 지속적 배포(CD) 2가지로 정의 된다.

5.1 컨테이너 인프라 환경에서 CI/CD

  • 컨테이너 인프라 환경에서는 주로 CD를 강조하지만 CICD는 함께 사용되기 때문에 개념을 정확히 이해하는 것이 중요하다.

  • 인프라 관점에서 정리한다면, 개발자가 소스를 커밋하고 푸시하면 CI 단계로 들어 가게 되고, 자동 빌드 되고 테스트를 거쳐 배포할 수 있는 애플리케이션인지 검증을 거치면 CD 단계로 넘어간다, CD단계에서는 애플리케이션을 컨테이너 이미지로 만들어서 파드, 디플로이먼트, 스테이트풀셋 등 다양한 오브젝트 조건에 맞춰 배포 된다.

5.1.1 CI/CD 도구 비교

  • 팀시티
    • 코틀린 기반으로, 에이전트 3개와 빌드 작업 100개를 무료로 사용할 수 있으며, 이후는 유료 결제를 해야 한다.
  • 깃허브 액션
    • 깃허브에서 지원하는 워크플로 기반의 도구이다. 한달에 2,000분 제한 시간이 있으며, 추가로 사용할 경우 분 단위의 요금이 부과 된다.
  • 뱀부
    • 아틀라시안에서 만든 도구로, 유료이며, 사용자 서버에 설치해 사용한다. 아틀라시안에서 만든 다른 협업 도구를 사용 중이라면 같이 사용하기 좋다.
  • 젠킨스
    • 오픈 소스 도구로, 사용자가 직접 UI에서 작업을 구성하거나 코드로 정의할 수 있다.
    • 오랜 시간 동안 사용되어 CI/CD 도구의 대명사라 해도 될 정도이다.
    • 사용자 수가 많아 정보를 찾기 쉽고 활용 방법과 플러그인 개발 등 쉽게 찾을 수 있다.
  • 따라서 젠킨스로 ㄱㄱ

젠킨스로 쿠버네티스 운영 환경 개선하기

  • 컨테이너 인프라 환경에서 젠킨스를 사용하는 주된 이유는 애플리케이션을 컨테이너로 만들고 배포하는 과정을 자동화 하기 위해서이다.
  • 젠킨스는 컨트롤러와 에이전트 형태로 구성한 다음 배포해야 하며, 여기에 필요한 설정을 모두 넣어야 한다.
  • 구성 환경에 따라 많은 부분을 동적으로 변경해야 하는데, 동적인 변경 사항을 간편하고 빠르게 적용할 수 있도록 도와주는 도구에는 커스터마이즈 그리고 헬름이 있다.

5.2 젠킨스 설치를 위한 간편화 도구 살펴보기

5.2.1 배포 간편화 도구 비교하기

구분 큐브시티엘 커스터마이즈 헬름
설치방법 쿠버네티스에 기본 포함 별도 실행 파일 또는 쿠버네티스에 통합 별도 설치
배포 대상 정적인 야믈 파일 커스터마이즈 파일 패키지(차트)
주 용도 오브젝트 관리 및 배포 오브젝트의 가변적 배포 패키지 단위 오브젝트 배포 및 관리
가변적 환경 대응 힘듬(야믈 수정 필요) 간단한 대응 가능 복잡한 대응 가능
기능 복잡도 단순함 보통 복잡함

5.2.2 커스터마이즈로 배포 간편화하기

커스터마이즈의 작동 원리

  • 야믈 파일에 정의된 값을 사용자가 원하는 값으로 변경할 수 있다.
# 커스터마이즈로 변경될 작업을 정의
kustomize create --namespace=metallb-system --resources namespace.yaml,metallb.yaml,metallb-12config.yaml

kustomization.yaml

resources:
- namespace.yaml
- metallb.yaml
- metallb-12config.yaml
namespace: metallb-system
# 설치 된 이미지를 안정적인 버전으로 유지하기 위해 이미지 태그를 v0.8.2로 지정
kustomize edit set image metallb/controller:v0.8.2
kustomize edit set image metallb/speaker:v0.8.2

kustomization.yaml

[중략]
images:
- name: metallb/controller
  newTag: v0.8.2
- name: metallb/speaker
  newTag: v0.8.2
# MetlLB 설치를 위한 매니페스트를 생성
kustomize build

# 빌드한 결과가 바로 kubectl apply에 인자로 전달돼 배포되도록 할수도 있다.
kustomize build | kubectl apply -f -
# MetalLB가 정상 배포 되었는지 확인
kubectl get pods -n metallb-system
kubectl get configmap -n metallb-system
# 디플로이먼트 1개를 배포하여 LB 타입으로 노출하고 IP가 정상적으로 할당 됬는지 확인
kubectl create deployment echo-ip --image=sysnet4admin/echo-ip
kubectl expose deployment echo-ip --type=LoadBalancer --port=80
kubectl get service echo-ip

5.2.3 헬름으로 배포 간편화하기

헬름의 작동 원리

  • 쿠버네티스에 패키지를 손쉽게 배포할 수 있도록 패키지를 관리하는 쿠버네티스 전용 패키지 매니저이다.
플랫폼 패키지 매니저 저장소 사용 목적
리눅스 yum, apt 배포판 저장소 소프트웨어 의존성 관리
파이썬 pip pypi.org 파이썬 모듈 의존성 관리
자바 maven mvnrepository.com 자바 라이브러리의 의존성 관리
쿠버네티스 helm artifacthub.io 쿠버네티스 패키지 관리
  • 다수의 오브젝트 배포 야믈은 파일 구분자인 ‘---‘로 묶어 단일 야믈로 작성해 배포할 수 있는 장점이 있다.
  • 요구 조건별로 리소르를 편집하거나 변수를 넘겨서 처리하는 패키지를 만들 수 있다. 이 패키지는 차트라고 한다
  • 배포한 애플리케이션을 업그레이드하거나 되돌릴 수 있는 기능과 삭제할 수 있는 기능을 제공한다.
# MetalLB 설치를 위해 저장소 등록
helm repo add edu https://iac-source.github.io/helm-charts

# 레포지토리 업데이트
helm repo update

# 설치
helm install metallb edu/metallb \
--namespace=metallb-system \
--crate-namespace \
--set controller.tag=v0.8.3 \
--set speaker.tag=v0.8.3
--set configmap.ipRange=192.168.1.11-192.168.1.29
# 배포 상태 확인
kubectl get pods -n metallb-system
kubectl get configmap -n metallb-system

# 테스트를 위한 디플로이먼트 생성
kubectl create deployment echo-ip --image=sysnet4admin/echo-ip
kubectl expose deployment echo-ip --type=LoadBalancer --port=80
kubectl get service echo-ip