Helm 차트

Jmnote (토론 | 기여)님의 2024년 6월 25일 (화) 01:40 판 (→‎CRD 제한사항)

1 개요

Charts
차트

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

Crystal Clear action info.png 작성 중인 문서입니다.

Helm은 차트라는 패키징 형식을 사용합니다. 차트는 관련된 일련의 Kubernetes 리소스를 설명하는 파일 모음입니다. 단일 차트는 memcached pod과 같은 간단한 것을 배포하는 데 사용되거나 HTTP 서버, 데이터베이스, 캐시 등과 같은 전체 웹앱 스택을 포함한 복잡한 것을 배포하는 데 사용될 수 있습니다.

차트는 특정 디렉토리 트리 구조로 배치된 파일로 생성됩니다. 이러한 파일은 버전이 지정된 아카이브로 패키징되어 배포될 수 있습니다.

설치하지 않고 게시된 차트의 파일을 다운로드하고 싶다면 helm pull chartrepo/chartname 명령어를 사용하여 할 수 있습니다.

이 문서는 차트 형식을 설명하고 Helm을 사용하여 차트를 작성하는 기본적인 지침을 제공합니다.

2 차트 파일 구조

차트는 디렉토리 내의 파일 모음으로 구성됩니다. 디렉토리 이름은 차트의 이름(버전 정보 제외)입니다. 따라서 WordPress를 설명하는 차트는 wordpress/ 디렉토리에 저장됩니다.

이 디렉토리 내부에서, Helm은 다음과 같은 구조를 기대합니다:

wordpress/
  Chart.yaml          # 차트에 대한 정보를 포함하는 YAML 파일
  LICENSE             # 선택사항: 차트에 대한 라이선스를 포함하는 일반 텍스트 파일
  README.md           # 선택사항: 휴먼리더블 README 파일
  values.yaml         # 이 차트의 기본 설정 값
  values.schema.json  # 선택사항: values.yaml 파일에 구조를 부여하기 위한 JSON 스키마
  charts/             # 이 차트가 의존하는 차트를 포함하는 디렉토리
  crds/               # 커스텀 리소스 정의
  templates/          # values와 결합될 때 유효한 Kubernetes 매니페스트 파일을 생성하는 템플릿 디렉토리
  templates/NOTES.txt # 선택사항: 짧은 사용법 노트를 포함하는 일반 텍스트 파일

Helm은 charts/, crds/, templates/ 디렉토리와 나열된 파일 이름을 예약하여 사용합니다. 다른 파일은 그대로 유지됩니다.

3 Chart.yaml 파일

Chart.yaml 파일은 차트에 필수입니다. 이 파일은 다음 필드들을 포함합니다:

apiVersion: 차트 API 버전 (필수)
name: 차트의 이름 (필수)
version: SemVer 2 버전 (필수)
kubeVersion: 호환되는 Kubernetes 버전의 SemVer 범위 (선택)
description: 이 프로젝트에 대한 한 문장 설명 (선택)
type: 차트의 유형 (선택)
keywords:
  - 이 프로젝트와 관련된 키워드 목록 (선택)
home: 이 프로젝트의 홈페이지 URL (선택)
sources:
  - 이 프로젝트의 소스 코드 URL 목록 (선택)
dependencies: # 차트 요구사항 목록 (선택)
  - name: 차트의 이름 (예: nginx)
    version: 차트의 버전 (예: "1.2.3")
    repository: (선택) 리포지토리 URL (예: "https://example.com/charts") 또는 별칭 ("@repo-name")
    condition: (선택) 차트를 활성화/비활성화하는 데 사용되는 boolean으로 해결되는 YAML 경로 (예: subchart1.enabled)
    tags: # (선택)
      - 태그는 차트를 그룹화하여 함께 활성화/비활성화하는 데 사용될 수 있음
    import-values: # (선택)
      - ImportValues는 소스 값을 상위 키에 매핑하여 가져오는 항목을 보유합니다. 각 항목은 문자열 또는 자식/부모 하위 목록 항목의 쌍일 수 있습니다.
    alias: (선택) 차트에 사용될 별칭. 동일한 차트를 여러 번 추가해야 할 때 유용함
