앱 패키징 요구사항

이 페이지에서는 Kubernetes 앱 패키징에 대한 요구사항과 이러한 요구사항을 충족하기 위한 가이드라인을 설명합니다.

앱 패키지는 사용자의 Kubernetes 클러스터에 배포되는 컨테이너 이미지 및 구성 파일의 번들입니다. Google Cloud Console에서 Google Kubernetes Engine으로의 앱 배포를 지원하려면 앱 패키지에 배포 컨테이너가 포함되어야 합니다. 배포 컨테이너는 구성 파일을 푸시하고 메타 데이터를 Kubernetes API에 표시합니다.

Google Cloud 사용자는 앱 패키지를 통해 다음을 수행할 수 있습니다.

  • Google Cloud Marketplace 카탈로그에서 앱 탐색
  • Cloud Console을 사용하여 애플리케이션을 GKE 또는 Anthos 클러스터에 배포
  • Cloud Console을 사용하여 실행 중인 앱과 상호 작용

패키지에는 Cloud Console을 통한 배포를 지원하는 것 외에도 사용자가 kubectlHelm과 같은 도구를 사용하여 CLI(명령줄 인터페이스)에서 개발자의 앱을 배포할 수 있는 단계가 패키지에 포함되어 있어야 합니다.

앱 패키지 예는 Google 클릭하여 배포 솔루션을 위한 GitHub 저장소를 참조하세요. 이 저장소에는 WordPress 및 Elasticsearch와 같은 인기 있는 오픈소스 앱을 위한 패키지가 포함되어 있습니다.

시작하기 전에

  • Google Cloud 환경을 설정했는지 확인합니다.
  • 앱 실행을 위한 구성 파일, 사용자 가이드, 기타 리소스에 대한 공개 Git 저장소를 만듭니다. GitHub나 Cloud Source Repositories와 같은 공급자를 사용하거나 고유 서버에서 저장소를 호스팅할 수 있습니다. 배포하는 각 제품에 대해 전용 저장소를 사용하는 것이 좋습니다.

개요

앱은 다음 요구사항을 충족해야 합니다.

  • 저장소에 대한 오픈소스 라이선스가 포함된 LICENSE 파일이 Git 저장소에 있어야 합니다.

  • Git 저장소에는 앱을 배포하는 구성 파일이 있어야 합니다. 구성 파일은 Kubernetes YAML 매니페스트 또는 Helm 차트일 수 있습니다.

    구성에는 앱을 설명하는 애플리케이션 커스텀 리소스가 포함되어야 합니다.

    구성 요구사항을 참조하세요.

  • 선택적으로 앱이 GKE On-Prem과 호환되도록 하려면 호환성을 위해 앱 이미지를 수정합니다.

    GKE On-Prem 지원 요구사항을 참조하세요.

    GKE On-Prem에 대한 자세한 내용은 GKE On-Prem 개요를 방문하세요.

  • 선택적으로 앱이 Istio와 호환되도록 하려면 Istio를 실행하는 클러스터의 제한사항을 검토하세요.

  • 앱이 상업용인 경우 고객에게 요금을 정확하게 청구할 수 있도록 앱의 사용량을 Google에 보고해야 합니다. 사용량 보고를 Google에 전송하는 사용량 기반 청구 에이전트를 앱에 통합하는 것이 좋습니다.

    청구 에이전트 통합 요구사항을 참조하세요.

  • 앱의 모든 컨테이너 이미지를 Container Registry의 레지스트리에 업로드해야 합니다. 레지스트리에는 사용자가 Cloud Console에서 앱을 배포할 때 앱 구성을 Google Kubernetes Engine API에 푸시하는 배포자 이미지도 레지스트리에 포함되어 있어야 합니다.

    앱 이미지 빌드 요구사항을 참조하세요.

  • 앱에 대한 통합 테스트를 포함해야 합니다.

    확인 절차 요구사항을 참조하세요.

  • 명령줄에서 앱을 배포하고, 앱을 구성하고, 앱을 사용하기 위한 단계를 사용자 가이드에 포함해야 합니다.

    사용자 가이드 요구사항을 참조하세요.

구성 요구사항

구성은 Kubernetes 매니페스트 또는 Helm 차트로 제공할 수 있습니다.

