본문 바로가기
스터디/쿠버네티스 & 도커

[쿠버네티스 / 도커] 05. 지속적 통합과 배포 자동화, 젠킨스

by 디토20 2022. 7. 13.
반응형

 

 

 

 

[쿠버네티스 / 도커] 05. 지속적 통합과 배포 자동화, 젠킨스

 

 

자동화는 크게 지속적 통합(CI)와, 지속적 배포(CD) 두가지로 정의되며, 일반적으로 둘을 합쳐 CI/CD라고 한다. CI/CD는 실무적인 환경에서 변경 사항을 계속 추적해 좀 더 안정화된 애플리케이션을 만들고, 이를 배포하는 과정을 자동화해 시스템을 안정적으로 운영하는 데 가장 많이 쓰이는 개념이다.

 

 

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

CI

코드를 커밋하고 푸시하면 CI 단계로 들어가는데, CI 단계에서는 애플리케이션이 자동으로 빌드되고 테스트를 거쳐 배포할 수 있는 애플리케이션인지 확인한다. 테스트를 통과하면 신뢰할 수 있는 애플리케이션으로 간주하고 CD 단계로 넘어간다.

 

CD

CI과정에서 생성된 신뢰할 수 있는 애플리케이션을 다양한 조건에 맞춰 미리 설정한 파일을 통해 실제 상용 환경에 자동으로 배포하는 것을 의미한다.

 

 

 

1.1 CI/CD 도구 비교

구분 팀시티 깃허브 액션 뱀부 젠킨스
설치 방식 직접 설치 깃허브 연동 직접 설치 직접 설치
연계 가능 보통 보통 부족 매우 많음
가격 무료/유료 무료/유료 유료 무료
기능 추가 보통 매우 다양함 보통 매우 다양함
범용성 보통 매우 큼 보통 매우 큼
정보량 부족함 많음 많음 매우 많음

 

 

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

기존에는 환경이 다른 곳에 빌드한 애플리케이션을 배포하게 되면 개발자가 개별 환경에 맞춰 애플리케이션 코드를 일일이 수정해야 했으나, 컨테이너 이미지를 기반으로 CI/CD를 이용하면 어떤 환경에서도 일관성 있는 애플리케이션을 배포할 수 있다.

 

자동화 환경은 단순 젠킨스용 파드만으로는 불가능하고, 컨트롤러와 에이전트 형태로 구성한 다음 배포해야 하며 여기에 필요한 설정을 모두 넣어야 한다. 애플리케이션을 배포하기 위한 환경을 하나하나 구성하는 것은 매우 복잡하고 번거로운 일이며, 고정된 값이 아니기 때문에 매니페스트로 작성해 그대로 사용할 수가 없고 구성환경에 따라 많은 부분들을 동적으로 변경해야 한다.

 

커스터마이즈헬름을 이용해 동적인 변경사항을 간현파고 빠르게 적용할 수 있다.

 

 

 

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

사용자마다 필요한 환경적 요소가 모두 다르므로 이를 요구사항에 맞게 바꾸어야 한다. 커스터마이즈와 헬름은 kubectl을 좀 더 확장해서 복잡한 오브젝트와 구성 환경을 자동으로 맞추는 도구다.

 

 

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

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

 

 

 

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

커스터마이즈는 야믈 파일에 정의된 값을 사용자가 원하는 값으로 변경할 수 있다. 쿠버네티스에서 오브젝트에 대한 수정 사항을 반영하려면 사용자가 직접 야믈 파일을 편집기 프로그램으로 수정해야 하는데 이런 방식으로 수정했을 때 큰 문제가 생기지는 않는다.

 

그러나 수정해야 하는 야믈 파일이 매우 많거나 하나의 야믈 파일로 환경이 다른 여러개의 쿠버네티스 클러스터에 배포해야 해서 LABEL이나 NAME 같은 일부 항목을 수정해야 한다면 매번 일일이 고치는데 많은 노력이 든다. 커스터마이즈는 이를 위해 kustomize 명령을 제공한다.

 

그러나 커스터마이즈는 여러 가지 변경할 부분을 사용자가 직접 야믈파일에 추가하고 최종적으로 필요한 매니페스트를 만들어 배포해야한다. 또한 주소 할당 영역과 같은 값은 커스터마이즈를 통해 변경할 수 없다.

 

 

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

헬름을 통한 배포는 커스터마이즈에서 제한적이었던 주소 할당 영역과 같은 값을 대체하면서 간단하게 설치할 수 있도록 설계되어 있다. 헬름은 쿠버네티스에 패키지를 손쉽게 배포할 수 있도록 패키지를 관리하는 쿠버네티스 전용 패키지 매니저이다. 패키지 매니저의 가장 중요한 목적은 설치에 필요한 의존성 파일들을 관리하고 간편하게 설치할 수 있도록 도와주는 것이다.

 

