Kustomize 구성 및 Helm 차트에 저장소 사용

구성 동기화를 사용할 때는 Git 저장소에 배치하는 Kustomize 구성 및 Helm 차트가 자동으로 렌더링됩니다. 자동화된 렌더링은 다음과 같은 이점을 제공합니다.

  • 더 이상 외부 하이드레이션 파이프라인이 필요하지 않습니다. 자동화된 렌더링을 사용하지 않으면 워크스테이션에서 Kustomize 및 Helm을 사용하여 구성을 수동으로 렌더링하거나 CI 시스템에서 하이드레이션 프로세스를 트리거하는 단계를 설정해야 합니다. 자동화된 렌더링을 사용하면 구성 동기화가 이 작업 실행을 처리합니다.

  • 유지보수 비용이 줄어듭니다. 자동화된 렌더링을 사용하지 않으면, 하나의 Git 저장소를 원본 Kustomize 구성 및 Helm 차트를 사용하여 유지보수하고 다른 Git 저장소는 외부 하이드레이션으로 생성된 출력을 사용해서 유지보수해야 합니다. 그런 후 렌더링된 출력을 사용해서 Git 저장소로부터 동기화하도록 구성 동기화를 구성해야 합니다. 자동 렌더링을 사용하면 원본 구성을 사용하여 하나의 저장소만 유지보수하면 됩니다.

  • 개발 워크플로가 간소화됩니다. 자동화된 렌더링을 사용하지 않으면 원본 구성에 변경된 항목을 병합하기 전 원본 저장소에서 한 번 그리고 렌더링된 저장소에서 한 번, 총 두 번 검토해야 합니다. 자동 렌더링을 사용하면 렌더링된 구성이 구성 동기화에서 생성되며, 원본 구성에 대한 변경 사항만 검토하면 됩니다.

요구사항

Kustomize 구성 및 Helm 차트를 자동으로 렌더링하려면 해당 환경이 다음 요구사항을 충족하는지 확인합니다.

  • Anthos Config Management 버전 1.9.0 이상을 포함합니다. 필요한 경우 Anthos Config Management를 업그레이드합니다.
  • 다중 저장소 모드가 사용 설정되었습니다. Google Cloud Console 또는 gcloud 명령줄 도구를 사용하여 구성 동기화를 설치한 경우 다중 저장소 모드가 기본적으로 버전 1.7.0 이상으로 사용 설정됩니다.
  • 렌더링 프로세스를 트리거하려면 Git 저장소의 Git 디렉터리의 루트에 Kustomization 구성 파일(kustomization.yaml, kustomization.yml, Kustomization)이 있어야 합니다. 루트 디렉터리에 Kustomization 구성 파일이 없으면 구성 동기화가 렌더링 없이 있는 그대로 구성을 동기화합니다.
  • kustomization.yaml에 구성을 포함합니다. 이러한 구성 파일을 포함하지 않으면 구성이 클러스터에 동기화되지 않습니다.

Kustomize 구성의 저장소 아키텍처 예시

다음 예시 저장소는 자동 렌더링과 함께 Kustomize 구성을 사용하도록 저장소를 설정하는 방법을 보여줍니다. 이 저장소에는 동일한 기본 항목을 참조하는 3개의 오버레이(team-a, team-b, team-c)가 포함되어 있습니다.

다음 다이어그램은 디렉터리 구조를 보여줍니다.

├── base
│   ├── kustomization.yaml
│   ├── namespace.yaml
│   ├── networkpolicy.yaml
│   ├── rolebinding.yaml
│   └── role.yaml
├── kustomization.yaml
├── README.md
├── team-a
│   └── kustomization.yaml
├── team-b
│   └── kustomization.yaml
└── team-c
    └── kustomization.yaml

다음 kustomization.yaml 파일은 저장소의 루트에 있으며 3개 오버레이의 참조를 포함합니다.

# ./kustomization.yaml
resources:
- team-a
- team-b
- team-c

다음 kustomize.yamlteam-a 디렉터리에 있으며 team-a의 오버레이입니다.

# ./team-a/kustomization.yaml
namespace: team-a

resources:
- ../base

patches:
- target:
   kind: RoleBinding
   name: team-admin-rolebinding
 patch: |-
   - op: replace
     path: /subjects/0/name
     value: team-a-admin@mydomain.com
- target:
   kind: Namespace
   name: default
 patch: |-
   - op: replace
     path: /metadata/name
     value: team-a

다음 kustomization.yamlbase 디렉터리에 있으며 Kustomize 기본 항목입니다.

# ./base/kustomization.yaml
resources:
- namespace.yaml
- rolebinding.yaml
- role.yaml
- networkpolicy.yaml

Anthos Config Management 샘플 저장소의 네임스페이스 관련 정책 디렉터리 구성에서 이 저장소를 탐색할 수 있습니다.

Helm 차트 자동 렌더링

