어쩌다 IT
article thumbnail
반응형

리뷰 (Review)

더보기

Helm

  • Kubernetes의 응용 프로그램 정의, 설치 및 업그레이드를 코드 형태로 관리 / 제공
  • Kubernetes 패키지 관리자 성격 (Python의 pip, Node.js의 npm 등)

 

Helm 기능

  • 복잡한 Application 배포 관리
  • Hook (Application 생명 주기 관리)
  • 릴리즈 관리
  • 재사용성

 

Helm 구성

  • Helm Server (Tiller)
  • Helm Client
  • Helm Chart Repository
  • Helm Chart

 

Helm Chart

 

  • Helm은 Kubernetes Cluster 상에 Application을 패키지 형태로 관리해주는 도구
  • Helm 패키지를 구성하기 위한 정보를 담고 있는 YAML 형식의 파일들을 Chart라고 한다.
  • Chart 사용
    • Helm repository에 미리 등록된 chart 사용 (기존에 작성되어 있는 chart)
    • 사용자가 작성한 chart 사용
  • Chart는 YAML 형식으로 작성하고 별도의 디렉토리에 관련된 파일들로 구성
  • Chart 생성 과정

  • helm create 명령으로 chart 생성
    • helm create <chart 이름> : chart 생성
    • helm create mychart

  • Chart 디렉토리 구조
    • 참고 자료
    • Chart.yaml - chart에 대한 이름, 버전, 설명 등을 정의한 파일
    • values.yaml
      • chart 설치 시 사용할 환경 변수를 정의한 파일
      • template 사용은 {{.Values.image.tag}}와 같이 사용
        • . : 최상위, chart 디렉토리 home
        • Values : chart 구성 요소, values.yaml 의미
        • .image : values.yaml 내용 중 image 요소
        • .tag : image 요소 중 tag 요소
    • charts/ - chart에서 사용하는 종속 chart들이 압축 파일(.tgz)로 존재
    • template/
      • 설치할 resource들의 기본 틀을 정의한 Manifest YAML 파일
      • template 문법
        • {{변수}} - 변수 사용
        • .Values : values.yaml 파일에 정의된 변수
        • .Chart : Chart.yaml 파일에 정의된 변수
        • .Release
          • 배포할 때 할당할 정보들을 사용
          • ex) --namespace test로 install 시 .Release.Namespace 에 test 할당
        • include : _helpers.tpl 파일에 정의된 변수
        • -with ~ end
          • 변수에 대한 scope를 정하는 문법
          • 해당 구간은 . 이 설정한 변수에 속함을 의미
        • -toYaml : 해당 변수를 YAML 형식으로 변경
        • quote : string 타입으로 변경
    • _helpers.tpl - template manifest 파일들에서 공유하는 변수 정의 
  • Chart.yaml 내용
apiVersion: 차트 API 버전 (필수)
name: 차트명 (필수)
version: SemVer 2 버전 (필수)
kubeVersion: 호환되는 쿠버네티스 버전의 SemVer 범위 (선택)
description: 이 프로젝트에 대한 간략한 설명 (선택)
type: 차트 타입 (선택)
keywords:
  - 이 프로젝트에 대한 키워드 리스트 (선택)
home: 프로젝트 홈페이지의 URL (선택)
sources:
  - 이 프로젝트의 소스코드 URL 리스트 (선택)
dependencies: # 차트 필요조건들의 리스트 (optional)
  - name: 차트명 (nginx)
    version: 차트의 버전 ("1.2.3")
    repository: 저장소 URL ("https://example.com/charts") 또는 ("@repo-name")
    condition: (선택) 차트들의 활성/비활성을 결정하는 boolean 값을 만드는 yaml 경로 (예시: subchart1.enabled)
    tags: # (선택)
      - 활성화 / 비활성을 함께하기 위해 차트들을 그룹화 할 수 있는 태그들
    enabled: (선택) 차트가 로드될수 있는지 결정하는 boolean
    import-values: # (선택)
      - ImportValues 는 가져올 상위 키에 대한 소스 값의 맵핑을 보유한다. 각 항목은 문자열이거나 하위 / 상위 하위 목록 항목 쌍일 수 있다.
    alias: (선택) 차트에 대한 별명으로 사용된다. 같은 차트를 여러번 추가해야할때 유용하다.
maintainers: # (선택)
  - name: maintainer들의 이름 (각 maintainer마다 필수)
    email: maintainer들의 email (각 maintainer마다 선택)
    url: maintainer에 대한 URL (각 maintainer마다 선택)
icon: 아이콘으로 사용될 SVG나 PNG 이미지 URL (선택)
appVersion: 이 앱의 버전 (선택). SemVer인 필요는 없다.
deprecated: 차트의 deprecated 여부 (선택, boolean)
annotations:
  example: 키로 매핑된 주석들의 리스트 (선택)

 

생성된 chart 디렉토리의 필요한 파일의 내용을 수정하여 chart 구성 실습

더보기
  • Chart.yaml 파일 수정
    • chart에 대한 설명
    • 필수 요소 (apiVersion, name, version) 외에 필요한 선택 요소 추가
  • values.yaml 파일 수정
    • chart 환경 변수
    • image, service, ingress 요소에 Kubernetes cluster resource 관련 정보 기재
  • template 디렉토리에 있는 실제 Kubernetes cluster에 구성하는 resource 관련 YAML 파일 수정
    • deployment.yaml, service.yaml, ingress.yaml, serviceaccount.yaml 등
    • deployment.yaml 파일 수정

 

chart 검사

  • helm lint 명령을 이용하여 작성한 chart 문법에 오류가 없는지 검사
    • lint - 문법을 check 하는 도구
    • helm lint <chart 이름>
      • chart 이름에 해당하는 디렉토리의 파일내용에 대한 문법 검사
      • helm lint 명령은 chart 디렉토리 이전에서 작업
  • helm template 명령을 이용하여 template 디렉토리의 파일에서 사용하는 변수 참조가 실제 리소스 배포 시
    어떻게 대체되는지 미리 보기
    • template 디렉토리에 있는 리소스 관련 파일의 변수 내용 대체 결과 미리 보기
    • helm template <chart 이름>
  • chart 시험 설치
    • 실제 설치 과정에 대한 미리 보기
    • helm install <char 이름> --dry-run --debug
      • --dry-run : 실제 cluster에 설치하지 않고 chart를 시험하는 옵션
      • --debug : 배포를 위한 manifest 파일 내용 출력

 

chart 패키징

  • chart 파일을 압축 파일 (.tgz) 형태로 만드는 과정
  • helm package <chart 경로> : chart 패키지 파일 생성
    • chart 패키지 파일 이름 형식 - Chart.yaml 파일에 정의한 <name>-<version>.tgz 형식의 압축 파일 생성
  • chart 패키지 파일을 repository에 저장
    • chart 패키지 파일을 public/private/local repository에 저장
    • 별도의 repository에 저장하지 않고 사용 가능
      • helm install <NAME> <chart 패키지 이름>

TIF

차근차근, 조금씩, 하면 된다.

 

 

2022. 10. 25 에 작성된 글입니다.

 

 

 

반응형
profile

어쩌다 IT

@jwlish

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!