VM 생성 중에 VM에 배포된 컨테이너 마이그레이션

Compute Engine의 컨테이너 시작 에이전트가 지원 중단됩니다. 이 에이전트를 사용하면 VM을 만들 때 Compute Engine 인스턴스에 컨테이너를 배포할 수 있습니다.

이 문서에서는 VM 또는 관리형 인스턴스 그룹 (MIG)에서 시작 에이전트가 만든 기존 컨테이너를 다른Trusted Cloud 서비스로 이전하는 방법을 설명합니다.

요구사항에 따라 지원 중단된 방법을 사용하여 VM에 배포된 컨테이너를 이전하려면 다음 옵션 중 하나를 선택하세요.

  • 개별 VM 및 MIG에서 컨테이너를 계속 실행하려면 시작 스크립트 또는 cloud-init를 사용하세요.
  • 스테이트리스(Stateless) 컨테이너 애플리케이션과 중소 규모 작업이 있는 경우 Cloud Run을 사용하세요.
  • 컨테이너가 명확한 종료 상태가 있고 추가 컴퓨팅 리소스가 필요한 일괄 작업인 경우 Batch를 사용합니다.
  • 고급 제어 및 확장성이 필요하거나 다른 옵션으로 요구사항을 충족할 수 없는 경우 Google Cloud의 GKE를 사용하세요.

자세한 사용 사례 및 대체 솔루션은 컨테이너 배포 옵션 비교를 참고하세요.

VM에서 컨테이너를 구성하기 위한 지원 중단된 옵션

VM을 만드는 동안 컨테이너를 구성하면 Compute Engine은 컨테이너 시작 에이전트를 사용하여 컨테이너 정보를 저장하는 gce-container-declaration 메타데이터를 읽고 VM에 컨테이너를 배포합니다.

컨테이너 시작 에이전트와 gce-container-metadata를 사용하는 VM 또는 MIG에 직접 컨테이너를 배포하는 다음 옵션은 지원 중단됩니다.

콘솔

인스턴스 만들기 페이지의 컨테이너 배포 옵션이 지원 중단됩니다.

컨테이너 배포 옵션

gcloud

VM 또는 인스턴스 템플릿에서 컨테이너를 구성하는 다음 gcloud 명령어는 지원 중단됩니다.

Terraform

컨테이너를 구성하는 Terraform 모듈 gce-containergce-container-declaration 메타데이터 키가 지원 중단됩니다.

지원 중단된 컨테이너 메타데이터를 사용하는 인스턴스 식별

프로젝트의 인스턴스에서 지원 중단된 컨테이너 메타데이터를 사용하는지 확인하려면 gce-container-declaration 메타데이터 키와 값이 있는 인스턴스를 나열하는 다음 Google Cloud CLI 명령어를 실행합니다.

gcloud compute instances list --filter="metadata.items.key:gce-container-declaration"

이 명령어는 구성된 프로젝트에서 gce-container-declaration 메타데이터 키가 포함된 모든 VM 인스턴스의 목록을 제공합니다. 메타데이터 키는 지원 중단 범위에 속하는 VM을 고유하게 식별합니다. 여러 프로젝트를 사용하는 경우 모든 활성 프로젝트에서 이 명령어를 실행합니다.

검증하려는 특정 인스턴스가 있는 경우 다음 Google Cloud CLI 명령어를 실행합니다.

  gcloud compute instances describe VM_NAME --format="(metadata.items)"

VM_NAME을 검증하려는 VM 인스턴스의 이름으로 바꿉니다.

메타데이터 보기에 대한 자세한 내용은 메타데이터 보기 및 쿼리를 참고하세요.

컨테이너 배포 옵션 비교

다음 표에는 VM에서 컨테이너를 실행하는 사용 사례가 요약되어 있으며 워크로드를 마이그레이션하기 위한 대체 컨테이너 솔루션이 권장되어 있습니다.

