Google Kubernetes Engine 클러스터에 배포

이 문서에서는 Google Kubernetes Engine 클러스터에 애플리케이션을 배포하는 방법을 설명합니다.

Cloud Deploy를 사용하면 컨테이너 기반 워크로드를 모든 Google Kubernetes Engine 클러스터에 배포할 수 있습니다. GKE 대상에 배포할 때는 모든 Cloud Deploy 기능이 지원됩니다.

시작하기 전에

이 skaffold.yaml 파일에서 deploy 스탠자는 kubectl을 포함하며, Skaffold가 렌더링되어 Kubernetes(GKE)에 배포됨을 나타냅니다. 이 애플리케이션에 사용하는 매니페스트가 아래에 나열됩니다.

대상 구성 만들기

각 대상은 배포 파이프라인 YAML에서 구성하거나 별도의 파일에 포함할 수 있습니다. 또한 동일한 파일에 대상을 두 개 이상 구성할 수 있지만 서로 다른 kind: Target 스탠자에 있어야 합니다.

대상은 배포 파이프라인과 동일한 프로젝트 및 리전에서 정의되어야 합니다. 하지만 서비스 계정이 해당 프로젝트에 액세스할 수 있는 경우 대상이 배포되는 클러스터는 서로 다른 프로젝트와 리전에 위치할 수 있습니다.

대상 정의에서 GKE 클러스터를 가리키도록 gke 스탠자를 만듭니다.

gke:
 cluster: projects/[project_name]/locations/[location]/clusters/[cluster_name]

이 GKE 리소스 식별자는 다음 요소를 사용합니다.

  • [project_name] 은 이 클러스터를 실행하는 Google Cloud 프로젝트의 이름입니다.

    배포 대상 클러스터가 배포 파이프라인과 동일한 프로젝트에 있을 필요는 없습니다.

  • [location]은 클러스터가 생성된 리전입니다.

  • [cluster_name] 은 클러스터를 만들 때 클러스터에 지정된 이름입니다.

    이 이름은 콘솔에서 프로젝트의 클러스터 목록에서 찾을 수 있습니다. Google Cloud

     Google Cloud 콘솔의 클러스터 목록

다음은 GKE 클러스터를 가리키는 대상 구성의 예시입니다.

      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
       name: dev
      description: development cluster
      gke:
       cluster: projects/my-app/locations/us-central1/clusters/my-app-dev-cluster

Skaffold 구성 만들기

이 섹션에서는 GKE 클러스터에 배포할 때 사용할 간단한 Skaffold 구성의 예시를 제공하고 설명합니다.

다음은 GKE 클러스터에 배포하기 위한 예시 skaffold.yaml 파일입니다.

apiVersion: skaffold/v4beta7
kind: Config
metadata:
  name: gke-application
manifests:
  rawYaml:
  - deployment.yaml
deploy:
  kubectl: {}

Cloud Deploy에서 Skaffold 사용에서 배포 파이프라인에 Skaffold를 사용하는 방법을 자세히 설명하고 있습니다.

Kubernetes 매니페스트 준비

GKE에 애플리케이션을 배포하려면 Cloud Deploy에 하나 이상의 Kubernetes 매니페스트를 제공합니다. 이 매니페스트는 렌더링된 후 하나 이상의 대상 클러스터에 적용되어 애플리케이션에 배포됩니다.

이러한 매니페스트가 없으면 Cloud Deploy 배포 파이프라인을 사용하여 배포하기 전에 매니페스트를 만듭니다.

Kustomize 또는 Helm을 사용하여 매니페스트를 만들 수 있습니다. 매니페스트가 템플릿화되었고 렌더링이 필요한 경우에도 Kustomize 또는 Helm을 사용할 수 있습니다.

요약 정리

Kubernetes 매니페스트, skaffold.yaml 구성, Cloud Deploy 대상 정의가 준비되었으며 Cloud Deploy 리소스로 대상을 등록했습니다. 이제 배포 파이프라인을 호출하여 출시 버전을 만들고 파이프라인에 정의된 대상의 진행을 따라 진행할 수 있습니다.

