Nginx 애플리케이션을 사용하려면 디플로이 먼트를 생성하고 이를 서비스로 노출하는 오브젝트 생성 과정을 총 두번 진행해야 했다. 그런데 이런 적은 수의 오브젝트로 모든 종류의 애플리케이션을 사용자가 사용할 수 있는 형태로 구현할 수 있을까? 그렇지 않다. 필요에 따라서 다수의 오브젝트를 사용해야 하는데, 우리는 수많은 오브젝트를 한번에 생성하는 매니페스트를 실행한적이 있다.
MetalLB 구동하는 데 필요한 수많은 오브젝트를 미리 정의된 하나의 매니페스트에 넣고 바로 실행했다. 모든 환경에서 단순히 오브젝트를 정의한 대로만 사용한다면 젠킨스나 커스터마이즈, 헬름 등은 알 필요가 없다. 그러나 사용자마다 필요한 환경적 요소가 모두 다르므로 이를 요구 사항에 맞게 바꾸어야한다.
쿠버네티스 클러스터 환경에서는 이러한 배포 도구들이 이미 준비돼있다. 지금부터 배포 도구를 이용해 다양한 요구 사항에 맞게 애플리케이션을 구성하고 배포하는 법을 알아보자
배포 간편화 도구 비교하기
그동안 사용한 kubectl은 사실 바이너리 실행 파일로 짜인 배포 도구이다. 만약 kubectl이 없다면 직접 코드를 짜서 API서버에 명령을 내려야한다. 커스터마이즈와 헬름은 kubectl을 좀 더 확장해서 복잡한 오브젝트와 구성 환경을 자동으로 맞추는 도구이다.
- 큐브시티엘(kubectl)
- 쿠버네티스에 기본으로 포함된 커맨드라인 도구로, 추가 설치 없이 바로 사용할 수 있다. 오브젝트 생성과 쿠버네티스 클러스터에 존재하는 오브젝트, 이벤트등의 정보를 확인하는 데 사용하는 활용도 높은 도구이다. 또한 오브젝트의 명세가 정의된 야믈파일을 인자로 입력받아 파일 내용에 따라 오브젝트를 배포할 수도 있다. 큐브시티엘은 정의된 매니페스트 파일을 그대로 배포하기 때문에 개별적인 오브젝트를 관리하거나 배포할 때 사용하는것이 좋다.
- 커스터마이즈(kustomize)
- 오브젝트를 사용자의 의도에 따라 유동적으로 배포할 수 있다. 별도의 커스터마이즈 실행 파일을 활욜해 커스터마이즈 명세를 따르는 야믈 파일을 생성할 수 있다. 야믈파일이 이미 존재한다면 kubectl로도 배포할 수 있는 옵션(-k)이 있을정도로 kubectl과 매우 밀접하게 동작한다. 커스터마이즈는 명세와 관련된 야믈파일에 변수는 템플릿을 사용하지는 않지만, 명령어로 배포 대상 오브젝트의 이미지 태그와 레이블같은 명세를 변경하거나 일반 파일을 이용해 컨피그맵과 시크릿을 생성하는 기능을 지원한다. 그래서 운영 중인 환경에서 배포 시 가변적인 요소를 적용하는데 적합하다.
- 헬름(Helm)
- 헬름은 쿠버네티스 사용자의 70% 이상이 사용하고 있을 정도로 널리 알려진 도구로, 오브젝트 배포에 필요한 사양이 이미 정의된 차트(chart)라는 패키지를 활용한다. 앞선 두 가지 도구와 달리 헬름 차트 저장소가 온라인에 있기 때문에 패키지를 검색하고 내려받아 사용하기가 매우 간편하다. 헬름 차트는 자체적인 템플릿 문법을 사용하므로 가변적인 인자를 배포할 때 적용해 다양한 배포 환경에 맞추거나 원하는 조건을 적용할 수 있다. 헬름은 오브젝트를 묶어 패키지 단위로 관리하므로 단순한 1개의 명령어로 애플리케이션에 필요한 오브젝트를 구성할 수 있다.
구분 | 큐브시티엘 | 커스터마이즈 | 헬름 |
설치 방법 | 쿠버네티스에 기본 포함 | 별도 실행 파일 또는 쿠버네티스에 통합 | 별도 설치 |
배포 대상 | 정적인 야믈 파일 | 커스터마이즈 파일 | 패키지(차트) |
주 용도 | 오브젝트 관리 및 배포 | 오브젝트의 가변적 배포 | 패키지 단위 오브젝트 배포 및 관리 |
가변적 환경 | 대응 힘듦(야믈 수정 필요) | 간단한 대응 가능 | 복잡한 대응 가능 |
기능 복잡도 | 단순함 | 보통 | 복잡함 |
kubectl에서는 고정적인 값으로 설정된 매니페스트를 그대로 사용할 수밖에 없지만 커스터마이즈는 일부 내용을 가변적으로 변경해 사용할 수 있다. 그리고 헬름은 매니페스트의 일부가 아닌 모든 내용을 설정할 수 있는 값을 제공해 필요에 따라 사용자 환경에 맞는 설정값으로 변경 가능하다.
출처:
"컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 - 조훈,심근우,문성주 지음/길벗출판사" 책을 기반으로 실습한 내용입니다.
'DevOps > CI|CD' 카테고리의 다른 글
젠킨스 살펴보기 (0) | 2022.06.13 |
---|---|
커스터마이즈로 배포 간편화하기 (MetalLB 구성) (0) | 2022.06.13 |
컨테이너 인프라 환경에서 CI/CD (0) | 2022.06.13 |
통합 및 배포 자동화 (0) | 2022.06.13 |
쿠버네티스에 젠킨스(Jenkins) 설치하기 (2) | 2022.06.13 |