컨테이너 이미지 배포

이 페이지에서는 새 서비스 및 새 버전을 Cloud Run for Anthos on Google Cloud에 배포하는 방법을 설명합니다.

자격 요건

gcloud 명령줄 도구를 사용하려면 Cloud SDK를 설치하고 구성해야 합니다.

배포 시 필요한 권한

serving.knative.dev apiGroup 및 Service kind에 대한 만들기, 업데이트, 삭제 권한이 필요하고 다음 역할 중 하나가 있어야 합니다.

  • 소유자
  • 편집자
  • GKE 관리자
  • GKE 개발자

배포할 수 있는 이미지

배포할 수 있는 컨테이너 이미지에는 크기 제한이 적용되지 않습니다.

Docker Hub와 같이 모든 Container Registry의 컨테이너를 사용할 수 있습니다. Container Registry 또는 Artifact Registry와 다른 레지스트리에서 가져온 비공개 이미지를 배포하기 위해서는 다른 Container Registry에서 가져온 비공개 컨테이너 이미지 배포를 참조하세요.

새 서비스 배포

태그(예: gcr.io/my-project/my-image:latest) 또는 정확한 다이제스트(예: gcr.io/my-project/my-image@sha256:41f34ab970ee...)로 컨테이너 이미지를 지정할 수 있습니다.

서비스에 처음 배포하면 첫 번째 버전이 생성됩니다. 버전은 변경할 수 없습니다. 컨테이너 이미지 태그로 배포를 수행할 때는 이것이 다이제스트로 확인되고, 버전에는 항상 이 특정 다이제스트가 제공됩니다.

Cloud Console, gcloud 명령줄 도구 또는 YAML 구성 파일을 사용하여 컨테이너를 배포할 수 있습니다.

선택한 도구 사용에 관한 안내를 보려면 해당 탭을 클릭하세요.

기본 gcloud 위치 구성

이전에 Cloud SDK의 default 구성에서 위치를 구성한 경우 gcloud 명령어는 기본적으로 다음 값을 사용합니다.

  • compute/region
  • compute/zone
  • kuberun/cluster
  • kuberun/region
  • kuberun/cluster_location

다음 gcloud config 명령어를 실행하여 default 구성 설정을 확인합니다.

gcloud config configurations describe default

콘솔

컨테이너 이미지를 배포하려면 다음 안내를 따르세요.

  1. Cloud Run for Anthos로 이동

  2. 서비스 만들기를 클릭하여 서비스 만들기 페이지를 표시합니다.

    양식에서 다음 안내를 따르세요.

    1. 배포할 Cloud Run for Anthos 플랫폼을 선택합니다.

      • Cloud Run for Anthos는 Cloud Run for Anthos가 사용 설정된 GKE 또는 VMware용 Anthos 클러스터 클러스터에 배포합니다.
    2. 드롭다운 메뉴에서 서비스에 사용 가능한 GKE 클러스터 중 하나를 선택합니다.

    3. 원하는 서비스 이름을 입력합니다. 서비스 이름은 리전 및 프로젝트 또는 클러스터별로 고유해야 합니다. 서비스 이름을 나중에 변경할 수 없습니다.

    4. 연결에서 다음 안내를 따르세요.

      • 다른 Cloud Run for Anthos 서비스 또는 클러스터에서 Istio를 사용하는 서비스로만 액세스를 제한하려면 내부를 선택합니다.
      • 서비스에 대한 외부 액세스를 허용하려면 외부를 선택합니다.

      서비스 연결 설정 변경에 설명된 것처럼 언제든지 연결 옵션을 변경할 수 있습니다.

    5. 서비스 만들기 양식의 두 번째 페이지로 이동하려면 다음을 클릭합니다.

      이미지

      양식에서 다음 안내를 따르세요.

      1. 컨테이너 이미지 URL 텍스트 상자에 지원되는 레지스트리의 이미지 URL을 제공합니다(예: gcr.io/myproject/my-image:latest).

        Artifact Registry를 비공개 컨테이너 이미지와 함께 사용하려면 이미지 다이제스트를 사용해야 합니다. 비공개 컨테이너 이미지의 이미지 태그를 사용하려면 알려진 문제가 해결될 때까지 imagePullSecret을 만들고 사용해야 합니다.

      2. 필요할 경우 고급 설정 표시를 클릭하고 설정할 다음 탭을 클릭합니다.

      3. 만들기를 클릭하여 Cloud Run for Anthos에 이미지를 배포하고 배포가 완료될 때까지 기다립니다.

    Cloud Run for Anthos 지원 클러스터에 서비스를 배포했습니다.