사용 사례 교체 유형 비용 추천 솔루션
  • VM 또는 MIG에서 컨테이너를 계속 실행합니다.
  • 서버리스 또는 관리형 솔루션에 익숙하지 않습니다.
  • 테스트 및 개발을 위해 컨테이너를 실행합니다.
  • 워크로드가 단일 VM으로 구성되어 있습니다.
  • 권한 모드에서 컨테이너를 실행합니다.
  • 직접 교체 추가 비용 없음 시작 스크립트를 사용하여 VM을 만듭니다.
  • VM 또는 MIG에서 컨테이너를 계속 실행합니다.
  • 단일 VM에서 여러 컨테이너를 실행합니다.
  • 컨테이너 또는 VM에서 고급 시나리오를 구성합니다.
    예를 들어 사용자를 만들거나, 파일을 가져오거나, 디스크를 마운트하거나, 권한 모드를 사용합니다.
  • 워크로드가 여러 VM 또는 MIG로 구성되어 있습니다.
  • 직접 교체 추가 비용 없음 VM 수명 주기 중에 작업을 실행하려면 cloud-init 사용
    명확한 종료 상태가 있고 추가 컴퓨팅 리소스가 필요한 일괄 작업을 실행합니다. 관리형 서비스 워크로드 특성 및 컨테이너 구성의 복잡성에 따라 다릅니다. Batch
  • 스테이트리스(Stateless) 애플리케이션을 실행합니다.
  • 중소 규모 작업을 실행합니다.
  • 관리형 서비스 소규모 워크로드에 적합한 저렴한 솔루션이 없습니다. Cloud Run
  • 기존 GKE 클러스터가 이미 있습니다.
  • 고급 제어 및 확장성이 필요합니다.
  • 관리형 서비스 워크로드 특성 및 컨테이너 구성의 복잡성에 따라 다릅니다. Google Kubernetes Engine

    Compute Engine 컨테이너 시작 에이전트에서 대체 솔루션으로 전환할 때는 다음 필수 변경사항과 이를 구현하는 데 필요한 노력을 고려하세요.

    • Container-Optimized OS를 실행하는 VM: VM 및 컨테이너 런타임 설정, 구성, 보안, 유지관리의 전체 소유권을 가져옵니다. 여기에는 시작 스크립트 또는 cloud-init를 사용한 스크립팅이 포함되는 경우가 많습니다.
    • Cloud Run 또는 Batch: 애플리케이션이 상태 비저장이고 요청 기반 또는 작업 기반 실행 모델에 적합한지 확인합니다. 이 접근 방식에는 외부 상태 관리 서비스와 작동하도록 애플리케이션을 조정하는 것이 포함될 수 있습니다.
    • GKE: Kubernetes 원칙을 채택하고, Kubernetes 매니페스트 파일을 사용하여 워크로드를 정의하고, 클러스터 리소스를 관리합니다.

    시작 스크립트를 사용하여 VM에 컨테이너 배포

    시작 스크립트를 사용하여 VM에서 기본 컨테이너를 실행할 수 있습니다.

    시작 스크립트를 사용하여 컨테이너를 구성할 때는 다음 사항을 고려하세요.

    • 기본 시나리오에는 시작 스크립트를 사용할 수 있습니다. 고급 구성의 경우 cloud-init 사용을 고려하세요.
    • 시작 스크립트를 사용하여 구성된 컨테이너로 새 VM을 만들기 때문에 기존 VM에 배포된 워크로드의 전환을 계획해야 합니다.
    • 컨테이너가 있는 새로 만든 VM으로 트래픽을 라우팅하기 전에 모든 것이 예상대로 작동하는지 테스트하고 확인합니다.

    VM을 만들고 VM 또는 MIG에 컨테이너를 배포하려면 다음을 수행하세요.

    1. VM 메타데이터의 현재 컨테이너를 시작 스크립트 명령에 매핑
    2. 기존 메타데이터 구성을 기반으로 시작 스크립트 만들기
    3. 시작 스크립트를 사용하여 VM 만들기 또는 시작 스크립트를 사용하여 MIG 만들기

    컨테이너 메타데이터를 docker run 명령에 매핑

    VM 메타데이터 또는 gcloud 플래그를 docker run 인수에 매핑하고 VM 생성용 시작 스크립트에 이를 포함할 수 있습니다.

    일부 gcloud 플래그는 VM 메타데이터로 직접 변환됩니다. 이러한 플래그는 docker run 플래그로 직접 변환되기도 합니다. VM에 기존 컨테이너가 있는 경우 VM 메타데이터 구성을 읽고 이에 상응하는 docker run 명령어를 사용하여 시작 스크립트를 빌드할 수 있습니다.

      # Get your existing VM instance configuration in yaml format
      gcloud compute instances describe VM_NAME --format="(metadata.items)"
    

    출력은 다음과 비슷합니다.

      metadata:
        items:
        - key: gce-container-declaration
          value: |
            spec:
              containers:
              - args:
                - '"hello world!"'
                command:
                - echo
                env:
                - name: ONE
                  value: '1'
                image: docker.io/library/busybox
                name: my-instance
                securityContext:
                  privileged: true
                stdin: true
                tty: true
              restartPolicy: Always
        - key: google-logging-enabled
          value: 'true'
    

    다음 표를 사용하여 기존 사양을 docker run 명령어에 매핑합니다.

    Google Cloud CLI 플래그 VM 메타데이터 키 Docker run 명령어
    --container-image containers.image 플래그 없이 인수로 지정합니다.
    예를 들면 다음과 같습니다.
    docker run gcr.io/google-containers/busybox
    --container-command command 컨테이너 이미지 이름 뒤에 플래그 없이 인수로 지정합니다.
    예를 들면 다음과 같습니다.
    docker run gcr.io/google-containers/busybox echo "hello world"
    --container-arg args 명령어 뒤에 플래그 없이 인수로 지정합니다.
    예를 들면 다음과 같습니다.
    docker run gcr.io/google-containers/busybox echo "hello world"
    --container-env containers.env array --env KEY=VALUE [--env KEY=VALUE ...]
    --container-restart-policy restartPolicy --restart
    가능한 값은 no, on-failure, always입니다. 기본값은 no입니다.
    --container-stdin containers.stdin -i
    불리언 플래그입니다. 있으면 true이고 기본적으로 false입니다.
    --container-tty containers.tty -t
    불리언 플래그입니다. 있으면 true이고 기본적으로 false입니다.
    --container-privileged containers.securityContext.privileged --privileged
    불리언 플래그입니다. 있으면 true이고 기본적으로 false입니다.
    --container-mount-disk - 이에 상응하는 docker run 명령어가 없습니다.
    디스크를 마운트할 수 있습니다.

    시작 스크립트 예시

    다음 예는 시작 스크립트에 docker 명령어를 포함하는 방법을 보여줍니다.

    • 예 1: Container-Optimized OS 기반 VM에서 독립형 컨테이너를 실행합니다.
    • 예 2: Container-Optimized OS 기반 VM에서 웹 서버 컨테이너를 실행합니다.

    예 1

    Container-Optimized OS 기반 VM에서 독립형 컨테이너를 실행합니다.

    #!/bin/bash
    
    # A name for the container
    CONTAINER_NAME="my-app-container"
    
    # Stop and remove the container if it exists
    docker stop $CONTAINER_NAME || true
    docker rm $CONTAINER_NAME || true
    
    # Pull the latest version of the container image from Docker Hub
    docker pull busybox:latest
    
    # Run docker container from image in docker hub
    docker run busybox:latest \
      echo "hello world!"
    

    예 2

    Container-Optimized OS 기반 VM에서 웹 서버 컨테이너를 실행합니다.

    #!/bin/bash
    
    # Enable incoming traffic
    iptables -A INPUT -j ACCEPT
    
    # A name for the container
    CONTAINER_NAME="my-app-container"
    
    # Stop and remove the container if it exists
    docker stop $CONTAINER_NAME || true
    docker rm $CONTAINER_NAME || true
    
    # Pull the latest version of the container image from Docker Hub
    docker pull nginx:latest
    
    # Run docker container from image in docker hub
    docker run \
      --name=$CONTAINER_NAME \
      --privileged \
      --restart=always \
      --tty \
      --detach \
      --network="host" \
      nginx:latest
    

    컨테이너 배포를 위한 추가 구성 옵션

    이 섹션에서는 VM에 컨테이너를 배포하기 위한 추가 구성 매개변수를 설명합니다.

    이러한 옵션에 관한 자세한 내용은 컨테이너 실행을 위한 옵션 구성을 참고하세요.

    Artifact Registry 이미지 액세스

    gcr.io 또는 pkg.dev의 컨테이너 이미지에 액세스해야 하는 경우 Container-Optimized OS에 사전 설치된 docker-credential-gcr 도구를 사용하고 Docker용 Artifact Registry에 대한 인증을 구성하세요. 컨테이너를 실행하기 전에 다음 명령어를 실행합니다.

      # Set home directory to save docker credentials
      HOME=/home/appuser
    
      # Configure docker with credentials for gcr.io and pkg.dev
      docker-credential-gcr configure-docker
    

    자세한 내용은 Docker용 Artifact Registry에 대한 인증 구성을 참고하세요.

    로깅 구성

    VM에서 로깅 에이전트를 사용 설정하여 Cloud Logging을 사용하는 것이 좋습니다.

    또는 로깅 드라이버를 변경하려면 docker run 명령어에 --log-driver 매개변수를 포함하면 됩니다.

      # Use Cloud Logging logging driver
      docker run --log-driver=gcplogs nginx:latest
    

    자세한 내용은 Container-Optimized OS로 Cloud Logging 사용을 참고하세요.

    내부 방화벽 구성

    Container-Optimized OS는 기본적으로 수신 트래픽을 거부하므로 해당 트래픽을 허용하는 iptables 규칙을 추가해야 합니다. 이러한 명령어는 호스트 운영체제의 내부 방화벽을 구성합니다. 또한 새 VM으로 트래픽을 허용하도록 Virtual Private Cloud 방화벽을 구성해야 합니다.

    자세한 내용은 VPC 방화벽 규칙 사용을 참고하세요.

      # Enable all incoming and routed traffic
      iptables -A INPUT -p -j ACCEPT
      iptables -A FORWARD -p -j ACCEPT
    

    자세한 내용은 호스트 방화벽 구성을 참고하세요.

    컨테이너에 볼륨 연결

    볼륨이 컨테이너에 연결된 경우 컨테이너 메타데이터에는 volumes 항목과 volumeMounts 배열이 포함됩니다. volumes의 항목 namevolumeMounts의 항목 이름에 해당하며, 반대의 경우도 마찬가지입니다. 수집하는 각 볼륨에 대해 volumes 또는 volumeMounts 항목에서 필수 정보를 수집합니다.

    컨테이너에 연결된 볼륨이 없으면 이 섹션을 건너뛰고 시작 스크립트를 사용하여 VM을 직접 만드세요.

    Container-Optimized OS의 디스크 및 파일 시스템에 대한 자세한 내용은 디스크 및 파일 시스템 개요를 참고하세요.

    tmpfs 파일 시스템 마운트

    비어 있는 tmpfs 파일 시스템을 컨테이너에 마운트하려면 docker run 명령어와 함께 --tmpfs 인수를 지정합니다. 예를 들어 nginx 컨테이너에 캐시 파일 시스템을 마운트하려면 다음 명령어를 실행합니다.

      # mount a cache file system to the nginx container
      docker run -d --name=$CONTAINER_NAME --tmpfs /var/cache/nginx:rw,size=512m,noexec,nosuid,nodev --network="host" nginx:latest
    

    tmpfs 파일 시스템 마운트에 관한 자세한 내용은 tmpfs 마운트를 참고하세요.

    호스트 디렉터리 마운트

    호스트 VM에서 컨테이너로 디렉터리를 마운트하려면 docker run 명령어와 함께 --mount 인수를 지정합니다.

      # mount a read-only directory to the nginx container
      docker run -d --name=$CONTAINER_NAME --mount type=bind,source=/var/www/html,target=/usr/share/nginx/html,ro nginx:latest
    

    자세한 내용은 바인드 마운트를 참고하세요.

    영구 디스크를 컨테이너에 마운트

    컨테이너에 디스크를 마운트하려면 추가 단계가 필요합니다. 디스크를 마운트하려면 먼저 VM에 마운트한 다음 해당 디스크를 컨테이너에 마운트합니다.

    1. 디스크를 VM에 마운트하려면 다음 명령어를 실행합니다.

      #!/bin/bash
      
      DISK_DEVICE_NAME="my-persistent-disk" # This name MUST match the 'device-name' in the gcloud --disk flag
      DISK_BY_ID_PATH="/dev/disk/by-id/google-${DISK_DEVICE_NAME}"
      HOST_MOUNT_POINT="/mnt/disks/my-persistent-disk" # This is the path where the disk will be mounted on the VM
      CONTAINER_MOUNT_PATH="/usr/share/my-persistent-disk" # This is the path where the disk will be mounted in the container
      
      # format a disk as an ext4 filesystem, if it doesn't already contain one
      file -sL $DISK_BY_ID_PATH | grep -q filesystem || \
              mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard $DISK_BY_ID_PATH
      
      # create a directory for mounting point
      sudo mkdir -p "${HOST_MOUNT_POINT}"
      
      # mount a disk to the VM
      sudo mount -o defaults,discard "${DISK_BY_ID_PATH}" "${HOST_MOUNT_POINT}"
      
    2. VM에 디스크를 마운트한 후 docker run 명령어로 --mount 플래그를 추가하여 디스크를 컨테이너에 마운트합니다.

      docker run -d --name=$CONTAINER_NAME --mount type=bind,source="${HOST_MOUNT_POINT}",target="${CONTAINER_MOUNT_PATH}",readonly nginx:latest
      

    시작 스크립트를 사용하여 VM 만들기

    컨테이너 구성으로 시작 스크립트를 만든 후 이 시작 스크립트를 사용하여 Container-Optimized OS 기반 VM을 만듭니다. Container-Optimized OS 기반 VM 만들기에 대한 자세한 내용은 공개 이미지에서 인스턴스 만들기를 참고하세요.

    시작 스크립트 사용에 대한 자세한 내용은 Linux VM에서 시작 스크립트 사용을 참고하세요.

    콘솔

    1. Trusted Cloud 콘솔에서 인스턴스 만들기 페이지로 이동합니다.

      인스턴스 만들기로 이동

      메시지가 표시되면 프로젝트를 선택하고 계속을 클릭합니다. 인스턴스 만들기 페이지가 표시되고 머신 구성 창이 표시됩니다.

    2. 머신 구성 창에서 VM의 머신 계열과 머신 유형을 선택합니다.

    3. 탐색 메뉴에서 OS 및 스토리지를 클릭합니다. 운영체제 및 스토리지 창이 표시되면 다음을 수행하여 부팅 디스크를 구성합니다.

      1. 변경을 클릭합니다. 부팅 디스크 창이 표시되고 공개 이미지 탭이 표시됩니다.
      2. 운영체제 목록에서 Container Optimized OS를 선택합니다.
      3. 버전 목록에서 OS 버전을 선택합니다.
      4. 부팅 디스크 유형 목록에서 부팅 디스크 유형을 선택합니다.
      5. (선택사항) 디스크가 추가로 필요한 경우 추가 디스크 섹션에서 디스크를 추가합니다.
      6. 선택을 클릭합니다.
    4. 탐색 메뉴에서 고급을 클릭합니다.

      1. 자동화 섹션에 컨테이너 배포를 위해 만든 시작 스크립트를 붙여넣습니다.
    5. 만들기를 클릭하여 VM을 만들고 시작합니다.

    gcloud

    gcloud CLI를 사용하는 경우 시작 스크립트를 별도의 파일에 저장합니다.

    1. 시작 스크립트를 사용하여 VM을 만들려면 다음 명령어를 실행합니다.

      gcloud compute instances create VM_NAME \
          --zone=ZONE \
          --image-family=IMAGE_FAMILY \
          --image-project=IMAGE_PROJECT \
          --machine-type=MACHINE_TYPE \
          --metadata-from-file=startup-script=STARTUP_SCRIPT_FILE
      

      다음을 바꿉니다.

      • VM_NAME: 새 VM의 이름입니다.
      • ZONE: 인스턴스를 만들 영역
      • IMAGE_PROJECT: 이미지가 포함된 Container-Optimized OS 이미지 프로젝트입니다(예: cos-cloud).
      • IMAGE_FAMILY: Container-Optimized OS 이미지 계열입니다(예: cos-stable).
      • MACHINE_TYPE: 새 VM의 머신 유형입니다. 사전 정의된 머신 유형 또는 커스텀 머신 유형일 수 있습니다.
      • STARTUP_SCRIPT_FILE: 머신에서 시작 스크립트 파일의 상대 경로입니다(예: ./startup_script.sh).

      예:

      # Create COS-based VM by using a startup script
      gcloud compute instances create "cos-instance-with-startup-script" \
      --zone="us-central1-c" \
      --machine-type="e2-medium" \
      --image-family="cos-stable" \
      --image-project="cos-cloud" \
      --metadata-from-file=startup-script="./startup_script.sh"
      
    2. 다음 명령어를 실행하여 Compute Engine에서 VM을 만들었는지 확인합니다.

      gcloud compute instances describe VM_NAME
      

      VM_NAME을 생성한 VM의 이름으로 바꿉니다.

    Terraform

    VM을 만들려면 google_compute_instance 리소스를 사용하면 됩니다.

    provider "google" {
    project = "PROJECT_ID"
    }
    
    resource "google_compute_instance" "cos_vm_instance" {
    name         = "VM_NAME"
    machine_type = "MACHINE_TYPE"
    zone         = "ZONE"
    
    # Use a Container-Optimized OS image for the boot disk
    boot_disk {
      initialize_params {
        image = "IMAGE_PROJECT/IMAGE_FAMILY"
      }
    }
    
    # Attaches the instance to the default network
    network_interface {
      network = "default"
    }
    
    # Specify the relative path to the startup script on your local machine
    metadata = {
      startup-script = file("STARTUP_SCRIPT_FILE")
    }
    }
    

    다음을 바꿉니다.

    • VM_NAME: 새 VM의 이름
    • ZONE: 인스턴스를 만들 영역
    • IMAGE_PROJECT: 이미지가 포함된 Container-Optimized OS 이미지 프로젝트입니다(예: cos-cloud).
    • IMAGE_FAMILY: Container-Optimized OS 이미지 패밀리입니다(예: cos-stable).
    • MACHINE_TYPE: 새 VM의 머신 유형입니다. 사전 정의된 머신 유형 또는 커스텀 머신 유형일 수 있습니다.
    • STARTUP_SCRIPT_FILE: 머신에서 시작 스크립트 파일의 상대 경로입니다(예: ./startup_script.sh).

    예:

    provider "google" {
      project = "my-project"
    }
    
    resource "google_compute_instance" "my_container_vm" {
      name = "my-container-vm-startup"
      machine_type = "e2-medium"
      zone = "us-central1-a"
    
      boot_disk {
        initialize_params {
          image = "cos-cloud/cos-stable"
        }
      }
    
      network_interface {
        network = "default"
      }
    
      metadata = {
        startup-script = file("./startup_script.sh")
      }
    }
    

    시작 스크립트를 사용하여 MIG 만들기

    시작 스크립트를 사용하여 인스턴스 템플릿을 만든 후 다음 방법 중 하나를 사용하여 MIG를 만듭니다.

    MIG 만들기에 대한 자세한 내용은 관리형 인스턴스 그룹 만들기를 참고하세요.

    콘솔

    1. 이전 섹션에서 만든 시작 스크립트를 기반으로 하는 인스턴스 템플릿을 만듭니다.

      1. 운영체제 섹션에서 Container Optimized OS와 버전을 선택합니다.
      2. 자동화 섹션에 컨테이너 배포를 위해 만든 시작 스크립트를 붙여넣습니다.
    2. 이전 단계에서 만든 인스턴스 템플릿을 사용하여 MIG를 만듭니다.

    gcloud

    1. instance-templates create 명령어를 사용하여 인스턴스 템플릿을 만듭니다.

      VM에 Container-Optimized OS 이미지를 사용해야 합니다. --metadata-from-file 플래그에서 시작 스크립트 파일의 상대 경로를 지정할 수 있습니다.

    2. 이전 단계에서 만든 인스턴스 템플릿을 사용하여 MIG를 만듭니다.

    예:

      # Create the instance template that uses a startup script
      gcloud compute instance-templates create startup-template \
          --machine-type=e2-medium \
          --image-family=cos-stable \
          --image-project=cos-cloud \
          --metadata-from-file=startup-script=./startup_script.sh
    
      # Create the managed instance group
        gcloud compute instance-groups managed create startup-mig \
          --template=startup-template \
          --size=2 \
          --zone=us-central1-a
    

    Terraform

    google_compute_instance_templategoogle_compute_instance_group_manager 리소스를 사용하여 다음 예와 같이 인스턴스 템플릿과 MIG를 만듭니다.

    :

    resource "google_compute_instance_template" "startup_template" {
      name_prefix = "startup-template-"
      machine_type = "e2-medium"
      disk {
        source_image = "cos-cloud/cos-stable"
        auto_delete  = true
        boot         = true
      }
    
      network_interface {
        network = "default"
      }
      metadata = {
        startup-script = file("./startup_script.sh")
    }
    }
    
    resource "google_compute_instance_group_manager" "startup_mig" {
      name               = "startup-mig"
      base_instance_name = "startup-vm"
      zone               = "us-central1-a"
      version {
        instance_template = google_compute_instance_template.startup_template.id
      }
      target_size = 2
    }
    

    테스트 및 정리

    VM 또는 MIG를 만든 후 애플리케이션이 컨테이너에서 실행되고 예상대로 작동하는지 확인합니다. 문제를 해결하려면 문제 해결을 참고하세요.

    시작 스크립트를 사용하여 만든 새 VM에서 애플리케이션이 성공적으로 실행되면 컨테이너 배포의 지원 중단된 방법을 사용하는 VMMIG를 삭제할 수 있습니다.

    문제 해결

    시작 스크립트를 사용하여 VM에서 컨테이너를 구성할 때 발생할 수 있는 문제를 해결하려면 시작 스크립트 로그와 컨테이너 로그를 확인하세요.

    • VM 인스턴스에서 시작 스크립트 로그를 보려면 다음 명령어를 실행합니다.

      sudo journalctl | grep "startup script"
      
    • Docker 컨테이너의 로그를 보려면 docker logs 명령어를 실행합니다.

      docker logs CONTAINER_NAME
      

      CONTAINER_NAME을 컨테이너의 이름으로 바꿉니다.

    다른 문제 해결은 다음 문서를 참고하세요.

    Container-Optimized OS에서 cloud-init 사용

    업계 표준 크로스 플랫폼 솔루션인 cloud-init를 사용하여 Container-Optimized OS를 실행하는 VM에 컨테이너를 배포할 수 있습니다. 이 도구를 사용하면 VM 생성 또는 시작 중에 맞춤 구성을 실행할 수 있습니다. 자세한 내용은 Cloud 구성 형식으로 cloud-init 사용을 참고하세요.

    컨테이너 배포에 관리형 서비스 사용

    이 섹션에서는 컨테이너를 배포하는 데 사용할 수 있는 Trusted Cloud by S3NS 에서 제공하는 관리형 서비스를 설명합니다.

    Cloud Run

    Cloud Run은 스테이트리스 컨테이너 애플리케이션과 중소 규모 작업에 적합합니다.

    Cloud Run의 주요 기능은 다음과 같습니다.

    • 요청 처리 중에만 CPU를 할당하거나 항상 CPU를 할당할 수 있습니다.
    • 스테이트리스 컨테이너 애플리케이션을 실행하거나 일회성으로, 일정에 따라 또는 워크플로의 일부로 작업을 실행할 수 있습니다.
    • 각 요청 또는 작업에 제한 시간을 구성할 수 있습니다.
    • 확장성이 뛰어나고 안전합니다.
    • 통합 부하 분산 및 자동 확장 기능이 있습니다.

    Cloud Run에 컨테이너를 배포하는 방법에 대한 자세한 내용은 Cloud Run에 컨테이너 이미지 배포를 참고하세요.

    일괄

    Batch는 Trusted Cloud by S3NS 리소스에서 일괄 처리 워크로드를 예약, 큐에 추가, 실행할 수 있게 해주는 완전 관리형 서비스입니다. 컨테이너에 패키지된 워크로드를 비롯해 일괄 스타일의 병렬화 가능한 워크로드를 실행하도록 설계되었습니다.

    Batch에 컨테이너를 배포하는 방법에 대한 자세한 내용은 다음 문서를 참고하세요.

    Google Kubernetes Engine

    복잡한 애플리케이션, 마이크로서비스, 지속적인 운영을 실행하고 세부적인 제어 및 확장성이 필요한 경우 Google Kubernetes Engine (GKE)이 가장 적합한 제품입니다. GKE에 컨테이너를 배포하는 방법에 대한 자세한 내용은 다음 문서를 참고하세요.

    지원 받기

    마이그레이션 프로세스에 대해 궁금한 점이 있거나 도움이 필요한 경우 FAQ를 검토하거나 Trusted Cloud 지원팀에 문의하세요.