maintainers: # (선택)
  - name: 유지관리자의 이름 (각 유지관리자에 대해 필수)
    email: 유지관리자의 이메일 (각 유지관리자에 대해 선택)
    url: 유지관리자에 대한 위한 URL (각 유지관리자에 대해 선택)
icon: 아이콘으로 사용할 SVG 또는 PNG 이미지의 URL (선택)
appVersion: 이 차트가 포함하는 앱의 버전 (선택). SemVer일 필요는 없음. 따옴표 권장.
deprecated: 이 차트가 지원중단되었는지 여부 (선택, boolean)
annotations:
  example: 이름별로 키가 지정된 어노테이션 목록 (선택)

v3.3.2 버전부터 추가 필드는 허용되지 않습니다. 권장되는 방법은 annotations에 커스텀 메타데이터를 추가하는 것입니다.

3.1 차트와 버전 관리

모든 차트에는 버전 번호가 있어야 합니다. 버전은 SemVer 2 표준을 따라야 합니다. Helm Classic과 달리, Helm v2 및 이후 버전에서는 버전 번호를 릴리스 마커로 사용합니다. 리포지토리의 패키지는 이름과 버전으로 식별됩니다.

예를 들어, 버전 필드가 version: 1.2.3로 설정된 nginx 차트는 다음과 같이 명명됩니다:

nginx-1.2.3.tgz

더 복잡한 SemVer 2 이름도 지원되며, 예를 들어 version: 1.2.3-alpha.1+ef365와 같은 이름도 사용할 수 있습니다. 그러나 비-SemVer 이름은 시스템에서 명시적으로 금지됩니다.

참고: Helm Classic과 Deployment Manager는 차트와 관련하여 GitHub 지향적이었지만, Helm v2 및 이후 버전에서는 GitHub이나 Git을 요구하지 않습니다. 따라서 Git SHA를 버전 관리에 사용하지 않습니다.

Chart.yaml 내부의 version 필드는 CLI를 포함한 많은 Helm 도구에서 사용됩니다. 패키지를 생성할 때 helm package 명령어는 Chart.yaml에서 찾은 버전 번호를 패키지 이름의 토큰으로 사용합니다. 시스템은 차트 패키지 이름의 버전 번호가 Chart.yaml의 버전 번호와 매치한다고 가정합니다. 이 가정을 충족하지 않으면 오류가 발생합니다.

3.2 apiVersion 필드

3.3 appVersion 필드

3.4 kubeVersion 필드

3.5 차트 지원중단

3.6 차트 유형

4 차트 LICENSE, README, NOTES

5 차트 의존성

5.1 dependencies 필드로 의존성 관리

5.1.1 dependencies에서 Alias 필드

5.1.2 dependencies에서 Tags와 Condition 필드

5.1.2.1 Tags, Conditions와 함께 CLI 사용
5.1.2.2 Tags, Condition 해결

5.1.3 dependencies를 통해 자식 값 가져오기

5.1.3.1 exports 형식 사용
5.1.3.2 child-parent 형식 사용

5.2 charts/ 디렉토리를 통한 종속성 수동 관리

5.3 의존성 사용에 대한 운영 측면

6 템플릿과 Values

6.1 템플릿 파일

6.2 사전정의된 Values

6.3 Values 파일

6.4 스코프, 의존성, Values

6.4.1 전역 Values

6.5 스키마 파일

6.6 참고자료

7 커스텀 리소스 정의 (CRD)

7.1 CRD 제한사항