명령줄

컨테이너 이미지를 배포하려면 다음 안내를 따르세요.

  1. gcloud kuberun core services create 명령어를 실행합니다.

    gcloud kuberun core services create SERVICE --image IMAGE_URL

    • SERVICE를 배포하려는 서비스 이름으로 바꿉니다. 지정된 서비스가 없으면 새 서비스가 생성됩니다.

    • IMAGE_URL을 컨테이너 이미지에 대한 참조(예: gcr.io/myproject/my-image:latest)로 바꿉니다.

    • 추가 배포 옵션은 다음과 같습니다.

      • 기본값 이외의 네임스페이스에 배포하려면 --namespace 매개변수를 사용하여 네임스페이스를 지정해야 합니다.

      • 기본 구성이 아닌 다른 위치에 배포하려면 --cluster--cluster-location 매개변수를 사용하여 클러스터의 namelocation을 지정해야 합니다.

      gcloud kuberun core services create SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • 서비스 연결 설정 변경에 설명된 대로 --connectivity 플래그로 연결 옵션을 설정하여 내부 또는 외부 액세스를 지정할 수 있습니다.

      • Cloud Run for Anthos 온프렘의 경우 --kubeconfig 매개변수를 포함하고 구성 파일을 지정해야 합니다.

      gcloud kuberun core services create SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. 배포가 완료될 때까지 기다립니다. 성공적으로 완료되면 배포된 서비스의 URL이 포함된 성공 메시지가 표시됩니다.

YAML

서비스 사양을 YAML 파일에 저장한 다음 gcloud 명령줄 도구를 사용하여 배포할 수 있습니다.

  1. 다음 내용으로 새 service.yaml 파일을 만듭니다.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - image: IMAGE

    다음과 같이 바꿉니다.

    • SERVICE를 Cloud Run for Anthos 서비스의 이름으로 바꿉니다.
    • IMAGE를 컨테이너 이미지의 URL로 바꿉니다. Artifact Registry를 비공개 컨테이너 이미지와 함께 사용하려면 이미지 다이제스트를 사용해야 합니다. 비공개 컨테이너 이미지의 이미지 태그를 사용하려면 알려진 문제가 해결될 때까지 imagePullSecret을 만들고 사용해야 합니다.

    또한 환경 변수 또는 메모리 제한과 같은 추가 구성을 지정할 수 있습니다.

  2. 다음 명령어를 사용하여 새 서비스를 배포합니다.

    gcloud beta run services replace service.yaml

Cloud Code

Cloud Code를 사용하여 배포하려면 IntelliJVisual Studio Code 가이드를 읽어보세요.

기존 서비스의 새 버전 배포

Cloud Console, gcloud 명령줄, YAML 구성 파일을 사용하여 새 버전을 배포할 수 있습니다.

구성 설정을 변경하면 컨테이너 이미지가 변경되지 않아도 새 버전이 생성됩니다. 생성된 각 버전은 변경할 수 없습니다.

선택한 도구 사용에 관한 안내를 보려면 해당 탭을 클릭하세요.

Console

