스토리지 풀의 디스크를 VM에 추가


Hyperdisk Storage Pool에 디스크를 만든 다음 디스크를 가상 머신(VM) 인스턴스에 연결하거나 VM을 만들 때 스토리지 풀에 디스크를 만들 수 있습니다.

시작하기 전에

  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. Go

      이 페이지의 Go 샘플을 로컬 개발 환경에서 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      자세한 내용은 다음을 참조하세요: Set up authentication for a local development environment.

      Java

      이 페이지의 Java 샘플을 로컬 개발 환경에서 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      자세한 내용은 다음을 참조하세요: Set up authentication for a local development environment.

      Node.js

      이 페이지의 Node.js 샘플을 로컬 개발 환경에서 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      자세한 내용은 다음을 참조하세요: Set up authentication for a local development environment.

      REST

      로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공하는 사용자 인증 정보를 사용합니다.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      자세한 내용은 Google Cloud 인증 문서의 REST 사용 인증을 참조하세요.

필수 역할 및 권한

스토리지 풀에 하이퍼디스크 균형 또는 하이퍼디스크 처리량 디스크를 만드는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

  • Compute 인스턴스 관리자(v1)(roles/compute.instanceAdmin.v1)
  • 서비스 계정으로 실행할 수 있는 VM 인스턴스에 연결: 서비스 계정 사용자(v1)(roles/iam.serviceAccountUser 역할)

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

이러한 사전 정의된 역할에는 스토리지 풀에 하이퍼디스크 균형 또는 하이퍼디스크 처리량 디스크를 만드는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

필수 권한

스토리지 풀에 하이퍼디스크 균형 또는 하이퍼디스크 처리량 디스크를 만들려면 다음 권한이 필요합니다.

  • 스토리지 풀에 디스크를 만들고 디스크를 VM 인스턴스에 연결하려면:
    • 프로젝트에 대한 compute.disks.create 권한
    • VM에 대한 compute.instances.attachDisk 권한
    • VM에 연결할 볼륨에 대한 compute.disks.use 권한
    • 디스크를 만들 스토리지 풀에 대한 compute.storagePools.use 권한
  • 연결된 볼륨을 포맷하고 마운트하려면: VM에 대한 compute.instances.setMetadata 권한

커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

인스턴스를 만드는 데 필요한 권한은 필수 권한을 참조하세요.

제한사항

하이퍼디스크 스토리지 풀에서 디스크 만들기에 대한 다음 제한사항을 검토하세요.

  • 하이퍼디스크 균형 스토리지 풀에서는 하이퍼디스크 균형 디스크만 만들 수 있으며 하이퍼디스크 처리량 스토리지 풀에서는 하이퍼디스크 처리량 디스크만 만들 수 있습니다.
  • 동일한 프로젝트 및 영역의 새 디스크만 스토리지 풀에 만들 수 있습니다.
  • 스토리지 풀에 부팅 디스크를 만들려면 하이퍼디스크 균형 스토리지 풀을 사용해야 합니다.
  • 디스크를 스토리지 풀 안팎으로 이동할 수 없습니다. 디스크를 스토리지 풀 안팎으로 이동하려면 스냅샷에서 디스크를 다시 만들어야 합니다. 자세한 내용은 디스크 유형 변경을 참조하세요.
  • 스토리지 풀에 최대 1,000개의 디스크를 만들 수 있습니다.
  • 스토리지 풀은 리전 디스크를 지원하지 않습니다.

프로비저닝 옵션

하이퍼디스크 스토리지 풀의 프로비저닝 유형에 따라 스토리지 풀에 만드는 각 디스크의 용량과 성능을 모두 프로비저닝할 방법을 선택할 수 있습니다.

디스크 용량 프로비저닝

고급 용량 스토리지 풀을 만드는 경우 씬 프로비저닝을 사용할 수 있습니다. 스토리지 풀에서 누적 크기가 풀의 프로비저닝된 용량을 초과하는 디스크를 만들 수 있습니다. 스토리지 풀의 사용된 용량은 프로비저닝한 디스크 공간의 크기가 아니라 사용 중인 총 데이터로 정의됩니다. 고급 용량 스토리지 풀의 프로비저닝된 용량의 최대 500%까지 집계 용량을 사용하여 디스크를 프로비저닝할 수 있습니다.

표준 용량 스토리지 풀에 디스크를 만드는 경우 스토리지 풀의 모든 디스크 총 크기가 스토리지 풀의 프로비저닝된 용량에 도달할 때까지 스토리지 풀에 디스크를 만듭니다. 표준 용량이 있는 스토리지 풀의 디스크는 디스크를 만들 때 용량이 소비되는 풀이 아닌 디스크와 유사하게 작동합니다.

성능 프로비저닝

고급 성능 스토리지 풀을 만드는 경우 씬 프로비저닝을 사용할 수 있습니다. 스토리지 풀에서 누적 IOPS 및 처리량이 풀의 프로비저닝된 성능을 초과하는 디스크를 만들 수 있습니다. 스토리지 풀의 사용된 성능은 각 디스크에 프로비저닝된 성능 양이 아니라 디스크에서 사용한 총 성능으로 정의됩니다. 고급 성능 스토리지 풀의 프로비저닝된 성능의 최대 500%까지 집계 성능을 사용하여 디스크를 프로비저닝할 수 있습니다.

