kubectl 이 아닌 Helm 을 써야한다
배포를 위한 부가적인 기능을 위해, 자원생성을 잘 하기위해 Helm 과 kustomize 를 패키지 매니저라고 부른다
Helm vs kustomize
- 공통점
- 중복관리 최소화
- 다양한 배포툴에서 지원
- 차이점
- Helm
- 배포할 대상이 늘어날수록 좋음
- 함수방식
- 생태계 더 강력하다
- kustomize
- 소규모프로젝트일수록 좋음
- 오버레이방식
- 1.14버전부터 kubectl 에 포함
- Helm
헬름배포하기
- 초기화
- api-tester : 메인차트폴더 (main app 배포)
- charts : 서브차트폴더 (마이크로서비스의 sub app 배포)
- templates : 메인차트 yaml 파일 폴더
- tests : 메인앱 배포후 통신되는지 확인 (부가확인)
- helpers.tpl : 사용자 정의 전역변수
- NOTES.txt : README, 배포후 출력
- .helmignore : 랜더링시 제외하고픈 파일목록 (git ignore와 유사)
- Chart.yaml : 차트 기본정보
- values.yaml : 변수값들 선언 (-f 옵션으로 환경에따라 변경)
- values-dev.yaml
- values-qa.yaml
- api-tester : 메인차트폴더 (main app 배포)
- helm create api-tester
- 필요없는 파일 삭제
- 서브차트 폴더 삭제
- templates/tests 삭제
- 수정
- values.yaml
- replicaCount : 2
- image.pullPolicy
- Always
- IfNotPresent
- tag : Chart 파일의 appVersion 이 오버라이드됨
- serviceAccount.create : false
- service
- type : NodePort
- nodePort : 추가
- resources
- volumes
- volumeMounts
- nodeSelector
- deployment
- port : 서비스포트랑 같은걸 추천하나 일단은 컨테이너 포트를 8080으로
- probe 정보 변경
- helm command
- 인스턴스명 : api-tester-2221
- 경로 : ./api-tester
- 네임스페이스 : anotherclass-222
- .Release. 으로 사용가능
- 템플릿 변수를 작성하는 곳은 Chart, values, _helpers, 콘솔 총 네곳
- helm install api-tester-2221 ./api-tester -n anotherclass-222
- values.yaml
- 추가
- configmap.yaml
- secret.yaml
- nindent : 출력 들여쓰기
helm 배포
- install → create
- upgrade → patch
- upgrade --install → apply
- -f ./app/values-dev.yaml → 환경에따라 변경
kustomize 배포하기
명령어 없이 직접 만들어야됨
- api-tester
- base
- kustomization.yaml : 배포할 파일선택 및 공통값 설정
- overlays : 오버레이될 정보
- dev
- qa
- prod
- base
jenkins 에서 파라메터 주입
parameters {
choice(choices: ['dev', 'qa', 'prod'], name: 'PROFILE')
}
kubectl kustomize ./${CLASS_NUM}/deploy/kustomize/api-tester/overlays/${params.PROFILE}
고민되는 포인트와 해결법
- 계정정보 암호화안됨 → 젠킨스 크레덴셜로 등록
- withCredentials([file(credentialsId: 'k8s_master_config', variable: 'KUBECONFIG')]) {
- 컨테이너업로드 누적으로 용량차지 → 이미지 삭제
- sh "docker rmi ${DOCKERHUB_USERNAME}/api-tester:${TAG}”
- 그룹개념으로 네임스페이스 → 배포와 별도로 네임스페이스관리
- stage('네임스페이스 생성') {
- stage('헬름 배포') {
- 파드가 실제 기동중인지 확인 → --wait 옵션
- --wait --timeout=10m
- 배포해도 업그레이드가 안되는 경우(템플릿수정안되는경우) → metadata.annotations
- template.metadata.annotations.rollme = {{ randAlphaNum 5 | quote }}
- 이미지태그
- latest + Always : 늘 새로운 이미지를 가져오지만 롤백이 어려움
- 버전명시-날짜시간 + ifNotPresent : 개발도 이것으로 하는게 유리
- BUILD_DATE = sh(script: "echo date +%y%m%d.%d%H%M", returnStdout: true).trim()
- TAG = "${APP_VERSION}-" + "${BUILD_DATE}”
- --set image.tag=${TAG}
- 쿠버에 이미지 누적으로 용량차지 → 쿠버 가비지걸렉터
'개발 > Infra' 카테고리의 다른 글
(인강복습) 쿠버네티스 어나더 클래스 Sprint 2 - Jenkins Pipeline (기초부터 Blue/Green 까지) (0) | 2025.04.11 |
---|---|
(인강복습) 쿠버네티스 어나더 클래스 Sprint 2 - 배포를 시작하기전에 반드시 알아야 할 것들 (0) | 2025.04.11 |
(인강복습) 쿠버네티스 어나더 클래스 Sprint 2 - 손쉽게 데브옵스 환경을 구축하는 방법 (1) | 2025.04.11 |
(인강복습) 쿠버네티스 어나더 클래스 Sprint 2 - 데브옵스한방정리 (1) | 2025.04.11 |
(인강복습) 쿠버네티스 어나더 클래스 Sprint 1 - Application 기능으로 이해하기 - Component 동작으로 이해하기 (0) | 2025.04.10 |