copyright: years: 2023, 2025 lastupdated: "2025-01-29"
keywords: IBM Cloud Kubernetes Service, node.js, js, java, .net, go, flask, react, python, swift, rails, ruby, spring boot, angular
subcollection: containers
여러 환경에서 재사용할 수 있도록 Kustomize를 사용하여 앱 패키징
12가지 요소의 일부로서, 클라우드 네이티브 앱은 공통의 버전 관리 코드 기반 소스를 사용하는 지속적인 개발 및 전달 파이프라인을 설정하여 코드 기반의 패리티( dev-to-prod
)를 유지하고자 합니다. 코드 베이스 저장소에는 YAML 형식의 Kubernetes 리소스 구성 매니페스트
파일이 저장되어 있습니다. Kubernetes 프로젝트를 사용할 수 있습니다 Kustomize 여러 환경에 배포를 표준화하고 맞춤화할 수 있습니다.
kustomization
예를 들어, 개발, 테스트, 생산 환경에서 공유되는 배포와 PVC와 같은 Kubernetes 객체를 선언하는 기본 YAML 파일을 설정할 수 있습니다. 다음으로, 프로덕션 환경에서 테스트 환경보다 더 많은 복제본을 사용하는 등 각 환경에 맞게 설정한 별도의 YAML 파일( kustomization
)을 설정할 수 있습니다. 그런 다음, 이 사용자 정의 YAML
파일은 공유된 기본 YAML 파일을 오버레이하거나 그 위에 구축할 수 있으므로, 소스 제어를 통해 몇 가지 오버레이 구성 차이점을 제외하고는 대부분 동일한 환경을 관리할 수 있습니다. Kustomize 에 대한 자세한 정보(용어집, 자주 묻는 질문 등)는 Kustomize docs를 참조하세요.
시작하기 전에:
kubectl
버전이 클러스터 버전과 일치하는지 확인하십시오.- 계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.
Kustomize를 사용하여 구성 파일을 설정하려면 다음을 수행하십시오.
-
- macOS의 경우에는
brew
패키지 관리자를 사용할 수 있습니다.brew install kustomize
- Windows의 경우에는
chocolatey
패키지 관리자를 사용할 수 있습니다.choco install kustomize
- macOS의 경우에는
-
Git과 같은 버전 제어 시스템에 앱의 디렉토리를 작성하십시오.
git init ~/<my_app>
-
kustomize
를 위한 저장소 구조를 만드세요base
디렉토리,overlay
디렉토리, 스테이징 및 프로덕션과 같은 환경 디렉토리. 후속 단계에서는kustomize
와 함께 사용하기 위해 이러한 저장소를 설정합니다.mkdir -p ~/<my_app>/base && mkdir -p ~/<my_app>/overlay && mkdir -p ~/<my_app>/overlay/staging && mkdir -p ~/<my_app>/overlay/prod
리포지토리 구조 예제
. ├── base └── overlay ├── prod └── staging
-
base
저장소를 설정하십시오.-
base 저장소로 이동하십시오.
cd ~/<my_app>/base
-
앱 배치를 위한 초기 Kubernetes 구성 YAML 파일 세트를 작성하십시오.
wasliberty
YAML 예를 사용하여 배치, 서비스, ConfigMap 및 지속적 볼륨 클레임을 작성할 수 있습니다. -
환경 전반에 적용될 기본 구성을 지정하는
kustomization
파일을 만듭니다.kustomization
파일은 동일한base
저장소에 저장되는 Kubernetes 리소스 구성 YAML을 포함해야 합니다.kustomization
파일에서는 base 저장소의 모든 리소스 YAML에 적용되는 구성(모든 리소스 이름에 추가되는 접두부 또는 접미부, 레이블, 모든 리소스가 작성되는 기존 네임스페이스, Secret, ConfigMap 등) 또한 추가할 수 있습니다.apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: wasliberty namePrefix: kustomtest- nameSuffix: -v2 commonLabels: app: kustomized-wasliberty resources: - deployment.yaml - service.yaml - pvc.yaml - configmap.yaml - secret.yaml
resources
YAML의 이름은base
저장소에 있는 다른 파일의 이름과 일치해야 합니다. 이름이 동일한 여러 구성을 포함시킬 수도 있지만, 이 예의 구성은deployment.yaml
,service.yaml
,pvc.yaml
과 같은 별도의 파일입니다. -
kustomization
기본 YAML 파일에 정의한 구성으로 리소스 YAML 파일을 빌드하십시오. 리소스는kustomization
과 리소스 YAML의 구성을 결합하여 빌드됩니다. 결합된 YAML 파일은 출력의stdout
에 리턴됩니다. 레이블을 추가하는 것과 같이kustomization
YAML에 수행하는 후속 변경사항을 빌드하는 경우에는 이와 동일한 명령을 사용하십시오.kustomize build
-
-
각 환경(staging 및 prod 등)에 대해 고유
kustomization
YAML 파일이 있는 overlay 저장소를 설정하십시오.-
staging 저장소에서
kustomization.yaml
파일을 작성하십시오. 테스트할 새 컴포넌트의 레이블, 이미지 태그 또는 YAML과 같이 staging에 고유한 구성을 추가하십시오.apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namePrefix: staging- commonLabels: env: staging owner: TeamA bases: - ../../base patchesStrategicMerge: - configmap.yaml - new_staging_resource.yaml resources: - new_staging_resource.yaml
YAML 구성 요소 이해 컴포넌트 설명 namePrefix
kustomization
과 같은 스테이징staging-
파일로 작성하려는 각 리소스의 이름에 첨부할 접두부를 지정하십시오.commonLabels
staging 환경 및 담당 팀과 같이 staging 오브젝트에 고유한 레이블을 추가하십시오. bases
기본 kustomization
파일을 포함하는 원격 리포지토리에 대한 URL 또는 디렉토리에 대한 상대 경로를 추가하십시오. 이 예제에서 상대 경로는 이전에 작성한kustomization
리포지토리에서 기본base
파일을 가리킵니다. 이 필드는 오버레이kustomization
에 필요합니다.patchesStrategicMerge
기본 kustomization
에 병합하려는 리소스 구성 YAML 파일을 나열하십시오. 또한kustomization
파일과 동일한 저장소(예:overlay/staging
)에 이러한 파일을 추가해야 합니다. 이러한 리소스 구성 파일은 동일한 이름의 기본 구성 파일에 패치로서 병합되는 사소한 변경사항을 포함할 수 있습니다. 리소스는base
구성 파일에 있는 모든 구성요소 및overlay
구성 파일에서 지정하는 추가 구성요소를 가져옵니다. 구성이 기본에 없는 새 파일인 경우resources
필드에도 파일 이름을 추가해야 합니다.resources
base 저장소에 포함되지 않으며 staging 저장소에서 고유한 리소스 구성 YAML 파일을 나열하십시오. patchesStrategicMerge
필드에도 이러한 파일을 포함하고kustomization
파일과 동일한 저장소(예:overlay/staging
)에 추가하십시오.기타 가능한 구성 파일에 추가할 수 있는 더 많은 구성 에 대해서는, Make a kustomization
(파일 만들기)를 참고하세요. -
staging overlay 구성 파일을 빌드하십시오.
kustomize build overlay/staging
-
이러한 단계를 반복하여 prod overlay
kustomization
및 기타 구성 YAML 파일을 작성하십시오. 예를 들면, prod 환경이 더 많은 사용자 요청을 처리할 수 있도록deployment.yaml
에서 복제본 수를 늘릴 수 있습니다. -
kustomize
저장소 구조를 검토하여 필요한 모든 YAML 구성 파일이 포함되었는지 확인하십시오. 이 구조는 다음 예와 같을 수 있습니다.├── base │ ├── configmap.yaml │ ├── deployment.yaml │ ├── kustomization.yaml │ ├── pvc.yaml │ ├── secret.yaml │ └── service.yaml └── overlay ├── prod │ ├── deployment.yaml │ ├── kustomization.yaml │ └── new_prod_resource.yaml └── staging ├── configmap.yaml ├── kustomization.yaml └── new_staging_resource.yaml
-
-
배치할 환경에 대한 Kubernetes 리소스를 적용하십시오. 다음 예는 staging 저장소를 사용합니다.
- staging overlay 디렉토리로 이동하십시오. 이전 단계에서 리소스를 빌드하지 않은 경우에는 지금 작성하십시오.
cd overlay/staging && kustomize build
- 클러스터에 Kubernetes 리소스를 적용하십시오.
-k
옵션과kustomization
파일이 있는 디렉토리를 포함합니다. 예를 들어, 이미 staging 디렉토리로 이동한 경우에는../staging
을 포함시켜 디렉토리의 경로를 표시하십시오.
출력 예kubectl apply -k ../staging
configmap/staging-kustomtest-configmap-v2 created secret/staging-kustomtest-secret-v2 created service/staging-kustomtest-service-v2 created deployment.apps/staging-kustomtest-deployment-v2 created job.batch/staging-pi created persistentvolumeclaim/staging-kustomtest-pvc-v2 created
- staging의 고유 변경사항이 적용되었는지 확인하십시오. 예를 들어,
staging-
접두부를 추가한 경우에는 팟(Pod) 및 작성된 기타 리소스의 이름이 이 접두부를 포함합니다.
출력 예kubectl get -k ../staging
NAME DATA AGE configmap/staging-kustomtest-configmap-v2 2 90s NAME TYPE DATA AGE secret/staging-kustomtest-secret-v2 Opaque 2 90s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/staging-kustomtest-service-v2 NodePort 172.21.xxx.xxx <none> 9080:30200/TCP 90s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/staging-kustomtest-deployment-v2 0/3 3 0 91s NAME COMPLETIONS DURATION AGE job.batch/staging-pi 1/1 41s 2m37s NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/staging-kustomtest-pvc-v2 Pending ibmc-file-bronze 90s
- 빌드할 각 환경에 대해 이러한 단계를 반복하십시오.
- staging overlay 디렉토리로 이동하십시오. 이전 단계에서 리소스를 빌드하지 않은 경우에는 지금 작성하십시오.
-
선택사항: Kustomize로 적용한 모든 리소스를 제어하여 환경을 정리하십시오.
kubectl delete -k <directory>
출력 예
configmap "staging-kustomtest-configmap-v2" deleted secret "staging-kustomtest-secret-v2" deleted service "staging-kustomtest-service-v2" deleted deployment.apps "staging-kustomtest-deployment-v2" deleted job.batch "staging-pi" deleted persistentvolumeclaim "staging-kustomtest-pvc-v2" deleted