표준 성능 스토리지 풀에 디스크를 만드는 경우 디스크에 프로비저닝하는 IOPS 또는 처리량은 하이퍼디스크 스토리지 풀에서 사용 가능한 IOPS 또는 처리량보다 작아야 합니다. 사용 가능한 IOPS 또는 처리량은 스토리지 풀을 위해 프로비저닝된 양에서 스토리지 풀에 생성된 모든 디스크의 사용된 양을 뺀 값입니다.

이전 단락의 조건이 충족되지 않으면 스토리지 풀에 디스크 만들기 요청이 실패하고 디스크가 생성되지 않습니다.

예시

100,000의 프로비저닝된 IOPS가 있는 하이퍼디스크 균형 스토리지 풀이 있다고 가정해 보겠습니다.

표준 성능 프로비저닝을 사용하면 다음과 같은 이점이 있습니다.

  • 스토리지 풀에 하이퍼디스크 균형 디스크를 만들 때 최대 100,000의 집계 IOPS를 프로비저닝할 수 있습니다.
  • 프로비저닝된 하이퍼디스크 균형 스토리지 풀 성능의 IOPS 100,000에 대해 요금이 청구됩니다.
  • 스토리지 풀 외부에서 만든 디스크와 마찬가지로 표준 성능 스토리지 풀의 하이퍼디스크 균형 디스크는 최대 3,000의 기준 IOPS와 140MiB/s의 기준 처리량으로 자동 프로비저닝됩니다. 이 기준 성능은 스토리지 풀에 대해 프로비저닝된 성능에 포함되지 않습니다. 기준보다 높은 프로비저닝된 성능으로 스토리지 풀에 디스크를 추가하는 경우에만 스토리지 풀의 프로비저닝된 성능에 반영됩니다. 예를 들면 다음과 같습니다.

    • 3,000 IOPS로 프로비저닝된 디스크는 0 풀 IOPS를 사용하며 풀의 다른 디스크에 사용 가능한 100,000 IOPS는 여전히 제공됩니다.
    • IOPS 13,000으로 프로비저닝된 디스크는 10,000 풀 IOPS를 사용하며 풀에는 스토리지 풀의 다른 디스크에 할당할 수 있는 프로비저닝된 IOPS가 90,000 남아 있습니다.

고급 성능 프로비저닝을 사용하면 다음과 같은 이점이 있습니다.

  • 스토리지 풀에 디스크를 만들 때 최대 500,000 IOPS의 집계 하이퍼디스크 성능을 프로비저닝할 수 있습니다.
  • 스토리지 풀에서 프로비저닝된 100,000 IOPS의 요금이 부과됩니다.
  • 스토리지 풀에서 5,000 IOPS의 단일 디스크(Disk1)를 만드는 경우 스토리지 풀 프로비저닝 IOPS에서 IOPS를 소비하지 않습니다. 그러나 스토리지 풀에서 만든 새 디스크에 프로비저닝할 수 있는 IOPS의 양은 이제 495,000입니다.
  • Disk1에서 데이터 읽기 및 쓰기를 시작하고 지정된 1분 동안 최대 5,000 IOPS를 사용하는 경우 스토리지 풀의 프로비저닝된 IOPS에서 5,000 IOPS를 사용합니다. 동일한 스토리지 풀에서 만든 다른 디스크는 경합 없이 같은 1분 동안 집계된 IOPS를 최대 95,000 사용할 수 있습니다.

스토리지 풀에 디스크 만들기

Google Cloud 콘솔, Google Cloud CLI, REST를 사용하여 스토리지 풀에 디스크를 만들 수 있습니다.

콘솔

Google Cloud 콘솔을 사용하면 스토리지 풀 페이지 또는 디스크 페이지를 통해 스토리지 풀에 새 디스크를 만들 수 있습니다.

스토리지 풀 페이지에서 다음을 수행합니다.

  1. Google Cloud 콘솔에서 스토리지 풀 페이지로 이동합니다.

    스토리지 풀 페이지로 이동

  2. 디스크를 만들려는 스토리지 풀의 이름을 클릭합니다.

  3. 스토리지 풀 관리 페이지에서 +새 디스크 만들기를 클릭합니다.

  4. 새 디스크 추가 패널에서 디스크의 이름을 입력합니다.

  5. 기본값을 사용하지 않는 경우 값을 지정하거나 변경합니다.

  6. 디스크 속성 지정이 완료되면 저장을 클릭합니다.

  7. 스토리지 풀 관리 페이지의 스토리지 풀 디스크 섹션에 새 디스크가 나열됩니다.