플랫폼 패키지 매니저 저장소 사용 목적
리눅스 yum.apt 배포판 저장소 소프트웨어 의존성 관리
파이썬 pip pypi.org 파이썬 모듈 의존성 관리
자바 maven mvnrepository.com 자바 라이브러리 의존성 관리
쿠버네티스 helm artifacthub.io 쿠버네티스 패키지 관리

 

패키지 매니저의 역할은 패키지의 손쉬운 설치와 관리이므로 모든 패키지는 패키지 검색, 패키지 관리, 패키지 의존성 관리, 패키지 보안관리와 같은 기능이 있다.

 

또한 다수의 오브젝트 배포 야믈은 파일 구분자인 '---'로 묶어 단일 야믈로 작성해 배포할 수 있는데, 이때 여러사람이 작업하면 충돌이 발생할 수 있다. 문제를 해결하려면 목적에 맞게 디렉터리를 만들고 야믈 파일을 분리해 관리하면서 배포 시에는 디렉터리를 인자로 넘겨줘야 하는 복잡함이 있다. 이때 헬름을 이용하면 요구 조건별로 리소스를 편집하거나 변수를 넘겨 처리하는 패키지를 만들 수 있다. 이렇게 다양한 요구 조건을 처리할 수 있는 패키지차트라고 하는데, 이를 헬름 저장소에 공개해 여러 사용자와 공유할 수 있다.

 

헬름의 기본 저장소는 아티팩트허브로 다른 패키지 매니저처럼 외부에 있지만, 다른 저장소와 달리 아티팩트허브에서는 설치할 패키지에 대한 경로만 제공한다.

 

 

 

 

3. 젠킨스 설치 및 설정하기

일반적으로 간단한 테스트에서는 젠킨스 컨트롤러 단독 설치로, 컨트롤러가 설치된 서버에서 젠킨스 자체 시스템 관리, CI/CD 설정, 빌드 등의 작업을 모두 단일 노드에서 수행하고, 그 외에는 주로 컨트롤러-에이전트 구조로 사용된다. 젠킨스 에이전트는 필요시에 생성되고 작업을 마치면 삭제되는 임시적인 구조를 가지기 때문에 젠킨스 에이전트 작업 내용들은 삭제 전에 젠킨스 컨트롤러에 저장되어야 한다.

 

 

3.1 블루그린 배포 전략

MetalLB 로드밸런서를 통해 새로운 버전을 배포하게 되면 롤링 업데이트 전략을 사용한다. 이것은 파드를 레플리카셋 단위로 나누어 모든 레플리카셋에 속해 있는 파드가 업데이트 된 이후에 레플리카셋을 삭제하는 것인데, 이런 과정에서 내부 파드 개수가 많으면 업데이트 과정이 길어져 다른 두가지의 버전이 오랫동안 공존하는 경우가 있다.

 

 

이런 상황을 방지하는 좋은 방법 중 하나는 블루그린 배포 전략을 사용하는 것이다. 블루그린 배포 전략은 간단히 말해서 '모든 파드가 업데이트 된 이후에 트래픽을 전달하자' 이다. 이렇게 할 경우 서비스의 중단없이 연속적으로 배포가 가능하고, 문제가 발생한 경우 기존 서비스로 원복하는 것도 수월해 장애 복구도 쉽다. 하지만 배포를 위한 디플로이먼트를 만들어야 하기 때문에 기존 디플로이먼트 배포 대비 최소 2배 이상의 리소스가 필요하다.

쿠버네티스 환경에서 블루그린 배포는 기본 기능이 아니기 때문에 구성할 수 없지만 젠킨스를 이용한다면 구현이 가능하다.

 

 

 

 

5. 젠킨스 플러그인을 통해 구현되는 GitOps

젠킨스에서 사용되는 거의 모든 기능은 플러그인을 통해 이루어진다. 여러 플러그인들을 조합하면 단일 플러그인으로 만들지 못하는 기능을 생성할 수 있다. 쿠버네티스용 지속적 배포, 슬랙 알림, 변경 내용 비교 총 3개의 플러그인을 조합해 젠킨스에서 GitOps(Git과 Ops의 합성어로 깃을 통해 모든 것을 선언적으로 깃허브와 같은 SCM에 업데이트 하면 젠킨스와 같은 오퍼레이터가 변경분을 감지해 대상 시스템에 배포하는 것)를 구현할 수 있다.

 

GitOps의 장점
  • 깃허브 저장소의 내용과 실제 상용 운영 환경의 내용을 동일하게 가져갈 수 있다.
  • 깃허브 저장소로 모든 내용을 단일화해 관리하고 히스토리도 관리할 수 있으며 문제가 생기면 빠르게 복원할 수 있다.
  • 배포를 표준화해 자동 배포할 수 있다.
  • 사람의 실수를 줄일 수 있다.
728x90
반응형

댓글