프록시를 사용하여 배포

대상 GKE 클러스터의 프록시를 지정할 수 있습니다. HTTP 프록시를 통해서만 클러스터에 액세스하도록 설정된 조직을 위한 것입니다.

이렇게 하려면 대상 구성의 gke 스탠자에 proxyUrl 속성을 추가합니다.

gke:
 cluster: projects/my-app/locations/us-central1/clusters/my-app-dev-cluster
 proxyUrl: [URL]

여기서 URL은 프록시의 URL입니다.

비공개 클러스터에 배포

다음 세 가지 옵션 중 하나를 사용하여 애플리케이션을 비공개 GKE 클러스터에 배포할 수 있습니다.

DNS 엔드포인트 사용

비공개 클러스터에 연결하는 가장 간단한 방법입니다.

  1. 클러스터에서 DNS 기반 엔드포인트를 사용 설정합니다.

  2. 대상 구성의 gke 아래에서 dnsEndpoint를 true로 설정합니다.

    클러스터에 IP 기반 엔드포인트가 구성되어 있지 않으면 이 단계를 건너뛸 수 있습니다. Cloud Deploy는 제어 영역의 유일한 엔드포인트이므로 기본적으로 DNS 엔드포인트에 연결됩니다.

가상 프라이빗 클라우드(VPC) 네트워크 사용

가상 프라이빗 클라우드(VPC) 네트워크에 연결된 비공개 GKE 클러스터에 배포하도록 대상을 구성할 수 있습니다.

  1. 비공개 클러스터 만들기

    비공개 클러스터는 기본적으로 노드와 포드가 공개 인터넷으로부터 격리되는 VPC 기반 클러스터입니다.

    비공개 클러스터 대상의 내부 IP를 사용하려는 경우 대상 구성의 gke에서 internalIp를 true로 설정합니다.

  2. Cloud Build에서 이 비공개 클러스터에 배포하는 데 사용할 수 있는 비공개 작업자 풀 을 만듭니다.

  3. 해당 비공개 풀을 사용하도록 실행 환경을 구성합니다.

    RENDER에는 이 풀을 사용해야 합니다. DEPLOY 및 VERIFY에도 사용할 수 있습니다. 다음은 RENDER 및 DEPLOY를 사용하는 예시입니다.

    executionConfigs:
    - usages:
      - RENDER
      - DEPLOY
      workerPool: "projects/p123/locations/us-central1/workerPools/wp123"
    

자세한 내용은 Cloud Build 비공개 풀로 비공개 GKE 클러스터에 액세스 를 참조하세요.

프로젝트 및 권한 고려 사항

비공개 클러스터에 배포할 수 있는 비공개 작업자 풀을 사용하도록 대상을 구성할 수 있습니다. 하지만 리소스가 다른 프로젝트에 있는 경우 유의해야 할 몇 가지 사항이 있습니다.

  • Cloud Deploy와 작업자 풀이 개별 프로젝트에 있는 경우

VPC에 대한 액세스 권한이 있고 대상과 다른 프로젝트에 있는 비공개 풀과 통신하려면 Cloud Deploy 서비스 에이전트에 해당 프로젝트와 통신할 수 있는 충분한 권한이 필요합니다.

실행 서비스 계정은 Cloud Storage 버킷에 액세스할 수 있는 권한도 필요합니다.

  • 작업자 풀과 클러스터가 개별 프로젝트에 있는 경우

비공개 GKE 클러스터가 비공개 작업자 풀과 다른 프로젝트에 있는 경우 실행 서비스 계정 은 클러스터가 있는 프로젝트와 통신할 수 있는 충분한 권한이 필요합니다.

GKE 연결 클러스터 대상 및 connect 게이트웨이 사용

GKE 연결 클러스터 및 connect 게이트웨이를 사용하는 대상을 사용하여 비공개 GKE 클러스터 에 배포하도록 대상을 구성할 수 있습니다.

이 접근 방식에서는 Virtual Private Cloud 또는 가상 사설망 연결을 사용할 필요가 없습니다.

다음 단계