Helm 차트 편집하기

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.

편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.

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


===<code>apiVersion</code> 필드===
===apiVersion 필드===
Helm 3 이상이 필요한 Helm 차트의 경우 <code>apiVersion</code> 필드는 <code>v2</code>여야 합니다. 이전 Helm 버전을 지원하는 차트는 <code>apiVersion</code>이 <code>v1</code>로 세팅되어 있으며, 여전히 Helm 3으로 설치가능합니다.
===appVersion 필드===
 
===kubeVersion 필드===
<code>v1</code>에서 <code>v2</code>로의 변경사항:
 
* 차트 의존성을 정의하는 <code>dependencies</code> 필드가 추가되었습니다. <code>v1</code> 차트에서는 이 필드가 별도의 <code>requirements.yaml</code> 파일에 있었습니다([[#차트 의존성|차트 의존성]] 참조).
* 차트 유형을 구분하는 <code>type</code> 필드가 추가되었습니다. 이를 통해 애플리케이션 차트와 라이브러리 차트를 구별할 수 있습니다([[#차트 유형|차트 유형]] 참조).
 
===<code>appVersion</code> 필드===
<code>appVersion</code> 필드는 <code>version</code> 필드와 관련이 없습니다. 이 필드는 애플리케이션의 버전을 지정하는 방법입니다. 예를 들어, <code>drupal</code> 차트는 <code>appVersion: "8.2.1"</code>을 가질 수 있으며, 이는 기본적으로 포함된 Drupal 버전이 <code>8.2.1</code>임을 나타냅니다. 이 필드는 정보 제공용이며 차트 버전 계산에는 영향을 미치지 않습니다. 버전을 따옴표로 묶는 것이 매우 권장됩니다. 이는 YAML 파서가 버전 번호를 문자열로 처리하도록 강제합니다. 따옴표 없이 두면 일부 경우에 파싱 문제가 발생할 수 있습니다. 예를 들어, YAML은 <code>1.0</code>을 부동 소수점 값으로 해석하고, <code>1234e10</code> 같은 git 커밋 SHA를 과학적 표기법으로 해석합니다.
 
Helm v3.5.0부터 <code>helm create</code> 명령어는 기본적으로 <code>appVersion</code> 필드를 따옴표로 묶습니다.
 
===<code>kubeVersion</code> 필드===
선택적인 <code>kubeVersion</code> 필드는 지원되는 Kubernetes 버전에 대한 semver 제약조건을 정의할 수 있습니다. Helm은 차트를 설치할 때 버전 제약조건을 확인하고 클러스터가 지원되지 않는 Kubernetes 버전을 실행하는 경우 실패합니다.
 
버전 제약조건은 다음과 같이 공백으로 구분된 AND 비교로 구성될 수 있습니다.
 
<syntaxhighlight lang='text'>
>= 1.13.0 < 1.15.0
</syntaxhighlight>
 
이 비교는 OR <code>||</code> 연산자로 결합될 수 있습니다. 예를 들어
 
<syntaxhighlight lang='text'>
>= 1.13.0 < 1.14.0 || >= 1.14.1 < 1.15.0
</syntaxhighlight>
 
이 예시에서는 <code>1.14.0</code> 버전이 제외되는데, 이는 특정 버전의 버그로 인해 차트가 제대로 실행되지 않는 경우 유용할 수 있습니다.
 
<code>=</code>, <code>!=</code>, <code>></code>, <code><</code>, <code>>=</code>, <code><=</code> 연산자를 사용하는 버전 제약조건 외에도 다음과 같은 축약 표기법이 지원됩니다:
 
* 폐쇄 구간에 대한 하이픈 범위: <code>1.1 - 2.3.4</code>는 <code>>= 1.1 <= 2.3.4</code>와 동등합니다.
* 와일드카드 <code>x</code>, <code>X</code>, <code>*</code>: <code>1.2.x</code>는 <code>>= 1.2.0 < 1.3.0</code>와 동등합니다.
* 틸드 범위 (패치 버전 변경 허용): <code>~1.2.3</code>는 <code>>= 1.2.3 < 1.3.0</code>와 동등합니다.
* 캐럿 범위 (마이너 버전 변경 허용): <code>^1.2.3</code>는 <code>>= 1.2.3 < 2.0.0</code>와 동등합니다.
 
지원되는 semver 제약조건에 대한 자세한 설명은 [https://github.com/Masterminds/semver Masterminds/semver]를 참조하십시오.
 
===차트 지원중단===
===차트 지원중단===
차트 리포지토리에서 차트를 관리할 때, 때로는 차트를 지원중단해야 할 필요가 있습니다. <code>Chart.yaml</code>의 선택적 필드인 <code>deprecated</code>를 사용하여 차트를 지원중단 상태로 표시할 수 있습니다. 리포지토리 내의 최신 버전의 차트가 지원중단된 것으로 표시되면, 해당 차트는 전체적으로 지원중단된 것으로 간주됩니다. 이후에 지원중단 상태로 표시되지 않은 최신 버전을 게시함으로써 차트 이름을 다시 사용할 수 있습니다. 차트를 지원중단하는 워크플로우는 다음과 같습니다:
* 1. 차트의 <code>Chart.yaml</code>을 업데이트하여 차트를 지원중단 상태로 표시하고, 버전을 올립니다.
* 2. 새 차트 버전을 차트 리포지토리에 릴리스합니다.
* 3. 소스 리포지토리(예: git)에서 차트를 제거합니다.
===차트 유형===
===차트 유형===
<code>type</code> 필드는 차트의 유형을 정의합니다. <code>application</code>과 <code>library</code>의 두 가지 유형이 있습니다. 애플리케이션이 기본 유형이며, 이는 완전히 조작할 수 있는 표준 차트입니다. [[라이브러리 차트]]는 차트 빌더에 유틸리티나 함수를 제공합니다. 라이브러리 차트는 설치할 수 없으며 일반적으로 리소스 객체를 포함하지 않는다는 점에서 애플리케이션 차트와 다릅니다.
참고: 애플리케이션 차트는 라이브러리 차트로 사용할 수 있습니다. type을 <code>library</code>로 세팅하면 이 차트는 라이브러리 차트로 렌더링되어 모든 유틸리티와 함수를 활용할 수 있습니다. 차트의 모든 리소스 객체는 렌더링되지 않습니다.


==차트 LICENSE, README, NOTES==
==차트 LICENSE, README, NOTES==
315번째 줄: 270번째 줄:
====전역 Values====
====전역 Values====
===스키마 파일===
===스키마 파일===
때로는 차트 유지관리자가 값(values)에 구조를 정의하고 싶어할 수 있습니다. 이는 <code>values.schema.json</code> 파일에 스키마를 정의하여 수행할 수 있습니다. 스키마는 [https://json-schema.org/ JSON Schema]로 표현되며, 다음과 같이 생겼습니다:
<syntaxhighlight lang='json'>
{
  "$schema": "https://json-schema.org/draft-07/schema#",
  "properties": {
    "image": {
      "description": "Container Image",
      "properties": {
        "repo": {
          "type": "string"
        },
        "tag": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "name": {
      "description": "Service name",
      "type": "string"
    },
    "port": {
      "description": "Port",
      "minimum": 0,
      "type": "integer"
    },
    "protocol": {
      "type": "string"
    }
  },
  "required": [
    "protocol",
    "port"
  ],
  "title": "Values",
  "type": "object"
}
</syntaxhighlight>
이 스키마는 값(values)을 검증하기 위해 적용됩니다. 다음 명령어들이 실행될 때 검증이 이루어집니다:
* <code>helm install</code>
* <code>helm upgrade</code>
* <code>helm lint</code>
* <code>helm template</code>
이 스키마 요구사항을 충족하는 <code>values.yaml</code> 파일 예시는 다음과 같습니다:
<syntaxhighlight lang='yaml'>
name: frontend
protocol: https
port: 443
</syntaxhighlight>
스키마는 최종 <code>.Values</code> 객체에 적용되며, 단순히 <code>values.yaml</code> 파일에만 적용되는 것은 아닙니다. 이는 아래와 같이 <code>--set</code> 옵션을 사용하여 차트를 설치하면 다음 <code>yaml</code> 파일이 유효함을 의미합니다.
<syntaxhighlight lang='yaml'>
name: frontend
protocol: https
</syntaxhighlight>
<syntaxhighlight lang='bash'>
helm install --set port=443
</syntaxhighlight>
또한, 최종 <code>.Values</code> 객체는 모든 하위 차트 스키마에 대해 검증됩니다. 이는 상위 차트에서 하위 차트의 제한을 회피할 수 없음을 의미합니다. 이 역방향도 마찬가지로 작동합니다. 하위 차트의 <code>values.yaml</code> 파일에서 요구사항이 충족되지 않은 경우, 상위 차트는 유효하기 위해 해당 제약사항을 만족해야 합니다.
===참고자료===
===참고자료===
템플릿 작성, 값 설정, 스키마 파일 작업에 있어 도움이 되는 여러 표준 참고 자료가 있습니다.
* [https://godoc.org/text/template Go 템플릿]
* [https://godoc.org/github.com/Masterminds/sprig 부가 템플릿 함수]
* [https://yaml.org/spec/ YAML 형식]
* [https://json-schema.org/ JSON 스키마]
==커스텀 리소스 정의(CRD)==
==커스텀 리소스 정의(CRD)==
Kubernetes는 새로운 유형의 Kubernetes 객체를 선언할 수 있는 메커니즘을 제공합니다. CustomResourceDefinitions(CRD)를 사용하여 Kubernetes 개발자는 커스텀 리소스 타입을 선언할 수 있습니다.
Kubernetes는 새로운 유형의 Kubernetes 객체를 선언할 수 있는 메커니즘을 제공합니다. CustomResourceDefinitions(CRD)를 사용하여 Kubernetes 개발자는 커스텀 리소스 타입을 선언할 수 있습니다.

제타위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 제타위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 편집 도움말 (새 창에서 열림)

이 문서에서 사용한 틀: