kubernetes helm chart
배경
개발서버에서 젠킨스를 활용해 ECR 이미지를 빌드 후 배포 했지만 컨테이너가 실행 되지 않았다 담당자님께 확인해보니 새로운 앱이 적용되면 helm 설정을 변경해야 한다고 한다
개발서버 로그인 후 ~/k8s/helm 가서 templates templates에 새로운 app에 대한 file 생성 및 기타 파일 업로드 해야해요 ..
왜?어떻게 바꾸는거지?
일단.. 용어부터 이해해보자..
Helm이란? -> 배달앱..
Kubernetes에서 앱을 쉽고 안정적으로 배포할 수 있게 해주는 도구 Kubernetes의 "패키지 매니저" (apt, yum, brew 같은 역할)
Helm Chart란? -> 왜 피자 세트?? ->여러 리소스를 세트로 묶어서 설치해줌
Helm이 사용하는 앱 설치용 패키지 묶음 여러 개의 Kubernetes YAML 파일 + 설정값(template)으로 구성된 앱 배포 템플릿
로컬에서
helm pull bitnami/mysql --untar
실행시 mysql 폴더 생겼고
mysql/├── Chart.yaml # 이 Helm Chart의 기본 정보 (이름, 버전, 설명 등)├── values.yaml # 이 Helm Chart에 넘길 수 있는 기본 설정값들├── templates/ # 실제 쿠버네티스 리소스 템플릿들이 들어 있음│ ├── deployment.yaml│ ├── service.yaml│ ├── pvc.yaml│ └── ...
그럼 내가 생성한 앱 컨테이너에도 추가할 수 있나?
이미지 태그 바꾸기
- Helm Chart에서 명시적으로 관리해야 함 -> 이미지 태그 관리
작업 진행해보니
work/k8s/helm-test/ Chart.yaml values.yaml myApp.yaml -> 이 서비스는 이번 배포에 포함할지 말지 제어 (사람이 직접 추가) templates/ ├── a_service ├── b_service │ └── deployment.yaml hpa.yaml service.yaml └── ...
templates 안에 new_service.yaml 을 작성 - 새로운 앱 추가
- tip
replicas
동일한 Pod 몇개 실행할지.. - tip deployment.yaml : 앱 실행(Pod)을 관리하는 핵심 설정
- tip service.yaml:외부/내부에서 Pod에 접근 설정,앱 접속 라우팅
- tip hpa.yaml:CPU 사용률, 메모리 사용률 등을 기준으 로 Pod 수를 자동으로 조절하는 설정 파일
이걸 수동으로 쓰는건가..
직접 Helm values 파일을 수정하고 배포까지만 해보겠지만.. Terraform을 쓰면 그 설정과 배포 과정을 전부 코드로 선언해서 버전 관리 , 자동화 까지 가능??
수동으로 추가
mkdir -p gift-service && touch gift-service/deployment.yaml gift-service/service.yaml gift-service/hpa.yaml gift-service/secret.yaml
gift-service/├── deployment.yaml├── service.yaml├── hpa.yaml└── secret.yaml
로커에서 Helm Chart를 통해 Pod(Deployment)를 선언하고 관리
~/work/k8s/helm-my$ helm create msa-sevice
Chart.yaml charts templates values.yaml
내용이 하위에 생기고
templates 안에도 yaml 파일 생성됨
msa-service/├── Chart.yaml├── values.yaml├── templates/│ ├── NOTES.txt # 설치 후 메시지 안내│ ├── _helpers.tpl # 공통 템플릿 함수들│ ├── deployment.yaml # Deployment 리소스 템플릿│ ├── hpa.yaml # HorizontalPodAutoscaler 템플릿│ ├── ingress.yaml # Ingress 리소스 템플릿│ ├── service.yaml # Service 리소스 템플릿│ ├── serviceaccount.yaml # ServiceAccount 템플릿│ └── tests/│ └── test-connection.yaml # 간단한 연결 테스트 Job