구성은 다음 요구사항을 충족해야 합니다.

  • 불안정한 API로부터 사용자를 보호하려면 베타 또는 일반 공개된 Kubernetes 리소스만 사용하세요.

  • 구성은 애플리케이션 커스텀 리소스를 배포해야 합니다. 애플리케이션 리소스에는 사용자가 Google Cloud Marketplace UI를 통해 앱을 배포할 때 사용자에게 표시되는 정보가 포함되어 있습니다.

    애플리케이션 리소스는 앱과 연관된 Kubernetes 구성요소를 집계하고 사용자가 이러한 리소스를 하나의 그룹으로 관리할 수 있게 해주는 커스텀 리소스입니다.

    애플리케이션 리소스를 만드는 방법 및 예제는 애플리케이션 GitHub 저장소를 참조하세요.

  • 구성은 envsubst을 사용하거나 플래그로 대체할 수 있는 매개변수를 사용해야 합니다.

    다음 매개변수를 대체할 수 있어야 합니다.

    • 네임스페이스: 모든 구성 리소스는 단일 네임스페이스에 속해야 합니다. Google Cloud Marketplace 사용자는 앱을 배포할 때 이 네임스페이스를 구성합니다. 지정한 리소스가 사용자가 선택한 네임스페이스에 만들어지도록 매니페스트에 네임스페이스를 하드 코딩하지 마세요. 네임스페이스는 경우에 따라 RoleBinding에서 ServiceAccount을 참조할 때와 같이 리소스 정의 내부에도 표시됩니다. 이러한 모든 참조는 매개변수화되어야 합니다.

    • 앱 이름: 애플리케이션 리소스의 인스턴스 이름입니다. 앱의 여러 인스턴스가 단일 네임스페이스에 배포된 경우 이름 충돌을 방지하기 위해 이 문자열을 각 앱 리소스의 이름에 포함해야 합니다.

    • 컨테이너 이미지: PodSpec와 같은 모든 이미지 참조는 대체 가능해야 합니다. 그러면 컨테이너 레지스트리에 게시된 이미지를 가리키도록 Google Cloud Marketplace가 이러한 참조를 재정의할 수 있습니다. 또한 고객이 수정된 이미지를 쉽게 대체할 수 있습니다.

    • 라이선스 보안 비밀: 앱이 상업용 측정을 수행하는 경우 보안 비밀 리소스 이름을 매개변수로 수락해야 합니다. 보안 비밀에는 앱이 Google에 사용량 데이터를 전송하기 위해 사용하는 사용량 보고 사용자 인증 정보가 포함되어 있습니다.

      GitHub의 구성 매개변수에 대해 자세히 알아보세요.

  • 클라이언트 측 도구를 사용하여 앱을 배포할 수 있어야 합니다. 예를 들어 Helm을 사용하는 경우 배치는 --client-only 명령줄 플래그와 함께 작동해야 합니다.

GKE On-Prem 지원 요구사항

