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 클러스터의 프록시를 지정할 수 있습니다. 프록시를 통해서만 클러스터에 액세스하도록 설정된 조직을 위한 것입니다.

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

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

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

비공개 클러스터에 배포

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

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

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

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

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

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

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

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

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

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

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

프로젝트 및 권한 고려 사항

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

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

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

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

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

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

GKE Enterprise 대상 및 connect 게이트웨이 사용

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

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

다음 단계