-
[Helm] 토픽 - Chart.yaml공부/쿠버네티스&헬름 2025. 3. 3. 23:56
차트 파일 구조
Helm 차트는 특정 구조를 가진 디렉토리 내 파일들의 집합으로 구성됩니다. 이 디렉토리 구조는 Helm이 차트를 올바르게 인식하고 처리하는 데 필수적입니다. 다음은 Helm 차트 디렉토리 구조에 대한 설명입니다.
디렉토리 이름은 차트의 이름과 동일해야 합니다. 예를 들어, WordPress 차트는
wordpress/
디렉토리에 위치합니다. 버전 정보는 디렉토리 이름에 포함되지 않습니다.wordpress/ Chart.yaml # A YAML file containing information about the chart LICENSE # OPTIONAL: A plain text file containing the license for the chart README.md # OPTIONAL: A human-readable README file values.yaml # The default configuration values for this chart values.schema.json # OPTIONAL: A JSON Schema for imposing a structure on the values.yaml file charts/ # A directory containing any charts upon which this chart depends. crds/ # Custom Resource Definitions templates/ # A directory of templates that, when combined with values, # will generate valid Kubernetes manifest files. templates/NOTES.txt # OPTIONAL: A plain text file containing short usage notes
Chart.yaml
: 차트의 메타데이터를 정의하는 필수 파일입니다. 차트 이름, 버전, 설명 등의 정보를 포함합니다.values.yaml
: 차트의 기본 설정 값을 정의하는 파일입니다. 사용자는 이 파일을 수정하여 차트의 동작을 사용자 정의할 수 있습니다.templates/
: 쿠버네티스 리소스 정의 템플릿 파일들을 포함하는 디렉토리입니다. Go 템플릿 언어를 사용하여 동적으로 리소스 정의를 생성합니다.
Chart.yaml 파일
Chart.yaml
차트에 필요한 파일로 다음 필드가 포함되어 있습니다.apiVersion: The chart API version (required) name: The name of the chart (required) version: A SemVer 2 version (required) kubeVersion: A SemVer range of compatible Kubernetes versions (optional) description: A single-sentence description of this project (optional) type: The type of the chart (optional) keywords: - A list of keywords about this project (optional) home: The URL of this projects home page (optional) sources: - A list of URLs to source code for this project (optional) dependencies: # A list of the chart requirements (optional) - name: The name of the chart (nginx) version: The version of the chart ("1.2.3") repository: (optional) The repository URL ("https://example.com/charts") or alias ("@repo-name") condition: (optional) A yaml path that resolves to a boolean, used for enabling/disabling charts (e.g. subchart1.enabled ) tags: # (optional) - Tags can be used to group charts for enabling/disabling together import-values: # (optional) - ImportValues holds the mapping of source values to parent key to be imported. Each item can be a string or pair of child/parent sublist items. alias: (optional) Alias to be used for the chart. Useful when you have to add the same chart multiple times maintainers: # (optional) - name: The maintainers name (required for each maintainer) email: The maintainers email (optional for each maintainer) url: A URL for the maintainer (optional for each maintainer) icon: A URL to an SVG or PNG image to be used as an icon (optional). appVersion: The version of the app that this contains (optional). Needn't be SemVer. Quotes recommended. deprecated: Whether this chart is deprecated (optional, boolean) annotations: example: A list of annotations keyed by name (optional).
Helm v3.3.2부터는
Chart.yaml
파일에 추가 필드를 허용하지 않습니다. 사용자 정의 메타데이터를 추가하려면annotations
필드를 사용해야 합니다.차트 버전 관리
모든 Helm 차트는 버전 번호를 가져야 하며, SemVer 2 표준을 따라야 합니다. Helm v2 이상에서는 릴리스 마커로 버전 번호를 사용합니다. 저장소의 패키지는 이름과 버전으로 식별되며 예를 들면
nginx-1.2.3.tgz
형식입니다.더 복잡한 SemVer2 이름도 지원합니다. (예:
version: 1.2.3-alpha.1+ef365
) 그러나 SemVer 표준을 따르지 않는 이름은 허용되지 않습니다. Helm v2 이상은 GitHub 또는 Git에 의존하지 않으며 버전 관리에 Git SHA를 사용하지 않습니다.Chart.yaml
파일의version
필드는 Helm 도구에서 사용됩니다.helm package
명령은Chart.yaml
에서 찾은 버전을 패키지 이름의 토큰으로 사용합니다. 차트 패키지 이름의 버전 번호는Chart.yaml
의 버전 번호와 일치해야 하며, 그렇지 않으면 오류가 발생합니다.apiVersion (필수)
차트 API 버전입니다. Helm이 차트를 해석하는 데 사용되는 API 버전을 지정합니다.
apiVersion: v2
name (필수)
차트의 이름입니다. 차트 디렉토리 이름과 동일해야 합니다.
name: my-app
version (필수)
차트의 버전입니다. SemVer 2 표준을 따라야 합니다.
version: 1.2.3
kubeVersion (선택 사항)
호환되는 쿠버네티스 버전의 SemVer 범위입니다. 차트가 특정 쿠버네티스 버전에서만 작동하는 경우에 사용합니다.
kubeVersion: ">= 1.16.0-0 < 1.20.0-0"
description (선택 사항)
차트에 대한 간략한 설명입니다. 한 문장으로 작성하는 것이 좋습니다.
description: "A Helm chart for deploying my application"
type (선택 사항)
차트의 유형입니다. 일반적으로
application
또는library
를 사용합니다.type: application
라이브러리 차트 (Library Chart)
라이브러리 차트는 독립적으로 배포되는 애플리케이션이 아니라 다른 차트에서 재사용되는 구성 요소 또는 기능을 제공하는 차트입니다. 일반적으로 데이터베이스 연결, 로깅, 모니터링 등 공통 기능을 제공하며 애플리케이션 차트의 의존성으로 사용됩니다. 라이브러리 차트는 자체적으로 릴리스를 생성하지 않으며 애플리케이션 차트의 일부로 포함되어 설치됩니다.
- 데이터베이스 연결 설정, 로깅 설정, 모니터링 설정 등 공통 기능을 제공하는 차트
- 여러 애플리케이션에서 공통으로 사용되는 쿠버네티스 리소스 정의를 제공하는 차트
- 예를 들어 mysql, redis 와 같은 데이터베이스 차트
애플리케이션 차트 (Application Chart)
애플리케이션 차트는 독립적으로 배포되는 애플리케이션을 설치하고 관리하는 데 사용되는 차트입니다. 웹 애플리케이션, 데이터베이스, 메시지 큐 등 다양한 애플리케이션을 쿠버네티스 클러스터에 배포하는 데 사용됩니다. 애플리케이션 차트는 자체적으로 릴리스를 생성하며, 독립적으로 설치 및 관리될 수 있습니다.
- 웹 애플리케이션 (예: WordPress, Nginx) 배포
- 데이터베이스 (예: MySQL, PostgreSQL) 배포
- 메시지 큐 (예: RabbitMQ, Kafka) 배포
- 예를 들어 워드프레스, 젠킨스 와 같은 어플리케이션 차트
keywords (선택 사항)
차트에 대한 키워드 목록입니다. 검색 및 분류에 사용됩니다.
keywords: - web - application - my-app
home (선택 사항)
프로젝트 홈페이지의 URL입니다.
home: "https://example.com/my-app"
sources (선택 사항)
프로젝트 소스 코드의 URL 목록입니다.
sources: - "https://github.com/example/my-app" - "https://bitbucket.org/example/my-app"
dependencies (선택 사항)
차트의 의존성 목록입니다. 다른 차트를 포함하거나 의존하는 경우에 사용합니다.
dependencies: - name: nginx version: "1.2.3" repository: "https://charts.bitnami.com/bitnami" condition: nginx.enabled tags: - frontend import-values: - config alias: webserver
name
: 의존성 차트의 이름version
: 의존성 차트의 버전repository
: 의존성 차트의 저장소 URL 또는 별칭condition
: 차트를 활성화/비활성화하는 데 사용되는 boolean 값으로 확인되는 yaml 경로tags
: 차트를 함께 활성화/비활성화하기 위해 그룹화하는 데 사용할 수 있음import-values
: 소스 값을 가져와 부모 키로 가져오는 매핑을 유지하며 각 항목은 문자열 또는 자식/부모 하위 목록 항목 쌍일 수 있음alias
: 차트에 사용할 별칭이며 동일한 차트를 여러 번 추가해야 할 때 유용
위처럼 dependencies를 정의한 다음,
helm dependency update
를 실행하면Chart.yaml
파일에 명시된 모든 의존성 차트가charts/
디렉토리에 다운로드됩니다.alias
를 정의하지 않으면, 의존성 차트는charts/
디렉토리 아래에 원래 차트 이름으로 다운로드됩니다.charts/ nginx-1.2.3.tgz
alias
를 정의하면, 의존성 차트는charts/
디렉토리 아래에 정의된alias
이름으로 다운로드됩니다.charts/ webserver/ 압축해제되어저장
maintainers (선택 사항)
차트 유지 관리자 목록입니다.
maintainers: - name: John Doe email: john.doe@example.com url: "https://example.com/john"
icon (선택 사항)
아이콘으로 사용할 SVG 또는 PNG 이미지의 URL입니다.
icon: "https://example.com/icon.png"
appVersion (선택 사항)
차트에 포함된 애플리케이션의 버전입니다. SemVer일 필요는 없습니다. 따옴표를 사용하는 것이 좋습니다.
appVersion: "1.1"
deprecated (선택 사항)
차트가 더 이상 사용되지 않는지 여부를 나타내는 boolean 값입니다.
deprecated: true
annotations (선택 사항)
이름으로 키가 지정된 주석 목록입니다. 사용자 정의 메타데이터를 추가하는 데 사용됩니다.
annotations: example: "This is an example annotation" another: "Another example"
레퍼런스