IBM Cloud Docs
여러 환경에서 재사용할 수 있도록 Kustomize를 사용하여 앱 패키징

여러 환경에서 재사용할 수 있도록 Kustomize를 사용하여 앱 패키징

12가지 요소의 일부로서, 클라우드 네이티브 앱은 공통의 버전 관리 코드 기반 소스를 사용하는 지속적인 개발 및 전달 파이프라인을 설정하여 코드 기반의 패리티( dev-to-prod )를 유지하고자 합니다. 코드 베이스 저장소에는 YAML 형식의 Kubernetes 리소스 구성 매니페스트 파일이 저장되어 있습니다. Kubernetes 프로젝트를 사용할 수 있습니다 Kustomize 여러 환경에 배포를 표준화하고 맞춤화할 수 있습니다.

kustomization 예를 들어, 개발, 테스트, 생산 환경에서 공유되는 배포와 PVC와 같은 Kubernetes 객체를 선언하는 기본 YAML 파일을 설정할 수 있습니다. 다음으로, 프로덕션 환경에서 테스트 환경보다 더 많은 복제본을 사용하는 등 각 환경에 맞게 사용자 정의된 구성을 가진 별도의 YAML 파일( kustomization )을 설정할 수 있습니다. 그런 다음, 이 사용자 정의 YAML 파일은 공유된 기본 YAML 파일을 오버레이하거나 그 위에 구축할 수 있으므로, 소스 제어를 통해 몇 가지 오버레이 구성 차이를 제외하고는 대부분 동일한 환경을 관리할 수 있습니다. Kustomize 에 대한 자세한 정보(용어집, 자주 묻는 질문 등)는 Kustomize docs를 참조하세요.

시작하기 전에: Red Hat OpenShift 클러스터에 액세스하십시오.

Kustomize를 사용하여 구성 파일을 설정하려면 다음을 수행하십시오.

  1. kustomize 도구를 설치하십시오.

    • macOS의 경우에는 brew 패키지 관리자를 사용할 수 있습니다.
      brew install kustomize
      
    • Windows의 경우에는 chocolatey 패키지 관리자를 사용할 수 있습니다.
      choco install kustomize
      
  2. Git과 같은 버전 제어 시스템에 앱의 디렉토리를 작성하십시오.

    git init ~/<my_app>
    
  3. 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
    
  4. base 저장소를 설정하십시오.

    1. base 저장소로 이동하십시오.

      cd ~/<my_app>/base
      
    2. 앱 배치를 위한 초기 Kubernetes 구성 YAML 파일 세트를 작성하십시오. wasliberty YAML 예를 사용하여 배치, 서비스, ConfigMap 및 지속적 볼륨 클레임을 작성할 수 있습니다.

    3. 환경 전반에 적용될 기본 구성을 지정하는 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과 같은 별도의 파일입니다.

    4. kustomization 기본 YAML 파일에 정의한 구성으로 리소스 YAML 파일을 빌드하십시오. 리소스는 kustomization과 리소스 YAML의 구성을 결합하여 빌드됩니다. 결합된 YAML 파일은 출력의 stdout에 리턴됩니다. 레이블을 추가하는 것과 같이 kustomization YAML에 수행하는 후속 변경사항을 빌드하는 경우에는 이와 동일한 명령을 사용하십시오.

      kustomize build
      
  5. 각 환경(staging 및 prod 등)에 대해 고유 kustomization YAML 파일이 있는 overlay 저장소를 설정하십시오.

    1. 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(파일 만들기)를 참고하세요.
    2. staging overlay 구성 파일을 빌드하십시오.

      kustomize build overlay/staging
      
    3. 이러한 단계를 반복하여 prod overlay kustomization 및 기타 구성 YAML 파일을 작성하십시오. 예를 들면, prod 환경이 더 많은 사용자 요청을 처리할 수 있도록 deployment.yaml에서 복제본 수를 늘릴 수 있습니다.

    4. 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
      
  6. 배치할 환경에 대한 Kubernetes 리소스를 적용하십시오. 다음 예는 staging 저장소를 사용합니다.

    1. staging overlay 디렉토리로 이동하십시오. 이전 단계에서 리소스를 빌드하지 않은 경우에는 지금 작성하십시오.
      cd overlay/staging && kustomize build
      
    2. 클러스터에 Kubernetes 리소스를 적용하십시오. -k 옵션과 kustomization 파일이 있는 디렉토리를 포함합니다. 예를 들어, 이미 staging 디렉토리로 이동한 경우에는 ../staging을 포함시켜 디렉토리의 경로를 표시하십시오.
      oc 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
      
    3. staging의 고유 변경사항이 적용되었는지 확인하십시오. 예를 들어, staging- 접두부를 추가한 경우에는 팟(Pod) 및 작성된 기타 리소스의 이름이 이 접두부를 포함합니다.
      oc 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
      
    4. 빌드할 각 환경에 대해 이러한 단계를 반복하십시오.
  7. 선택사항: Kustomize로 적용한 모든 리소스를 제어하여 환경을 정리하십시오.

    oc 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