디스크 만들기 페이지에서 다음을 수행합니다.

  1. Google Cloud 콘솔에서 디스크 > 디스크 만들기 페이지로 이동합니다.

    디스크 만들기 페이지로 이동

  2. 디스크 이름을 입력합니다.

  3. 디스크를 만들 스토리지 풀이 포함된 영역을 선택합니다.

  4. 디스크 유형에 하이퍼디스크 스토리지 풀과 일치하는 디스크 유형(하이퍼디스크 처리량 또는 하이퍼디스크 균형)을 선택합니다.

  5. 필요에 따라 크기, 프로비저닝된 IOPS, 프로비저닝된 처리량 필드의 값을 수정합니다.

  6. 스토리지 풀 섹션에서 스토리지 풀 사용 설정을 선택한 다음 디스크를 만들 스토리지 풀의 이름을 선택합니다. 선택한 영역에 있는 스토리지 풀만 목록에 표시됩니다.

  7. 디스크 정보 지정을 완료했으면 만들기를 클릭합니다.

gcloud

스토리지 풀에 디스크를 하나 이상 만들려면 gcloud compute disks create 명령어를 사용합니다.

gcloud compute disks create DISK_NAME \
    --zone=ZONE \
    --storage-pool=STORAGE_POOL_NAME \
    --size=SIZE \
    --type=DISK_TYPE \
    --provisioned-iops=PROVISIONED_IOPS \
    --provisioned-throughput=PROVISIONED_THROUGHPUT

다음을 바꿉니다.

  • DISK_NAME: 디스크의 고유한 이름입니다. 공백으로 지정된 디스크 이름 목록을 제공하여 동일한 속성으로 여러 디스크를 만들 수 있습니다.
  • ZONE: 스토리지 풀이 생성된 영역입니다. 이 값을 리전-영역 형식으로 지정합니다(예: us-central1-a).
  • STORAGE_POOL_NAME: 디스크를 만들 스토리지 풀의 이름입니다.
  • SIZE: (선택사항) 새 디스크의 프로비저닝된 용량입니다. 값은 정수이며 뒤에 크기 단위(기비바이트는 GB, 테비바이트는 TB)가 와야 합니다. 크기를 지정하지 않으면 100GB가 기본값으로 사용됩니다.
  • DISK_TYPE: 만들려는 디스크의 유형입니다. 하이퍼디스크 스토리지 풀 유형(hyperdisk-balanced 또는 hyperdisk-throughput)과 일치해야 합니다.
  • PROVISIONED_IOPS: (선택사항) 디스크에 프로비저닝할 IOPS입니다. 이 플래그는 하이퍼디스크 균형 디스크에만 사용할 수 있습니다.
  • PROVISIONED_THROUGHPUT: (선택사항) 디스크에 프로비저닝할 초당 메비바이트(MB)의 처리량입니다.

REST

스토리지 풀에 디스크를 하나 이상 만들려면 disks.insert 메서드를 사용하여 POST를 구성합니다. name, sizeGb, type, storagePool, provisionedIops, provisionedThroughput 속성을 포함합니다. 이 디스크를 비어 있고 포맷되지 않은 비부팅 디스크로 만들려면 소스 이미지 또는 소스 스냅샷을 지정하지 마세요.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks

{
    "name": "DISK_NAME",
    "description": "DESCRIPTION",
    "type": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE",
    "sizeGb": "DISK_SIZE",
    "storagePool": "STORAGE_POOL_NAME",
    "provisionedIops": "IOPS_LIMIT",
    "provisionedThroughput": "THROUGHPUT_LIMIT",
}

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.
  • ZONE: 스토리지 풀이 있는 영역입니다(예: us-central1-a). 디스크가 생성될 영역입니다.
  • DISK_NAME: 디스크의 고유한 이름입니다.
  • DESCRIPTION: (선택사항) 디스크를 설명하는 텍스트 문자열입니다.
  • DISK_TYPE: 스토리지 풀 유형과 일치해야 하는 디스크 유형입니다. hyperdisk-throughput 또는 hyperdisk-balanced를 사용합니다.
  • DISK_SIZE: (선택사항) 새 디스크의 크기입니다. 값은 정수이며 뒤에 크기 단위(기비바이트는 GB, 테비바이트는 TB)가 와야 합니다. 크기를 지정하지 않으면 100GB가 기본값으로 사용됩니다.
  • STORAGE_POOL_NAME: 디스크를 만들 스토리지 풀의 이름입니다.
  • IOPS_LIMIT: (선택사항) 디스크에 프로비저닝할 IOPS입니다. 이 플래그는 하이퍼디스크 균형 디스크에만 사용할 수 있습니다.
  • THROUGHPUT_LIMIT: (선택사항) 디스크에 프로비저닝할 초당 메비바이트(MB)의 처리량입니다.

Go