기존 서비스의 새 버전을 배포하려면 다음 안내를 따르세요.

  1. Cloud Run for Anthos로 이동

  2. 서비스 목록에서 업데이트할 서비스를 찾고 이를 클릭하여 해당 서비스의 세부정보를 엽니다.

  3. 새 버전 수정 및 배포를 클릭합니다. 그러면 버전 배포 양식이 표시됩니다.

    이미지

  4. 필요한 경우 배포하려는 새 컨테이너 이미지 URL을 제공합니다.

  5. 필요할 경우 다음을 설정합니다.

  6. 모든 트래픽을 새 버전으로 전송하려면 라벨이 이 버전을 즉시 제공으로 표시된 체크박스를 선택합니다. 새 버전을 점진적으로 출시하려면 이 체크박스를 선택 해제합니다. 그러면 트래픽이 새 버전으로 전송되지 않도록 배포가 구성됩니다. 배포 후 점진적 출시 안내를 따릅니다.

  7. 배포를 클릭하고 배포가 완료될 때까지 기다립니다.

명령줄

컨테이너 이미지를 배포하려면 다음 안내를 따르세요.

  1. gcloud kuberun core services update 명령어를 실행합니다.

    gcloud kuberun core services update SERVICE --image IMAGE_URL

    • 각 버전에 버전 서픽스가 자동으로 할당됩니다. 자체 버전 서픽스를 지정하려면 --revision-suffix 매개변수를 추가합니다.

    • SERVICE를 배포하려는 서비스 이름으로 바꿉니다. 지정된 서비스가 없으면 새 서비스가 생성됩니다.

    • IMAGE_URL을 컨테이너 이미지에 대한 참조(예: gcr.io/myproject/my-image:latest)로 바꿉니다.

    • 추가 배포 옵션은 다음과 같습니다.

      • 기본값 이외의 네임스페이스에 배포하려면 --namespace 매개변수를 사용하여 네임스페이스를 지정해야 합니다.

      • 기본 구성이 아닌 다른 위치에 배포하려면 --cluster--cluster-location 매개변수를 사용하여 클러스터의 namelocation을 지정해야 합니다.

      gcloud kuberun core services create SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • 서비스 연결 설정 변경에 설명된 대로 --connectivity 플래그로 연결 옵션을 설정하여 내부 또는 외부 액세스를 지정할 수 있습니다.

      • Cloud Run for Anthos 온프렘의 경우 --kubeconfig 매개변수를 포함하고 구성 파일을 지정해야 합니다.

      gcloud kuberun core services create SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. 배포가 완료될 때까지 기다립니다. 성공적으로 완료되면 배포된 서비스의 URL이 포함된 성공 메시지가 표시됩니다.

YAML

YAML 파일을 사용하여 기존 서비스의 구성을 수정하려면 현재 구성의 복사본을 가져오고 변경사항을 수정하여 로컬 파일에 저장한 다음 해당 변경사항을 서비스에 배포합니다.

  1. YAML로 표시한 다음 서비스 구성을 로컬 파일(예: service.yaml)에 복사합니다.

    gcloud kuberun core services describe SERVICE --format yaml

    SERVICE를 Cloud Run for Anthos 서비스 이름으로 바꿉니다.

    1. 로컬 파일에서 spec.template의 모든 하위 속성에 있는 버전 설정을 업데이트합니다.

    2. 새 버전을 배포합니다.

      gcloud beta run services replace service.yaml

Cloud Code

Cloud Code를 사용하여 기존 서비스의 새 버전을 배포하려면 IntelliJVisual Studio Code 가이드를 참조하세요.

다른 Google Cloud 프로젝트의 이미지 배포

올바른 IAM 권한을 설정한 경우 다른 Google Cloud 프로젝트에서 가져온 컨테이너 이미지를 배포할 수 있습니다.

  1. Cloud Console에서 Cloud Run for Anthos 서비스에 대한 프로젝트를 엽니다.

  2. IAM 페이지로 이동

  3. 배포 대상에 따라 다음 안내를 따르세요.

  4. 사용하려는 Container Registry를 소유하는 프로젝트를 엽니다.

  5. IAM 페이지로 이동

  6. 추가를 클릭하여 새 구성원을 추가합니다.

  7. 새 구성원 텍스트 상자에 이전에 복사한 서비스 계정의 이메일을 붙여넣습니다.

  8. 역할 선택 드롭다운 목록에서 스토리지 -> 스토리지 객체 뷰어 역할을 선택합니다.

  9. Cloud Run for Anthos 서비스가 포함된 프로젝트에 컨테이너 이미지를 배포합니다.