고객의 GKE On-Prem 클러스터는 표준 GKE 클러스터와 다르게 구성될 수 있습니다. 이러한 잠재적 변동성으로 인해 GKE on-prem에서 앱을 실행하려면 고객이 다음 리소스를 수동으로 구성해야 합니다.

  • 저장소 등급

    Google Cloud Marketplace는 고객의 GKE On-Prem 클러스터에 어떤 스토리지 클래스가 있는지 예측할 수 없으므로 앱을 다음과 같이 변경하는 것이 좋습니다.

    • PVC(영구 볼륨 신청)를 생성할 경우 스토리지 클래스를 명시적으로 참조하지 않고 클레임을 프로비저닝해야 합니다.

    • 앱에 x-google-marketplace STORAGE_CLASS 속성이 사용될 경우 고객은 Cloud Console에서 개발자의 앱을 배포할 때 스토리지 클래스를 선택해야 합니다. 사용자가 적절한 스토리지 클래스를 선택할 수 있도록 안내하는 문서를 추가하는 것이 좋습니다.

  • 서비스 및 인그레스

    Google Cloud Marketplace는 고객의 GKE On-Prem 클러스터에 어떤 네트워크 토폴로지 및 네트워킹 컨트롤러가 있는지 예측할 수 없으므로, 고객은 자신의 구성에서 작동하는 네트워킹을 설정해야 합니다.

    기본 네트워크 토폴로지에서 지원하지 않는 경우 배포자는 인그레스 리소스를 생성하지 않아야 합니다. 앱이 배포에 사용하는 클라이언트에 따라 다음과 같은 방법으로 앱을 수정해야 합니다.

    • 앱 구성에 kubectl 및 환경 변수를 사용할 경우 매니페스트 확장을 다른 배포 환경에 맞게 수정할 수 없으므로 매니페스트에서 모든 인그레스 리소스를 삭제하는 것이 좋습니다.

    • 구성에 Helm을 사용하는 경우 배치 이미지의 스키마에서 x-google-marketplace INGRESS_AVAILABLE 속성을 사용합니다. 이 속성이 false이면 배포자가 인그레스 리소스를 생성하지 않아야 합니다. UI 배포만 이 값을 구성합니다. 기본값은 CLI 배포에 사용됩니다.

      INGRESS_AVAILABLE 속성 값을 기반으로 분기하는 방법에 대한 예시는 클릭하여 nginx-template 배포를 참조하세요.

    배포 컨테이너에 대한 고급 정보는 배포 컨테이너 요구사항을 참조하세요. 배포자의 스키마 관련 정보를 포함하여 배포 컨테이너를 빌드하기 위한 자세한 단계는 Google Cloud Marketplace 도구 GitHub 저장소를 참조하세요.

    문서의 배포 후 섹션에 고객이 앱을 배포한 후 네트워킹을 설정하는 단계를 추가합니다.

  • Kubernetes 서비스 계정

    고객의 GKE On-Prem 클러스터가 Container Registry 저장소의 앱 이미지에 액세스할 수 있도록 하려면 명시적으로 선언된 Kubernetes 서비스 계정이 앱에 사용되어야 합니다. 서비스 계정은 x-google-marketplace SERVICE_ACCOUNT 속성을 사용하여 배포자 이미지 스키마에서 정의되어야 합니다.

    앱에 네임스페이스의 기본 서비스 계정이 사용되지 않아야 하고, 새 서비스 계정도 만들지 않아야 합니다. 네임스페이스의 기본 서비스 계정이 사용되지 않도록 하려면 모든 작업 부하에 사용할 서비스 계정을 명시적으로 정의하면 됩니다(예: 모든 Pod 사양에 serviceAccountName 속성 설정).

    명시적인 서비스 계정을 사용하는 앱의 경우 Google 클릭하여 GitHub 저장소 배포의 Prometheus 앱에서 다음 예를 참조하세요.

    서비스 계정 구성에 대한 자세한 내용은 서비스 계정 관련 Kubernetes 문서를 참조하세요.

Istio를 사용하는 클러스터의 제한 사항

앱이 Istio와 호환되도록 하려면 이 섹션에 설명된 제한 사항을 검토하세요. Istio 개요는 Istio란 무엇인가요?을 참조하세요.

고객이 클러스터에서 Istio를 실행할 경우, Istio는 기본적으로 앱 Pod 간 네트워크 트래픽을 제어합니다. 다음과 같은 경우 네트워크 통신이 차단될 수 있습니다.

  • Pod가 클러스터의 IP 주소를 사용하는 kubectl 명령어를 실행할 경우, 명령어가 실패할 수 있습니다.

  • 앱이 Pod 간 통신 또는 IP 기반 통신을 사용할 경우, 클러스터 형성 단계가 실패할 수 있습니다.

  • OS 패키지 저장소와 같은 타사 서비스에 대한 외부 연결이 차단될 수도 있습니다. 외부 서비스에 대한 액세스를 사용 설정하려면 고객이 Istio 이그레스 트래픽을 구성해야 합니다.

LoadBalancer 또는 인그레스 리소스 대신 Istio 게이트웨이를 사용하여 수신 연결을 구성하는 것이 좋습니다.

구성에 Helm을 사용하는 경우 배포 이미지의 스키마에서 x-google-marketplace ISTIO_ENABLED 속성을 사용하세요. 이 속성이 true인 경우, 배포자는 배포를 수정해야 합니다(예: Istio 사이드카 준비 대기).

고객의 앱 Pod 간 통신 설정을 지원하려면 문서의 배포 후 섹션에 관련 단계를 추가하는 것이 좋습니다.

청구 에이전트 통합 요구사항

상업용 앱을 판매하는 경우, 앱을 UBB(사용량 기반 결제) 에이전트와 통합하는 것이 좋습니다.

