그냥 kubectl 쓰면 안됨??
- kubectl은 단지 커맨드 라인 도구인 CLI
- 배포를 위한 부가적인 기능은 없음..
- kubeclt은 배포한 k8s 자원을 조회하거나 급한 수정을 해야 될 때 주로 사용
- 실제 자원 생성은 Helm과 Kustomize를 통해 생성
Helm과 Kustomize
- 패키지 매니저라고 부름 그러나 배포툴이라고 통칭할 때가 많음
- kube-apiserver 에 날리는 API 횟수는 같지만 작업자의 입장에서 한번만 배포하면 된다..
- 여러 Yaml 파일들을 패키지 형태로 관리할 수 있게 해줌
Helm VS Kustomize
공통점
- MSA 아키텍처 사용의 증가로 앱 종류가 늘어나고, 다양한 환경에 배포를 해야해서 관리할 파일이 증가
- Yaml 파일들에 대해시 중복 관리하는 것을 최소화 하기 위해 사용
- 다양한 배포 툴에서 지원해줌
- -> Heml, Kustomzie를 더 편하게 쓸 수 있도록 부가적인 기능들을 제공
차이점
그래서 뭐씀??
- 쿠버네티스를 사용하면서 여러 오픈소스들을 도입하게 됨
- 그 오픈소스들은 대부분 Helm형태로 배포를 함
- Helm을 먼저 쓴다면 Kustomize를 사용할 필요는 없어지게 됨
BUT!! Kustomize를 알아야 하는 경우가 있다면?!
- 처음부터 끝까지 소규모 프로젝트가 될 경우
- 빨리 배포 파이프라인을 구축해야하고, 단계적으로 Helm을 적용해도 되는 경우
- 이미 누가 Kustomize로 배포 파이프라인을 적용해 놔서 분석해야 할 경우
설치구성에서 Helm VS Kustomize
Kustomize
- 자체적으로 관리하는 사이트, 다운을 받거나 릴리즈를 관리하는 GitHub 두가지 있었음
- 1.14버전부터 kubectl에 통합
- 따라서 현재 사용하는 버전은 1.27 버전이기에 바로 사용 가능
- kubectl 명령어에서 '-k'를 추가해서 사용
Helm
- Helm 사이트가 있고 GitHub를 통해 다운받아 설치
- kubectl과 똑같이 인증서가 있어샤 kube-apiserver로 통신을 할 수 있음
- helm으로 시작하는 명령어 사용
- Artifact HUB가 있어 큰 생태계를 가지고 있음
Artifact HUB
- Helm 패키지를 저장하는 저장소
- 깃허브와 도커허브랑 같은 역할
- 기업들에서 자신들의 제품들을 Helm 패키지로 설치할 수 있도록 올려놓음
- Helm 명령어로 필요한 패키지를 다운받을 수 있음
- 기업에서 제공한 설치가이드를 통해 각자의 환경에 맞게 세팅해야함
사용방식에서 Helm VS Kustomize
Helm
- 함수 방식의 컨셉 사용
- Yaml 파일에 파라미터를 주입
- helm 명령어에 파라미터에 해당하는 변수를 넣어서 API로 날려줌
- 인풋 파라미터가 들어왔을 때 내부 로직에 따라 값이 치환돼서 결과 값이 만들어짐
Kustomzie
- 오버레이 방식의 컨셉 사용
- base 폴더 안에 아무런 처리가 되지 않은 Yaml 파일 존재
- 배포할때 달라지는 스펙을 따로 명시한 Yaml파일을 생성
- 명령을 날렸을때 base 파일을 덮어서 Yaml 파일을 재구성
Helm 패키지 만드는 순서
1. Helm 템플릿 생성 (init)
# helm 템플릿 생성
[jenkins@cicd-server ~]$ helm create api-tester
[jenkins@cicd-server ~]$ cd api-tester
[jenkins@cicd-server api-tester]$ ls
charts Chart.yaml templates values.yaml
2. 당장 필요없는 내용 삭제하기 (deleting)
charts
- 메인 앱을 보조해주는 서브 앱 폴더
- 한번에 배포해야 될 때 서브 앱들에 대한 Yaml 파일들을 분리하기 위한 폴더
.helmignore
- 배포안할 yaml 파일, 렌더링시 에러를 유발하는 파일
Chart.yaml
- 차트 기본정보 선언
values.yaml(매우 중요!!)
- 파일에 기본적으로 줄 값들을 미리 선언해서 파일로 생성
3. 내 yaml 파일에 맞게 Helm Package 수정하기 (modify)
- Service에서 port와 containerPort가 동일하게 들어가는 부분 주의
- 동적 변수 넣기 (미리 넣기보단 지금 필요한 것만 넣기)
- 완벽할 필요 없음, 잘못된 부분이 있으면 배포시 문법에러 나옴
4. 내 resource 더 추가하기 (addition)
- configmap, secret 추가하기 (두 object는 한 App에 여러개 만들 수 있음, name에 하드코딩 필요)
출처
[인프런] 쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2
저자 : 일프로
'k8s' 카테고리의 다른 글
[2-7] ArgoCD 빠르게 레벨업 하기 (1) | 2024.05.10 |
---|---|
[2-6] Helm과 Kustomize 비교하며 사용하기 (2) (1) | 2024.05.07 |
[2-3] 배포를 시작하기 전에 반드시 알아야 할 것들 (0) | 2024.05.05 |
[2-2] 손쉽게 데브옵스 환경을 구축하는 방법 (1) | 2024.05.02 |
[1-8] Component 동작으로 이해하기 (1) | 2024.05.01 |