// createDiskInStoragePool creates a new Hyperdisk in the specified storage pool.
func createDiskInStoragePool(w io.Writer, projectId, zone, diskName, storagePoolName, diskType string) error {
	// Example usage:
	//   projectID := "your_project_id"
	//   zone := "europe-central2-b"
	//   diskName := "your_disk_name"
	//   storagePoolName := "https://www.googleapis.com/compute/v1/projects/your_project_id/zones/europe-central2-b/storagePools/your_storage_pool"
	//   diskType := "zones/europe-central2-b/diskTypes/hyperdisk-balanced"

	ctx := context.Background()
	client, err := compute.NewDisksRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewDisksRESTClient: %v", err)
	}
	defer client.Close()

	// Create the disk resource
	disk := &computepb.Disk{
		Name:                  proto.String(diskName),
		Type:                  proto.String(diskType),
		SizeGb:                proto.Int64(50),
		Zone:                  proto.String(zone),
		StoragePool:           proto.String(storagePoolName),
		ProvisionedIops:       proto.Int64(10000),
		ProvisionedThroughput: proto.Int64(1024),
	}

	// Create the insert disk request
	req := &computepb.InsertDiskRequest{
		Project:      projectId,
		Zone:         zone,
		DiskResource: disk,
	}

	// Send the insert disk request
	op, err := client.Insert(ctx, req)
	if err != nil {
		return fmt.Errorf("Insert disk request failed: %v", err)
	}

	// Wait for the insert disk operation to complete
	if err = op.Wait(ctx); err != nil {
		return fmt.Errorf("unable to wait for the operation: %w", err)
	}

	fmt.Fprintf(w, "Disk created in storage pool: %v\n", disk.Name)
	return nil
}

자바


import com.google.cloud.compute.v1.Disk;
import com.google.cloud.compute.v1.DisksClient;
import com.google.cloud.compute.v1.InsertDiskRequest;
import com.google.cloud.compute.v1.Operation;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateDiskInStoragePool {
  public static void main(String[] args)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Google Cloud project you want to use.
    String projectId = "YOUR_PROJECT_ID";
    // Name of the zone in which you want to create the disk.
    String zone = "europe-central2-b";
    // Name of the disk you want to create.
    String diskName = "YOUR_DISK_NAME";
    // Link to the storagePool you want to use. Use format :
    // https://www.googleapis.com/compute/v1/projects/%s/zones/%s/storagePools/%s"
    String storagePoolName = "YOUR_STORAGE_POOL_LINK";
    // The type of disk you want to create. This value uses the following format:
    // "zones/{zone}/diskTypes/(hyperdisk-balanced|hyperdisk-throughput)".
    // For example: "zones/us-west3-b/diskTypes/hyperdisk-balanced"
    String diskType = String.format("zones/%s/diskTypes/hyperdisk-balanced", zone);
    // Size of the new disk in gigabytes.
    long diskSizeGb = 10;
    // Optional: the IOPS to provision for the disk.
    // You can use this flag only with Hyperdisk Balanced disks.
    long provisionedIops = 3000;
    // Optional: the throughput in mebibyte (MB) per second to provision for the disk.
    long provisionedThroughput = 140;

    createDiskInStoragePool(projectId, zone, diskName, storagePoolName, diskType,
            diskSizeGb, provisionedIops, provisionedThroughput);
  }

  // Creates a hyperdisk in the storage pool
  public static Disk createDiskInStoragePool(String projectId, String zone, String diskName,
                                             String storagePoolName, String diskType,
                                             long diskSizeGb, long iops, long throughput)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (DisksClient client = DisksClient.create()) {
      // Create a disk.
      Disk disk = Disk.newBuilder()
              .setZone(zone)
              .setName(diskName)
              .setType(diskType)
              .setSizeGb(diskSizeGb)
              .setStoragePool(storagePoolName)
              .setProvisionedIops(iops)
              .setProvisionedThroughput(throughput)
              .build();

      InsertDiskRequest request = InsertDiskRequest.newBuilder()
              .setProject(projectId)
              .setZone(zone)
              .setDiskResource(disk)
              .build();

      // Wait for the insert disk operation to complete.
      Operation operation = client.insertAsync(request).get(1, TimeUnit.MINUTES);

      if (operation.hasError()) {
        System.out.println("Disk creation failed!");
        throw new Error(operation.getError().toString());
      }

      // Wait for server update
      TimeUnit.SECONDS.sleep(10);

      Disk hyperdisk = client.get(projectId, zone, diskName);

      System.out.printf("Hyperdisk '%s' has been created successfully", hyperdisk.getName());

      return hyperdisk;
    }
  }
}

Node.js

// Import the Compute library
const computeLib = require('@google-cloud/compute');
const compute = computeLib.protos.google.cloud.compute.v1;

// Instantiate a diskClient
const disksClient = new computeLib.DisksClient();
// Instantiate a zoneOperationsClient
const zoneOperationsClient = new computeLib.ZoneOperationsClient();

/**
 * TODO(developer): Update these variables before running the sample.
 */
// Project ID or project number of the Google Cloud project you want to use.
const projectId = await disksClient.getProjectId();
// The zone where your VM and new disk are located.
const zone = 'us-central1-a';
// The name of the new disk
const diskName = 'disk-from-pool-name';
// The name of the storage pool
const storagePoolName = 'storage-pool-name';
// Link to the storagePool you want to use. Use format:
// https://www.googleapis.com/compute/v1/projects/{projectId}/zones/{zone}/storagePools/{storagePoolName}
const storagePool = `https://www.googleapis.com/compute/v1/projects/${projectId}/zones/${zone}/storagePools/${storagePoolName}`;
// The type of disk. This value uses the following format:
// "zones/{zone}/diskTypes/(hyperdisk-balanced|hyperdisk-extreme|hyperdisk-ml|hyperdisk-throughput)".
// For example: "zones/us-west3-b/diskTypes/hyperdisk-balanced"
const diskType = `zones/${zone}/diskTypes/hyperdisk-balanced`;
// Size of the new disk in gigabytes.
const diskSizeGb = 10;
// Optional: For Hyperdisk Balanced or Hyperdisk Extreme disks,
// this is the number of I/O operations per second (IOPS) that the disk can handle.
const provisionedIops = 3000;
// Optional: For Hyperdisk Balanced or Hyperdisk Throughput volumes,
// this is an integer that represents the throughput,
// measured in MiB per second, that the disk can handle.
const provisionedThroughput = 140;

