컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

Kustomize로 Kubernetes 구성

이 문서의 목적은 Kustomize를 시작하고 의도한 사용 사례를 이해하며 다른 Google Cloud 도구와 함께 사용할 수 있는 리소스를 찾는 데 있습니다.

Kustomize는 템플릿 없는 YAML 파일을 맞춤설정하여 원래 파일을 그대로 유지하는 Kubernetes 구성 변환 도구입니다. Kustomize는 다른 표현에서 ConfigMaps 및 보안 비밀과 같은 리소스를 생성할 수도 있습니다. Kustomize는 Kubernetes API용으로 빌드되었으므로 Kubernetes 스타일 객체를 이해하고 수정할 수 있습니다.

Kustomize 정보

Google과 Kubernetes 커뮤니티에서 빌드한 Kustomize는 Kubernetes 객체를 사용하여 구성 파일을 정의하고 이러한 구성을 선언적으로 관리하는 Kubernetes 원칙에 맞게 자체 조정됩니다. Kustomize 구성 객체는 다른 Kubernetes 객체를 생성하거나 변환하는 방법을 설명하는 Kustomization이라고 합니다. Kustomization은 kustomization.yaml이라는 파일에 선언적으로 정의되며, Kustomize 자체에서 생성되고 수정될 수 있습니다.

Kustomize에서는 재사용 가능한 일반적인 Kustomization(기본이라고 함)을 정의하고 다른 여러 Kustomization(오버레이라고 함)으로 패치합니다. 변이를 생성하기 위해 기본에 정의된 설정을 선택적으로 덮어쓸 수 있습니다. 그런 다음 Kustomize는 리소스를 변환하고 생성합니다. 이 프로세스는 Kustomization 기본과 오버레이에 정의된 구성에 따라 하이드레이션 또는 렌더링이라고 합니다 이렇게 렌더링된 리소스는 표준 출력 또는 파일에 기록되고, 원본 YAML 파일은 그대로 유지됩니다. 따라서 여러 오버레이에서 기본을 재사용할 수 있습니다.

이미지

이 템플릿이 자유로운 접근 방식은 Kustomization 기본의 사용 편의성과 재사용성에서 강력합니다. 개별 사용 사례에 대해 큰 값 집합을 제공하지 않아도 Kubernetes 구성을 거의 모든 방식으로 맞춤설정할 수 있습니다.

Kustomize 이점

Kustomize를 사용하여 Kubernetes 구성을 관리하면 다음과 같은 이점이 있습니다.

  • Kustomize는 템플릿이 자유롭습니다. 템플릿 및 값 파일을 사용할 때 YAML 파일의 거의 모든 사양이 값이 필요한 매개변수가 될 수 있으며, 값 파일이 매우 커질 수 있습니다. 구성을 텍스트로 템플릿으로 지정하거나 구성을 코드로 표현하는 대신 Kustomize는 구성 데이터를 조작합니다. Kustomize로 렌더링했는지 여부와 관계없이 원시 YAML을 읽고 재사용할 수 있습니다. Kustomize 모델은 다릅니다. 모든 것을 매개변수화할 필요가 없으므로 공통 구성을 더 쉽게 재사용할 수 있습니다.

  • Kustomize는 Kubernetes 명령줄 인터페이스에서 기본적으로 실행될 수 있습니다. Kustomize는 버전 1.14부터 kubectl에 기본 제공됩니다. 따라서 kubectl을 사용하기만 하면 Kustomize를 별도의 종속 항목으로 설치하거나 관리할 필요가 없습니다.

  • Kustomize는 전적으로 선언적입니다. Kustomize는 Kubernetes 기반 도구이므로 선언적 구성에 대한 Kubernetes 접근 방식에 부합합니다. 도구에서 리소스를 맞춤설정하는 방법을 단계마다 명령적으로 설명하는 대신 원하는 것을 선언하면 Kustomize가 제공합니다.

  • Kustomize를 사용하면 동일한 기본 구성을 재사용하여 여러 구성을 관리할 수 있습니다. 여러 환경(예: 개발, 스테이징, 프로덕션)에서 하나의 기본 파일을 사용할 수 있으며 최소한의 고유 오버레이를 사용하여 각 환경에 맞게 기본을 맞춤설정할 수 있습니다.

  • Kustomize는 사용이 간편합니다. 얕은 학습 곡선이 있습니다. 아주 간단한 구성으로 시작하여 한 번에 한 레이어씩 그 위에 더 복잡한 기능을 점진적으로 빌드할 수 있습니다.

  • Kustomize는 확장 가능하고 맞춤설정이 가능합니다. Kustomize는 컨테이너화되고 실행 가능한 Kubernetes 리소스 모델(KRM) 함수 스타일로 자체 생성기 및 변환기를 작성할 수 있는 플러그인 프레임워크를 지원합니다. 자체 플러그인을 만드는 방법에 대해 자세히 알아보려면 공식 Kustomize 플러그인 가이드를 참조하세요.

