[구름 k8s] TIL 3-4-2

Peppie·2022년 10월 25일
0

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개의 댓글