이 에이전트는 Google의 사용량 보고 엔드포인트인 Service Control에 대한 인증 및 보고를 처리합니다. 가격 책정 모델을 제출하면, Google Cloud Marketplace팀이 앱의 보고 대상 서비스를 만들고 사용량 측정을 위한 청구 측정항목을 만듭니다.

이 에이전트는 또한 로컬 집계, 장애 복구, 재시도를 관리합니다. 사용 시간 측정을 위해서는 하트비트를 자동으로 보고하도록 에이전트를 구성할 수 있습니다.

또한 에이전트는 보고 상태를 노출하기 때문에 에이전트가 사용량 데이터를 성공적으로 보고하고 있는지를 앱에서 감지할 수 있습니다.

고객은 Google Cloud Marketplace에서 앱을 구매하여 배포 시 앱에 첨부된 라이선스를 얻습니다.

청구 에이전트와 통합할 때는 사용량 보고가 실패할 때의 앱 작동 방식을 고려하세요. 다음 중 하나에 해당할 수 있습니다.

  • 고객이 구독을 취소했습니다.

  • 고객이 보고 채널을 실수로 사용 중지한 경우. 예를 들어 고객이 에이전트를 실수로 삭제하거나 잘못 구성할 수 있고, 네트워크에서 에이전트가 Google의 보고 엔드포인트에 액세스하는 것을 차단할 수도 있습니다.

이러한 경우에는 Google에 사용량 데이터가 수신되지 않고 고객에게 비용이 청구되지 않습니다.

이러한 경우 앱이 자체적으로 종료되거나 기능이 사용 중지될 수 있습니다. 앱이 시작될 때 사용량 보고가 실패하면 앱이 자체적으로 종료되도록 설정하여, 고객이 문제를 즉시 확인하고 해결할 수 있도록 하는 것이 좋습니다.

청구 에이전트 통합

앱과 동일한 pod에서 실행되는 사이드카 컨테이너 또는 SDK를 사용하여 에이전트를 통합할 수 있습니다.

사이드카 방식에서는 에이전트가 앱 컨테이너와 동일한 Kubernetes 포드에서 자체 컨테이너로 실행됩니다. 앱은 에이전트의 로컬 REST 인터페이스와 통신합니다.

SDK 방식에서는 에이전트를 앱 바이너리에 컴파일하거나 연결되어 있어야 합니다. SDK는 기본적으로 Go용으로 구현되며, Python용 결합을 포함합니다.

일반적으로 사이드카 방식은 통합 작업이 덜 복잡하고, SDK는 실수로 인한 사용 중지 상황에 보다 안정적입니다.

자세한 통합 단계는 사용량 기반 청구 에이전트 GitHub 저장소의 README를 참조하세요. 샘플 구현을 보려면 도구 저장소의 예시를 참조하세요.

사용량 보고를 위한 사용자 인증 정보

청구 에이전트는 사용량 보고를 Google에 전송할 수 있게 해주는 사용자 인증 정보가 필요합니다. Google Cloud Marketplace는 사용자가 Google Cloud Marketplace에서 앱을 배포할 때 이러한 사용자 인증 정보를 생성하고, 앱이 배포되기 전에 사용자 인증 정보가 대상 Kubernetes 네임스페이스에서 Secret 상태로 유지되도록 보장합니다. 이 보안 비밀의 이름은 앱에 REPORTING_SECRET 스키마 속성으로 전달됩니다.

보고 보안 비밀을 사용하는 매니페스트 예는 GitHub의 WordPress 앱 예를 참조하세요.

보안 비밀에는 다음 필드가 포함됩니다.

entitlement-id

고객의 소프트웨어 구입 및 사용 동의를 나타내는 식별자입니다.

consumer-id

사용량 보고서와 함께 Google Service Control에 전달되는 사용 자격과 연관된 식별자입니다.

reporting-key

Google Service Control에 인증하는 데 사용되는 Google Cloud Service 계정 JSON 키입니다.

솔루션이 앱 외에 SaaS 구성요소를 제공하는 경우, SaaS 구성 요소가 Google Cloud Marketplace Procurement 서비스를 사용하여 자격 ID의 유효성을 주기적으로 확인하도록 선택적으로 지정할 수 있습니다. Procurement 서비스에 액세스하려면 파트너 엔지니어에게 문의하세요.