로컬 설치

로컬 환경에 Kustomize를 설치하려면 다음 명령어를 실행합니다.

gcloud components install kustomize

Google Cloud에서의 Kustomize 지원

Kustomize는 Cloud Shell에 사전 설치되어 있으며 Skaffold에서 지원됩니다. Cloud Build용 빌더로도 지원됩니다.

구성 동기화는 저장소에 kustomization 파일이 포함된 경우 Kustomize를 사용하여 저장소의 리소스를 렌더링합니다. 이 기능에 대한 자세한 내용은 Kustomize 구성 및 Helm 차트에서 저장소 사용을 참조하세요.

Kustomize 이해

기본 및 오버레이

Kustomize의 구성 변환 접근 방식은 Kustomization 레이어 사용을 활용하므로 동일한 기본 구성 파일을 여러 Kustomization 구성에서 재사용할 수 있습니다. 이를 위해 기본오버레이 개념이 사용됩니다.

  • 기본kustomization.yaml이라는 파일이 포함된 디렉터리로, 적용될 일부 맞춤설정이 포함된 리소스 집합을 열거할 수 있습니다. 기본은 Kustomization 파일의 resources 필드에서 선언되어야 합니다.
  • 오버레이는 다른 Kustomization 디렉터리를 기반으로 또는 기본 디렉터리 중 하나로 참조하는 디렉터리입니다.

기본은 참조되는 오버레이에 대한 지식이 없는 파이프라인의 예비 단계로 간주될 수 있습니다. 기본은 처리를 완료한 후 오버레이의 사양에 따라 변환하기 위해 오버레이에 대한 입력으로 리소스를 전송합니다.

다음은 Kustomization 기본의 예시입니다.

# base/kustomization.yaml
resources:
- deployment.yaml
namePrefix: bar-
#base/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  template:
    metadata:
    spec:
      containers:
      - image: nginx
        name: nginx

이 기본은 여러 Kustomization 오버레이에서 재사용할 수 있습니다. 다음은 이 기본을 참조할 수 있는 오버레이의 예시입니다.

# overlay/kustomization.yaml
resources:
- ../base
- configmap.yaml
namePrefix: foo-
#overlay/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: cm
data:
  red: blue

kustomize build overlay 명령어를 실행하면 다음과 같은 출력이 생성됩니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: foo-bar-nginx
spec:
  template:
    metadata:
    spec:
      containers:
      - image: nginx
        name: nginx
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: foo-cm
data:
  red: blue

배포는 기본 Kustomization에서 이름 프리픽스 bar-를 수신한 다음 오버레이 Kustomization에서 또 다른 이름 프리픽스 foo-를 수신했습니다. ConfigMap은 오버레이에서 선언되었기 때문에 이름 프리픽스 foo-만 수신했으며 오버레이에서만 처리되었습니다.

보안 비밀 및 ConfigMap 생성

Kustomization 파일에서 secretGenerator 또는 configMapGenerator 필드를 사용하여 파일에서 보안 비밀 및 ConfigMap을 생성할 수 있습니다. 예를 들면 다음과 같습니다.

# kustomization.yaml
configMapGenerator:
- name: my-app
  files:
  -.properties

다음 YAML 출력을 생성합니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-app-g82klmn92h
data:
  .properties: |-
      red=blue

Kustomization 파일 수정

Kustomize는 Kustomization 파일을 관리하는 데 도움이 되는 몇 가지 명령형 명령어를 제공합니다.

  • 현재 디렉터리의 모든 YAML 파일을 Kustomization의 resources 필드에 추가하려면 다음 명령어를 실행합니다.

    kustomize edit add resource *.yaml
    
  • Kustomize 수정 도움말 페이지를 보고 제공되는 모든 하위 명령어를 보려면 다음 명령어를 실행합니다.

    kustomize edit -h
    
  • 하위 명령어에 대한 특정 도움말을 보려면 하위 명령어를 인수로 추가합니다. 예를 들면 다음과 같습니다.

    kustomize edit add -h
    

다음 단계

공식 문서

kustomization.yaml 파일에서 지원되는 필드에 대한 자세한 내용은 공식 Kustomize 문서를 참조하세요. 이 문서에서는 사용할 수 있는 다양한 필드에 대한 설명과 예시를 제공합니다.

지원되지 않는 기능

Kustomize에서 의도적으로 지원되지 않는 기능 목록은 Kustomize의 삼가는 기능을 참조하세요.