[구름 k8s] TIL 3-4-2

Peppie·2022년 10월 25일

1. Helm chart

쿠버네티스 클러스터 상에 어플리케이션을 배포하기 위해 YAML 파일을 이용하여 어플리케이션 정보 기술, kubectl 명령을 이용하여 배포관리

Helm은 쿠버네티스 클러스터 상에 어플리케이션을 패키지 형태로 관리해주는 도구

chart : Helm 패키지 구성 정보를 담은 YAML 형식의 파일들, 별도 디렉토리에 관련된 파일들로 구성

chart 사용

  • Helm repository에 미리 등록된 chart 사용 (기존 작성된 chart)
  • 사용자가 작성한 chart 사용

helm create 명령으로 chart 생성

  • helm create <chart 명> : chart 디렉토리 생성
helm create mychart
: mychart 생성

chart 디렉토리 구조

  • Chart.yaml : chart에 대한 이름, 버전, 설명 등을 정의한 파일
  • values.yaml : chart 설치시 사용할 환경변수를 정의한 파일
    • 템플릿 사용은 {{ .Values.image.tag }}와 같이 사용
      . : 최상위, chart 디렉토리 home
      Values : chart 구성 요소, values.yaml 의미
      .image : values.yaml 내용 중 이미지 요소
      .tag : 이미지 요소 중 태그 요소
  • charts/ : chart에서 사용하는 종속 chart들이 압축파일(tgz)로 존재
  • template/ : 설치할 리소스들의 기본 틀을 정의한 Manifest YAML 파일
    템플릿 문법
    • {{ 변수 }} : 변수 사용
      .Values : values.yaml 파일에 정의된 변수
      .Charts : Charts.yaml 파일에 정의된 변수
      .Release : 배포할 때 할당할 정보들을 사용
      include : _helpers.tpl 파일에서 정의된 변수
      -with ~ end : 변수에 대한 scope 정하는 문법, 해당 구간은 .이 설정한 변수에 소속
      -toYaml : 해당 변수를 YAML 형식으로 변경
      quote : string 타입으로 변경
  • _helpers.tpl : template manifest 파일들에서 공유하는 변수 정의_

chart.yaml 내용

https://helm.sh/ko/docs/topics/charts/

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 구성

Charts.yaml 파일 수정

chart에 대한 설명

  • 필수요소 (apiVersion, name, version) 외 필요한 선택 요소 추가

values.yaml 파일 수정

chart 환경변수

  • image, serivce, ingress 요소에 쿠버네티스 클러스터 리소스 관련 정보 기재

template 디렉토리의 실제 쿠버네티스 클러스터 구성 리소스 관련 YAML 파일 수정

deployment.yaml , service.yaml , ingress,yaml , serviceaccount.yaml

chart 검사

helm lint 명령을 이용하여 작성한 chart 문법 오류 검사

  • lint : 문법 체크 도구
  • helm lint <chart 명>
    • chart 명에 해당하는 디렉토리 파일 내용에 대한 문법 검사
    • helm lint 명령은 chart 디렉토리 이전에서 작업

helm template 명령 이용

template 디렉토리의 파일에서 사용하는 변수 참조가 실제 리소스 배포시 어떻게 대체되는지 미리 보기

  • template 디렉토리의 리소스 관련 파일 변수 내용 대체 결과 미리보기
  • helm template <chart 명>

chart 시험 설치

실제 설치 과정에 대한 미리 보기

  • helm install <chart 명> --dry-run --debug
    • --dry-run : 실제 클러스터에 설치하지 않고 chart를 시험하는 옵션
    • --debug : 배포를 위한 manifest 파일 내용 출력

chart 패키징

chart 파일을 압축파일 (.tgz) 형태로 만드는 과정

helm package <chart 디렉토리 경로>

chart 패키지 파일 생성

chart 패키지 파일 이름 형식

Charts.yaml 파일에 정의한 <이름>-<버전>.tgz 형식의 압축파일 생성

chart 패키지 파일을 레포지토리에 저장

chart 패키지 파일을 public/private/local repository에 저장

별도 레포지토리 저장 X 사용 가능

helm install <chart 패키지명>

0개의 댓글