앱에 전달되는 다른 매개변수에 대한 자세한 내용은 이 섹션의 뒷부분에 있는 앱에 전달된 매개변수를 참조하세요.

컨테이너 이미지 빌드 요구사항

앱은 하나 이상의 앱 컨테이너 이미지로 구성됩니다. 또한 저장소에는 고객이 Google Cloud Marketplace UI에서 앱을 배포할 때 사용되는 배포 컨테이너가 포함되어야 합니다.

컨테이너 이미지는 일반적으로 Dockerfiledocker build 명령줄 도구를 사용하여 빌드됩니다. Dockerfile 및 컨테이너 빌드 지침은 앱의 공개 저장소에 게시하는 것이 좋습니다. 이를 게시하면 고객이 이미지를 수정하거나 다시 작성할 수 있으며 때로는 엔터프라이즈 프로덕션 환경의 이미지를 인증해야 합니다.

앱 이미지가 Debian과 같은 기본 이미지 또는 Python 또는 OpenJDK와 같은 언어 런타임 이미지에 의존하는 경우 Google Cloud Marketplace의 인증 컨테이너 이미지 중 하나를 사용하는 것이 좋습니다. 이렇게 하면 보안 패치 등과 같이 기본 이미지에 대한 업데이트가 적시에 수행되도록 보장할 수 있습니다. 이 방식을 사용하면 기본 이미지에 있는 패키지를 고려할 필요가 없기 때문에 오픈소스 라이선스 검토도 쉽게 수행할 수 있습니다.

앱 이미지를 빌드한 후에 환경을 설정할 때 Container Registry에서 만든 스테이징 레지스트리에 이미지를 푸시합니다.

Container Registry 저장소는 구조가 다음과 같아야 합니다.

  • 앱의 기본 이미지는 저장소의 루트에 있어야 합니다. 예를 들어 Container Registry 저장소가 gcr.io/exampleproject/exampleapp인 경우 앱의 이미지는 gcr.io/exampleproject/exampleapp에 있어야 합니다.

  • 배치 컨테이너의 이미지는 deployer이라는 폴더에 있어야 합니다. 위의 예시에서 배치 이미지는 gcr.io/exampleproject/exampleapp/deployer에 있어야 합니다.

  • 앱에서 추가 컨테이너 이미지를 사용하는 경우 각 추가 이미지는 기본 이미지 아래의 자체 폴더에 있어야 합니다. 예를 들어 앱에 proxy 이미지가 필요한 경우 이미지를 gcr.io/exampleproject/exampleapp/proxy에 추가합니다.

  • 앱의 모든 이미지에는 출시 트랙과 현재 버전으로 태그가 지정되어야 합니다. 예를 들어 2.0 출시 트랙에서 2.0.5 버전을 출시하는 경우 모든 이미지에 2.02.0.5 태그가 지정되어야 합니다. 출시 구성에 대해 알아보기.

예를 들어 다음 이미지는 Grafana Cluster Kubernetes 앱의 Container Registry 저장소를 보여줍니다. 출시 트랙은 5.3이며 앱에는 기본 앱 이미지, 자체 폴더의 배포자 이미지, debian9의 Debian 9 이미지가 포함되어 있습니다. 저장소의 모든 이미지에는 동일한 트랙 5.3 및 해당 트랙의 버전 5.3.4로 태그가 지정됩니다. 또한 배포자에 선언된 대로 애플리케이션 리소스에 대한 커스텀 리소스 정의(CRD)의 '버전' 필드와 일치해야 합니다.

Grafana Container Registry 저장소 구조 예

저장소는 gcr.io/cloud-marketplace/google/grafana에 있습니다.

제품 식별자를 선택할 때 이전에 선택한 컨테이너 이미지 식별자를 사용합니다.

이미지를 Container Registry에 업로드하려면 레지스트리 이름으로 태그를 지정한 다음 gcloud을 사용하여 이미지를 푸시합니다. 예를 들어 다음 명령어를 사용하여 example-pro의 이미지를 푸시합니다.

docker build -t gcr.io/my-project/example-pro:4.0   # release track 4.0
docker tag gcr.io/my-project/example-pro:4.0 gcr.io/my-project/example-pro:4.0.3  # release version 4.0.3
docker push gcr.io/my-project/example-pro:4.0
docker push gcr.io/my-project/example-pro:4.0.3