async function callCreateComputeHyperdiskFromPool() {
  // Create a disk
  const disk = new compute.Disk({
    sizeGb: diskSizeGb,
    name: diskName,
    type: diskType,
    zone,
    storagePool,
    provisionedIops,
    provisionedThroughput,
  });

  const [response] = await disksClient.insert({
    project: projectId,
    zone,
    diskResource: disk,
  });

  let operation = response.latestResponse;

  // Wait for the create disk operation to complete.
  while (operation.status !== 'DONE') {
    [operation] = await zoneOperationsClient.wait({
      operation: operation.name,
      project: projectId,
      zone: operation.zone.split('/').pop(),
    });
  }

  const hyperdisk = (
    await disksClient.get({
      project: projectId,
      zone,
      disk: diskName,
    })
  )[0];

  console.log(JSON.stringify(hyperdisk));
}

await callCreateComputeHyperdiskFromPool();

디스크를 만든 후에는 VM에 디스크를 연결할 수 있습니다.

스토리지 풀의 디스크를 사용하는 VM 만들기

VM을 만들 때 부팅 디스크를 구성하고 선택적으로 VM에 자동으로 연결되는 추가 데이터(비부팅) 디스크를 만들 수 있습니다. 다음 섹션에서는 VM 생성 프로세스의 일부로 스토리지 풀에서 각 유형의 디스크를 만드는 방법을 설명합니다.

스토리지 풀에서 VM의 부팅 디스크 만들기

스토리지 풀에서 부팅 디스크를 사용하는 VM을 만들려면 먼저 하이퍼디스크 균형 스토리지 풀을 만들어야 합니다. 그런 다음 하이퍼디스크 균형 디스크를 지원하는 머신 유형을 사용하여 VM을 만들 수 있습니다. 선택한 영역에서 머신 유형, 디스크 유형, 스토리지 풀을 모두 사용할 수 있어야 합니다.

콘솔

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  2. 인스턴스 만들기를 클릭합니다.

  3. 인스턴스의 이름을 입력합니다.

  4. 영역을 스토리지 풀이 있는 영역으로 설정합니다.

  5. 하이퍼디스크 균형을 지원하는 머신 유형을 선택합니다(예: H3).

  6. 부팅 디스크 섹션에서 변경을 클릭합니다.

  7. 부팅 디스크 패널에서 부팅 디스크 유형을 하이퍼디스크 균형으로 설정합니다.

  8. 디스크 속성을 구성합니다.

  9. 고급 구성 표시를 펼칩니다.

  10. 스토리지 풀 제목 아래에서 스토리지 풀 사용 설정을 선택합니다.

  11. 목록에서 디스크를 만들 스토리지 풀을 선택합니다.

  12. 디스크 구성을 마쳤으면 선택을 클릭합니다.

  13. VM 속성 구성을 완료합니다.

  14. 만들기를 클릭합니다.

    콘솔은 지정된 영역에 VM을 만들고 선택한 스토리지 풀에 부팅 디스크를 만듭니다.

gcloud

gcloud compute instances create 명령어를 사용하고 부팅 디스크의 storage-pool 속성을 포함하여 스토리지 풀에 새 VM의 부팅 디스크를 만들 수 있습니다.

gcloud compute instances create VM_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --create-disk=boot=yes,type=hyperdisk-balanced,size=DISK_SIZE,provisioned-throughput=THROUGHPUT, \
    provisioned-iops=IOPS,image=projects/IMAGE_PROJECT/global/images/IMAGE, \
    storage-pool=STORAGE_POOL_NAME

다음을 바꿉니다.

  • VM_NAME: VM의 이름입니다.
  • ZONE: VM을 만들 리전 및 영역(us-central1-a 형식 사용)입니다.
  • MACHINE_TYPE: VM의 머신 유형입니다(예: m3-ultramem-32).
  • DISK_SIZE: 부팅 디스크의 크기(GiB)입니다.
  • THROUGHPUT: 디스크에 프로비저닝할 처리량입니다.
  • IOPS: 디스크에 프로비저닝할 IOPS입니다.
  • IMAGE_PROJECT: 이미지가 포함된 프로젝트입니다.
  • IMAGE: 다음 중 하나를 지정합니다.
    • OS 이미지의 특정 버전입니다(예: debian-12-bookworm-v20240213).
    • 이미지 계열이며 형식은 family/IMAGE_FAMILY여야 합니다. 이렇게 하면 지원 중단되지 않은 최신 OS 이미지를 사용하여 인스턴스가 생성됩니다. 예를 들어 family/debian-12를 지정하면 Compute Engine이 debian-12 이미지 계열에서 최신 버전의 OS 이미지를 사용하여 VM을 만듭니다. 이미지 계열 사용에 대한 자세한 내용은 이미지 계열 권장사항을 참조하세요.
  • STORAGE_POOL_NAME: 새 디스크를 만들 스토리지 풀의 이름입니다.