다른 대부분의 Kubernetes 객체와 달리, CRD는 전역적으로 설치됩니다. 이 때문에 Helm은 CRD를 관리할 때 매우 신중한 접근방식을 취합니다. CRD는 다음과 같은 제한사항이 적용됩니다:

  • CRD는 절대 재설치되지 않습니다. Helm이 crds/ 디렉토리에 있는 CRD가 이미 존재한다고 판단하면(버전과 관계없이), Helm은 설치 또는 업그레이드를 시도하지 않습니다.
  • CRD는 업그레이드 또는 롤백 시 설치되지 않습니다. Helm은 설치 작업에서만 CRD를 생성합니다.
  • CRD는 절대 삭제되지 않습니다. CRD를 삭제하면 클러스터의 모든 네임스페이스에서 해당 CRD의 모든 내용이 자동으로 삭제됩니다. 따라서 Helm은 CRD를 삭제하지 않습니다.

운영자는 CRD를 업그레이드하거나 삭제할 때 수동으로 수행하고 매우 신중하게 처리해야 합니다.

8 헬름을 사용한 차트 관리

helm 도구는 차트 작업을 위해 여러 명령어를 제공합니다.

새 차트를 생성할 수 있습니다:

$ helm create mychart
Created mychart/

차트를 편집한 후, helm을 사용하여 차트를 아카이브로 패키징할 수 있습니다:

$ helm package mychart
Archived mychart-0.1.-.tgz

또한 helm을 사용하여 차트의 형식이나 정보에 문제가 있는지 확인할 수 있습니다:

$ helm lint mychart
No issues found

9 차트 리포지토리

차트 리포지토리는 하나 이상의 패키지 차트를 보유한 HTTP 서버입니다. helm을 사용하여 로컬 차트 디렉토리를 관리할 수 있지만, 차트를 공유할 때 선호되는 메커니즘은 차트 리포지토리입니다.

YAML 파일과 tar 파일을 제공하고 GET 요청에 응답할 수 있는 모든 HTTP 서버는 리포지토리 서버로 사용될 수 있습니다. 헬름 팀은 Google Cloud Storage와 웹사이트 모드가 활성화된 S3를 포함한 일부 서버를 테스트했습니다.

리포지토리는 제공하는 모든 패키지 목록과 이러한 패키지를 검색하고 검증할 수 있는 메타데이터가 포함된 특수 파일인 index.yaml의 존재로 특징지어집니다.

클라이언트 측에서는 helm repo 명령어로 리포지토리를 관리합니다. 그러나 헬름은 원격 리포지토리 서버에 차트를 업로드하는 도구를 제공하지 않습니다. 이는 구현 서버에 상당한 요구사항을 추가하고, 리포지토리 설정의 장벽을 높일 수 있기 때문입니다.

10 차트 스타터 팩

helm create 명령어는 선택적인 --starter 옵션을 사용하여 "스타터 차트"를 지정할 수 있습니다. 또한, --starter 옵션의 짧은 별칭으로 -p를 사용할 수 있습니다.

사용 예시:

helm create my-chart --starter starter-name
helm create my-chart -p starter-name
helm create my-chart -p /absolute/path/to/starter-name

스타터는 그냥 일반 차트지만 $XDG_DATA_HOME/helm/starters에 위치합니다. 차트 개발자로서, 스타터로 사용하기 위해 특별히 설계된 차트를 작성할 수 있습니다. 이러한 차트는 다음 사항을 염두에 두고 설계되어야 합니다:

  • Chart.yaml은 생성기에 의해 덮어쓰여집니다.
  • 사용자는 그러한 차트의 내용을 수정할 것으로 예상되므로, 사용자가 이를 어떻게 수정할 수 있는지에 대한 문서를 제공해야 합니다.
  • 모든 <CHARTNAME>은 지정된 차트 이름으로 대체되어 스타터 차트를 템플릿으로 사용할 수 있습니다. 단, 일부 변수 파일에서는 제외됩니다. 예를 들어, vars 디렉토리나 특정 README.md 파일에서 사용되는 커스텀 파일에서는 <CHARTNAME>이 대체되지 않습니다. 추가적으로, 차트 설명은 상속되지 않습니다.
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}