이미지를 태그 지정하고 레지스트리에 푸시하기 위한 자세한 단계는 Container Registry 문서를 참조하세요.

배포 컨테이너 요구사항

배포 컨테이너(또는 배포자)는 고객이 Google Cloud Marketplace에서 솔루션을 배포할 때 사용됩니다. 배포자 이미지는 앱의 Kubernetes 구성 및 클라이언트 도구(예: kubectl 또는 Helm)를 패키징합니다. 이 도구는 Kubernetes API로 구성을 푸시합니다. 배포자는 일반적으로 사용자가 앱을 배포할 때 실행하는 것과 동일한 명령줄 명령어 모음을 사용해야 합니다.

배포자를 만들려면 도구 저장소의 marketplace 디렉토리에서 배포 컨테이너의 기본 이미지 중 하나를 사용합니다.

기본 이미지에는 소유자 참조 지정, 비밀번호 생성, 배포 후 삭제와 같은 작업에 필요한 기본 제공 유틸리티가 있습니다.

배포자 이미지 빌드를 위한 단계는 애플리케이션 배포자 빌드를 참조하세요.

앱에 전달되는 매개변수

배포 컨테이너는 고객이 개발자의 앱을 선택할 때 고객으로부터 수집해야 하는 매개변수를 선언해야 합니다. 그런 다음 이러한 매개변수는 사용자가 앱을 배포할 때 배포 컨테이너에 제공됩니다.

이러한 매개변수를 구성하려면 배포 컨테이너 이미지에 YAML 형식의 JSON 스키마(경로: /data/schema.yaml)가 포함되어 있어야 합니다.

schema.yaml 만드는 방법을 배우려면 배포자 스키마를 참조하세요.

검증 프로세스 요구사항

앱은 인증 시스템에서 실행되어 다음을 보장합니다.

  • 설치 성공: 모든 리소스가 적용되고 정상 상태가 되기를 기다립니다.
  • 기능 테스트 통과: 배포자는 테스터 포드를 시작하고 종료 상태를 감시합니다. 0은 성공을, 0이 아닌 것은 실패를 의미합니다.
  • 제거 성공: 앱 및 모든 리소스가 클러스터에서 성공적으로 제거되었습니다.

앱을 Google Cloud Marketplace에 게시하려면 성공적인 결과가 필요합니다.

이러한 기능 테스트를 패키지, 실행, 확인하는 방법에 대한 자세한 내용은 verification-integration.md의 안내를 따르세요.

사용자 가이드 요구사항

사용자 가이드에는 다음 정보가 포함되어야 합니다.

개요

  • 기본 기능 및 구성 옵션이 포함된 일반 앱 개요 이 섹션은 또한 Google Cloud Marketplace에 게시된 솔루션에 연결되어야 합니다.

1회 설정

  • kubectl 또는 Helm과 같은 클라이언트 구성 도구(해당되는 경우)
  • 클러스터가 애플리케이션 리소스를 관리할 수 있도록 애플리케이션 CRD(CustomResourceDefinition) 설치
  • 상업용 앱을 판매하는 경우 Google Cloud Marketplace에서 라이선스 보안 비밀을 획득하고 배포하는 단계

설치

  • 앱 배포를 위한 명령어
  • UI 구성에서 사용 가능한 매개변수 전달
  • 변경 불가능한 다이제스트에 대한 이미지 참조 고정
  • 배포자 스키마에 커스텀 입력 필드를 추가하는 경우 예상 값에 대한 정보를 추가합니다.(해당되는 경우)

    배포자에 입력 필드를 추가하는 방법에 대해 알아보기

기본 사용

  • 관리 콘솔에 연결(해당되는 경우)
  • 클라이언트 도구 연결 및 샘플 명령어 실행(해당되는 경우)
  • 사용자 이름 및 비밀번호 수정
  • 수신 사용 설정 및 TLS 인증서 설치(해당되는 경우)

백업 및 복원

  • 앱 상태 백업
  • 백업에서 앱 상태 복원

이미지 업데이트

  • 패치 및 소규모 업데이트를 위한 앱 이미지 업데이트

확장

  • 앱 확장(해당되는 경우)

삭제

  • 앱 삭제
  • PersistentVolumeClaims와 같이 의도적으로 분리되었을 수 있는 모든 리소스 삭제