REST

instances.insert 메서드에 대한 POST 요청을 구성하고 부팅 디스크에 대한 storagePool 속성을 포함하여 스토리지 풀에 새 VM의 부팅 디스크를 만들 수 있습니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
   "name": "VM_NAME",
   "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
   "disks": [
      {
         "deviceName": "BOOT_DISK_DEVICE_NAME",
         "initializeParams": {
            "diskSizeGb": "DISK_SIZE",
            "diskType": "DISK_TYPE",
            "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
            "boot": true,
            "provisionedIops": "IOPS_LIMIT",
            "provisionedThroughput": "THROUGHPUT_LIMIT",
            "storagePool": "POOL_URL"
         }
      }
   ]
}

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.
  • ZONE: 스토리지 풀이 있는 영역입니다(예: us-central1-a). VM 및 부팅 디스크가 생성된 영역입니다.
  • VM_NAME: VM의 이름입니다.
  • MACHINE_TYPE: VM의 머신 유형입니다(예: m3-ultramem-32).
  • BOOT_DISK_DEVICE_NAME: 부팅 디스크의 기기 이름입니다.
  • DISK_SIZE: 부팅 디스크의 크기(GiB)입니다.
  • DISK_TYPE: URI로 지정된 디스크 유형입니다.
  • IMAGE_PROJECT: 이미지가 포함된 프로젝트입니다.
  • IMAGE: 다음 중 하나를 지정합니다.
    • OS 이미지의 특정 버전입니다(예: debian-12-bookworm-v20240213).
    • 이미지 계열이며 형식은 family/IMAGE_FAMILY여야 합니다. 이렇게 하면 지원 중단되지 않은 최신 OS 이미지를 사용하여 인스턴스가 생성됩니다. 예를 들어 family/debian-12를 지정하면 Compute Engine이 debian-12 이미지 계열에서 최신 버전의 OS 이미지를 사용하여 VM을 만듭니다. 이미지 계열 사용에 대한 자세한 내용은 이미지 계열 권장사항을 참조하세요.
  • IOPS_LIMIT: 디스크에 프로비저닝할 IOPS입니다.
  • THROUGHPUT_LIMIT: 디스크에 프로비저닝할 처리량입니다.
  • POOL_URL: 새 디스크가 생성될 스토리지 풀입니다. 이를 리소스에 대한 부분 또는 전체 URL로 제공할 수 있습니다. 예를 들어 다음은 유효한 값입니다.
    • https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME
    • projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME
    • zones/ZONE/storagePools/STORAGE_POOL_NAME

VM을 만드는 동안 스토리지 풀에 추가 디스크 만들기

VM을 만드는 동안 스토리지 풀에 디스크를 만들 때 머신 유형, 디스크 유형, 스토리지 풀은 선택한 영역에서 사용할 수 있어야 합니다.

콘솔

콘솔을 사용하여 추가 비부팅 디스크가 포함된 새 VM을 만들려면 다음 단계를 수행합니다.

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  2. 인스턴스 만들기를 클릭합니다.

  3. VM의 이름을 입력합니다.

  4. 영역을 스토리지 풀이 있는 영역으로 설정합니다.

  5. 스토리지 풀에 사용된 디스크 유형을 지원하는 머신 유형을 선택합니다.

  6. 고급 옵션 섹션을 펼칩니다.

  7. 디스크를 펼칩니다.

  8. 새 디스크 추가를 클릭합니다.

  9. 새 디스크 추가 패널에서 디스크의 정보를 입력합니다. 디스크 유형을 스토리지 풀 유형과 일치하도록 설정합니다.

  10. 스토리지 풀 섹션에서 스토리지 풀 사용 설정을 선택합니다.

  11. 스토리지 풀 선택 필드에서 디스크를 만들 스토리지 풀을 선택합니다.

  12. 디스크 구성을 마쳤으면 저장을 클릭합니다.

  13. VM 속성 구성을 완료합니다.

  14. 만들기를 클릭합니다.

    콘솔은 지정된 영역에 VM을 만들고 선택한 스토리지 풀에 비부팅 디스크를 만듭니다.

gcloud

gcloud compute instances create 명령어를 사용하고 디스크의 storage-pool 속성을 포함하여 VM을 만드는 동안 스토리지 풀에 새 디스크를 만들 수 있습니다.

gcloud compute instances create VM_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --create-disk=auto-delete=yes,boot=yes,device-name=BOOT_DISK_DEVICE_NAME,image=IMAGE_NAME, \
    size=BOOT_DISK_SIZE,type=BOOT_DISK_TYPE
    --create-disk=auto-delete=yes,boot=no,device-name=DATA_DISK_DEVICE_NAME,size=DATA_DISK_SIZE, \
    type=DATA_DISK_TYPE,provisioned-iops=IOPS,provisioned-throughput=THROUGHPUT, \
    storage_pool=STORAGE_POOL_NAME