다른 Container Registry에서 가져온 비공개 컨테이너 이미지 배포

이 섹션에서는 임의의 비공개 레지스트리에서 가져온 컨테이너 이미지를 Cloud Run for Anthos에 배포하기 위해 올바른 권한을 설정하는 방법을 설명합니다. 컨테이너 이미지에 액세스하기 위해서는 비공개 Container Registry에 사용자 인증 정보가 필요합니다. 클러스터와 동일한 프로젝트에서 Container Registry 또는 Artifact Registry로부터 비공개 컨테이너 이미지를 배포하기 위해서는 이 단계를 수행할 필요가 없습니다.

비공개 컨테이너 이미지를 배포하기 위해서는 imagePullSecret 유형의 Kubernetes 보안 비밀을 만들고 이를 서비스 계정과 연결해야 합니다.

  1. container-registry라는 imagePullSecret 보안 비밀을 만듭니다.

    kubectl create secret docker-registry container-registry \
    --docker-server=DOCKER_REGISTRY_SERVER \
    --docker-email=REGISTRY_EMAIL \
    --docker-username=REGISTRY_USER \
    --docker-password=REGISTRY_PASSWORD
    • DOCKER_REGISTRY_SERVER를 비공개 레지스트리 FQDN(예: Container Registry의 경우 https://gcr.io/ 또는 DockerHub의 경우 https://hub.docker.com)으로 바꿉니다.
    • REGISTRY_EMAIL을 이메일로 바꿉니다.
    • REGISTRY_USER를 Container Registry 사용자 이름으로 바꿉니다.

      Container Registry 또는 Artifact Registry를 사용 중이고 단기 액세스 토큰을 전달하는 대신 장기 사용자 인증 정보를 저장하고 가져오려면 인증 방법: JSON 키 파일을 참조하세요.

    • REGISTRY_PASSWORD를 Container Registry 비밀번호로 바꿉니다.

  2. 기본 서비스 계정을 엽니다.

    kubectl edit serviceaccount default --namespace default

    Kubernetes 클러스터의 모든 네임스페이스에는 default라고 부르는 기본 서비스 계정이 있습니다. Cloud Run for Anthos 서비스를 배포할 때 별도 지정하지 않는 한 이 기본 서비스 계정을 사용하여 컨테이너 이미지를 가져옵니다.

  3. 새로 생성된 imagePullSecret 보안 비밀을 기본 서비스 계정에 추가합니다.

    imagePullSecrets:
    - name: container-registry
    

    서비스 계정은 다음과 같이 표시됩니다.

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: default
      namespace: default
      ...
    secrets:
    - name: default-token-zd84v
    # The secret we just created:
    imagePullSecrets:
    - name: container-registry
    

이제 현재 default 네임스페이스에 생성되는 모든 새 Pod에 imagePullSecret 보안 비밀이 정의됩니다.

자동 Istio 사이드카 삽입을 사용 설정하여 배포

자동 Istio 사이드카 삽입을 사용 설정하여 네임스페이스에서 서비스를 배포하려면 개별 Istio 설치를 사용해야 합니다.

내부 네트워크에서 서비스 배포

내부 네트워크에 서비스 배포는 내부 앱을 직원에게 제공하는 기업과 Cloud Run for Anthos 클러스터 외부에서 실행되는 클라이언트가 사용하는 서비스에 유용합니다.

내부 네트워크에 서비스를 배포하려면 비공개 내부 네트워크 설정을 참조하세요.

다음 단계

새 서비스를 배포한 후에는 다음을 수행할 수 있습니다.

Cloud Build 트리거를 사용하여 Cloud Run for Anthos 서비스의 빌드 및 배포를 자동화할 수 있습니다.