kustomization.yaml 파일에서 helmGlobalshelmCharts 필드를 사용하여 Helm 차트를 자동으로 렌더링할 수 있습니다.

Helm 차트 필드

구성 동기화는 kustomization.yaml 파일에 대한 다음 필드 추가를 지원합니다.

필드 설명
helmGlobals 모든 Helm 차트에 적용되는 매개변수
helmGlobals.chartHome 문자열을 허용합니다. Kustomization 루트에 상대되는 Kustomization에 포함할 각 차트의 하위 디렉터리가 포함된 디렉터리에 대한 파일 경로입니다. 이 필드의 기본값은 charts입니다.
helmGlobals.configHome 문자열을 허용합니다. Kustomize가 HELM_CONFIG_HOME 환경 변수로 Helm으로 전달할 값을 정의합니다. Kustomize는 이 디렉터리에 대해 읽기 또는 쓰기를 시도하지 않습니다. 생략하면 TMP_DIR/helm이 사용됩니다. 여기서 TMP_DIR은 Helm에 대해 Kustomize에서 생성된 임시 디렉터리입니다.
helmCharts Helm 차트 매개변수의 배열
helmCharts.name 문자열을 허용합니다. 차트 이름입니다. 필수 필드입니다.
helmCharts.version 문자열을 허용합니다. 차트 버전
helmCharts.repo 문자열을 허용합니다. 차트를 찾는 데 사용되는 URL
helmCharts.releaseName 문자열을 허용합니다. 차트 템플릿 출력에서 RELEASE_NAME을 바꿉니다.
helmCharts.namespace 문자열을 허용합니다. 출시의 대상 네임스페이스를 설정합니다(템플릿의 .Release.Namespace).
helmCharts.valuesInline 차트에 포함되는 기본값 대신 사용할 값
helmCharts.valuesFile 문자열을 허용합니다. ValuesFile은 차트에 포함된 기본값 대신 사용할 값 파일에 대한 로컬 파일 경로 또는 원격 URL입니다. 기본값은 CHART_HOME/NAME/values.yaml에 있습니다.
helmCharts.valuesMerge merge, override, (default), replace를 허용합니다. ValuesMerge는 값에 따라 ValuesInline 처리 방법을 지정합니다.
helmCharts.includeCRDs true 또는 false를 허용합니다. Helm이 CustomResourceDefinitions도 생성해야 하는지 여부를 지정합니다. 기본값은 false입니다.

Helm 차트 예시

다음 섹션의 예시에서는 Helm 차트를 사용할 수 있는 여러 방법들을 보여줍니다.

원격 Helm 차트 렌더링

구성 동기화는 공개 인터넷 액세스가 권한이 있는 클러스터에서 원격 Helm 차트를 렌더링하도록 지원합니다.

다음 kustomization.yaml은 다음 helmCharts 필드를 설정하여 원격 e cert-manager를 렌더링합니다.

# ./kustomizaiton.yaml
...
helmCharts:
- name: cert-manager
  repo: https://charts.jetstack.io
  version: v1.5.3
  releaseName: my-cert-manager
  namespace: cert-manager
...

로컬 Helm 차트 렌더링

구성 동기화는 로컬 Helm 차트 렌더링을 지원합니다. Helm 차트의 맞춤설정된 버전을 사용하려면 Helm 차트 저장소(예: ArtifactHub)에서 출시 버전을 가져오고, 항목을 로컬로 변경한 후 변경사항을 저장소에 푸시합니다.

다음 kustomization.yaml은 로컬 cert-manager 차트를 렌더링합니다. Helm 차트의 기본 디렉터리는 charts이고, 이 차트가 charts 디렉터리에 체크인되기 때문에 .helmCharts.repo 또는 .helmCharts.version을 지정할 필요가 없습니다.

# ./kustomizaiton.yaml
...
helmCharts:
- name: cert-manager
  releaseName: my-cert-manager
  namespace: cert-manager
...

여러 Helm 차트 렌더링

구성 동기화는 차트가 원격 또는 로컬인지 여부에 관계없이 하나의 kustomiztion.yaml 파일에서 여러 Helm 차트 렌더링을 지원합니다.

다음 kustomization.yaml은 로컬 Helm 차트(cert-manager)를 렌더링합니다.

# ./kustomizaiton.yaml
...
helmCharts:
- name: cert-manager
  releaseName: my-cert-manager
  namespace: cert-manager
- name: prometheus
  repo: https://prometheus-community.github.io/helm-charts
  version: 14.3.0
  releaseName: my-prometheus
  namespace: monitoring
...

예시 형식

다음 예시에서는 다음 방법을 보여줍니다.

helmGlobals:
  chartHome: string
  configHome: string
helmCharts:
- name: string
  version: string
  repo: string
  releaseName: string
  namespace: string
  valuesInline: map[string]interface{}
  valuesFile: string
  valuesMerge: string
  includeCRDs: bool

다음 단계