다음을 바꿉니다.

  • VM_NAME: VM의 이름입니다.
  • ZONE: us-central1-a 형식을 사용하여 VM을 만들 리전 및 영역입니다.
  • MACHINE_TYPE: VM의 머신 유형입니다.
  • BOOT_DISK_DEVICE_NAME: 부팅 디스크의 기기 이름입니다.
  • IMAGE_NAME: 부팅 디스크에 설치할 운영체제 이미지의 이름입니다(예: debian-12-bookworm-v20240213).
  • BOOT_DISK_SIZE: 부팅 디스크의 크기(GiB)입니다.
  • BOOT_DISK_TYPE: 디스크 유형입니다.
  • DATA_DISK_DEVICE_NAME: 데이터 디스크의 디스크 기기 이름입니다.
  • DATA_DISK_SIZE: 데이터 디스크의 크기(GiB)입니다.
  • DATA_DISK_TYPE: 데이터 디스크 유형(hyperdisk-balanced 또는 hyperdisk-throughput)입니다.
  • IOPS: 디스크에 프로비저닝할 IOPS입니다.
  • THROUGHPUT: 디스크에 프로비저닝할 처리량입니다.
  • STORAGE_POOL_NAME: 디스크를 만들 스토리지 풀의 고유한 이름입니다.

REST

instances.insert 메서드에 대한 POST 요청을 구성하고 추가 디스크에 storagePool 속성을 포함하여 VM을 만드는 동안 스토리지 풀에 새 디스크를 만들 수 있습니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
   "name": "VM_NAME",
   "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
   "disks": [
      {
        "initializeParams":{
            "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE"
        },
        "boot":true
      },
      {
        "deviceName": "DEVICE_NAME",
        "boot":false,
        "initializeParams": {
           "diskSizeGb": "DISK_SIZE",
           "diskType": "DISK_TYPE",
           "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
           "provisionedIops": "IOPS_LIMIT",
           "provisionedThroughput": "THROUGHPUT_LIMIT",
           "storagePool": "POOL_URL"
        }
      }
   ]
}

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.
  • ZONE: 스토리지 풀이 있는 영역입니다(예: us-central1-a). VM 및 부팅 디스크가 생성된 영역입니다.
  • VM_NAME: VM의 이름입니다.
  • MACHINE_TYPE: VM의 머신 유형입니다(예: m3-ultramem-32).
  • IMAGE_PROJECT: 이미지가 포함된 프로젝트입니다.
  • IMAGE: 다음 중 하나를 지정합니다.
    • OS 이미지의 특정 버전입니다(예: debian-12-bookworm-v20240213).
    • 이미지 계열이며 형식은 family/IMAGE_FAMILY여야 합니다. 이렇게 하면 지원 중단되지 않은 최신 OS 이미지를 사용하여 인스턴스가 생성됩니다. 예를 들어 family/debian-12를 지정하면 Compute Engine이 debian-12 이미지 계열에서 최신 버전의 OS 이미지를 사용하여 VM을 만듭니다. 이미지 계열 사용에 대한 자세한 내용은 이미지 계열 권장사항을 참조하세요.
  • DEVICE_NAME: 데이터 디스크의 기기 이름입니다.
  • DISK_SIZE: 데이터 디스크의 크기(GiB)입니다.
  • DISK_TYPE: URI로 지정된 디스크 유형입니다.
  • IOPS_LIMIT: 디스크에 프로비저닝할 IOPS입니다.
  • THROUGHPUT_LIMIT: 디스크에 프로비저닝할 처리량입니다.
  • POOL_URL: 새 디스크가 생성될 스토리지 풀입니다. 이를 리소스에 대한 부분 또는 전체 URL로 제공할 수 있습니다. 예를 들어 다음은 유효한 값입니다.
    • https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME
    • projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME
    • zones/ZONE/storagePools/STORAGE_POOL_NAME

인스턴스 템플릿에서 스토리지 풀 사용

관리형 인스턴스 그룹(MIG)을 만드는 데 사용되는 인스턴스 템플릿은 스토리지 풀 정보를 포함할 수 있습니다. 인스턴스 템플릿을 사용하여 생성된 디스크는 지정된 스토리지 풀에 배치됩니다.

콘솔

  1. Google Cloud 콘솔에서 인스턴스 템플릿 페이지로 이동합니다.

    인스턴스 템플릿으로 이동

  2. 인스턴스 템플릿 만들기를 클릭합니다.

  3. 인스턴스 템플릿의 이름을 입력합니다.

  4. 위치로 리전을 선택하고 리전 필드에서 스토리지 풀이 있는 리전을 선택합니다.

  5. 하이퍼디스크 균형을 지원하는 머신 유형을 선택합니다(예: C3).

  6. 부팅 디스크 섹션에서 변경을 클릭합니다.

  7. 부팅 디스크 패널에서 부팅 디스크 유형을 하이퍼디스크 균형으로 설정합니다.

  8. 디스크 속성을 구성합니다.

  9. 고급 구성 표시를 펼칩니다.

  10. 스토리지 풀 제목 아래에서 스토리지 풀 사용 설정을 선택합니다.

  11. 목록에서 디스크를 만들 스토리지 풀을 선택합니다.

  12. 디스크 구성을 마쳤으면 선택을 클릭합니다.

  13. VM 속성 구성을 완료합니다.

  14. 만들기를 클릭합니다.

    이 템플릿은 지정된 영역에 VM을 만들고 선택한 스토리지 풀에 부팅 디스크를 만듭니다.

gcloud

gcloud compute instance-templates create 명령어를 사용하고 부팅 디스크에 storage-pool 속성을 포함하여 스토리지 풀에 부팅 디스크가 생성되도록 인스턴스 템플릿에서 지정할 수 있습니다.

gcloud compute instance-templates create TEMPLATE_NAME \
    --instance-template-region=REGION \
    --machine-type=MACHINE_TYPE \
    --create-disk=boot=yes,type=hyperdisk-balanced,size=DISK_SIZE,provisioned-throughput=THROUGHPUT, \
    provisioned-iops=IOPS,image=projects/IMAGE_PROJECT/global/images/IMAGE, \
    storage-pool=STORAGE_POOL_NAME

다음을 바꿉니다.

  • TEMPLATE_NAME: 인스턴스 템플릿의 이름입니다.
  • REGION: 리전 인스턴스 템플릿을 만들 리전입니다. 리전에는 스토리지 풀이 있는 영역이 포함되어야 합니다.
  • MACHINE_TYPE: VM을 만들 때 사용할 머신 유형입니다(예: h3-standard-88).
  • DISK_SIZE: 디스크의 크기(GiB)입니다.
  • THROUGHPUT: 디스크에 프로비저닝할 처리량입니다.
  • IOPS: 디스크에 프로비저닝할 IOPS입니다.
  • IMAGE_PROJECT: 이미지가 포함된 프로젝트입니다.
  • IMAGE: 다음 중 하나를 지정합니다.
    • OS 이미지의 특정 버전입니다(예: debian-12-bookworm-v20240213).
    • 이미지 계열이며 형식은 family/IMAGE_FAMILY여야 합니다. 이렇게 하면 지원 중단되지 않은 최신 OS 이미지를 사용하여 인스턴스가 생성됩니다. 예를 들어 family/debian-12를 지정하면 Compute Engine이 debian-12 이미지 계열에서 최신 버전의 OS 이미지를 사용하여 VM을 만듭니다. 이미지 계열 사용에 대한 자세한 내용은 이미지 계열 권장사항을 참조하세요.
  • STORAGE_POOL_NAME: 새 디스크를 만들 스토리지 풀의 이름입니다.

REST

instances.insert 메서드에 대한 POST 요청을 구성하고 부팅 디스크에 대한 storagePool 속성을 포함하여 스토리지 풀에 새 VM의 부팅 디스크를 만들 수 있습니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates
{
   "name": "VM_NAME",
   "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
   "disks": [
      {
         "deviceName": "BOOT_DISK_DEVICE_NAME",
         "initializeParams": {
            "diskSizeGb": "DISK_SIZE",
            "diskType": "DISK_TYPE",
            "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
            "boot": true,
            "provisionedIops": "IOPS_LIMIT",
            "provisionedThroughput": "THROUGHPUT_LIMIT",
            "storagePool": "POOL_URL"
         }
      }
   ]
}

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.
  • VM_NAME: VM의 이름입니다.
  • ZONE: 스토리지 풀이 있는 영역입니다(예: us-central1-a). VM 및 부팅 디스크가 생성된 영역입니다.
  • MACHINE_TYPE: VM의 머신 유형입니다(예: m3-ultramem-32).
  • BOOT_DISK_DEVICE_NAME: 부팅 디스크의 기기 이름입니다.
  • DISK_SIZE: 부팅 디스크의 크기(GiB)입니다.
  • DISK_TYPE: URI로 지정된 디스크 유형입니다.
  • IMAGE_PROJECT: 이미지가 포함된 프로젝트입니다.
  • IMAGE: 다음 중 하나를 지정합니다.
    • OS 이미지의 특정 버전입니다(예: debian-12-bookworm-v20240213).
    • 이미지 계열이며 형식은 family/IMAGE_FAMILY여야 합니다. 이렇게 하면 지원 중단되지 않은 최신 OS 이미지를 사용하여 인스턴스가 생성됩니다. 예를 들어 family/debian-12를 지정하면 Compute Engine이 debian-12 이미지 계열에서 최신 버전의 OS 이미지를 사용하여 인스턴스를 만듭니다. 이미지 계열 사용에 대한 자세한 내용은 이미지 계열 권장사항을 참조하세요.
  • IOPS_LIMIT: 디스크에 프로비저닝할 IOPS입니다.
  • THROUGHPUT_LIMIT: 디스크에 프로비저닝할 처리량입니다.
  • POOL_URL: 새 디스크가 생성될 스토리지 풀입니다. 이를 리소스에 대한 부분 또는 전체 URL로 제공할 수 있습니다. 예를 들어 다음은 유효한 값입니다.
    • https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME
    • projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME
    • zones/ZONE/storagePools/STORAGE_POOL_NAME