Memastikan ketersediaan resource menggunakan reservasi VM

Dokumen ini menjelaskan cara membuat tugas yang berjalan di resource yang direservasi dan cara memblokir tugas agar tidak menggunakan reservasi.

Pemesanan adalah fitur Compute Engine. Pemesanan memberikan tingkat jaminan yang sangat tinggi dalam mendapatkan kapasitas untuk satu atau beberapa VM dengan konfigurasi hardware yang ditentukan. Reservasi untuk VM akan menimbulkan biaya VM tersebut sejak Anda membuatnya hingga Anda menghapus reservasi. Namun, saat Anda menggunakan VM tersebut, total biayanya setara dengan VM tanpa pemesanan.

Umumnya, reservasi berguna jika ketersediaan kapasitas sangat penting atau untuk mencegah error dalam mendapatkan resource. Khusus untuk Batch, pertimbangkan untuk menggunakan reservasi khusus untuk membantu meminimalkan waktu penjadwalan tugas, atau mencoba menggunakan reservasi yang ada saat tidak digunakan. Jika Anda memiliki reservasi yang kurang digunakan—seperti reservasi yang diperlukan untuk diskon penggunaan tetap—Anda dapat mengonfigurasi tugas untuk mencoba menggunakannya saat tidak digunakan untuk mencoba membantu mengoptimalkan biaya yang dikeluarkan. Atau, jika ingin memprioritaskan ketersediaan resource untuk workload lain dalam project, Anda dapat memblokir tugas secara eksplisit agar tidak menggunakan reservasi.

Untuk mempelajari pemesanan lebih lanjut, lihat dokumentasi Compute Engine untuk pemesanan.

Sebelum memulai

  1. Jika belum pernah menggunakan Batch, baca Mulai menggunakan Batch dan aktifkan Batch dengan menyelesaikan prasyarat untuk project dan pengguna.
  2. Pastikan Anda memiliki izin untuk membuat reservasi atau melihat reservasi yang ada yang Anda inginkan untuk digunakan VM tugas sesuai kebutuhan.
  3. Untuk mendapatkan izin yang diperlukan untuk membuat tugas, minta administrator untuk memberi Anda peran IAM berikut:

    Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

    Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Pembatasan

Selain batasan umum untuk pemesanan, Batch juga memiliki batasan berikut:

  • VM tugas tidak dapat menggunakan pemesanan bersama.
  • VM tugas tidak dapat menggunakan pemesanan jika menentukan kebijakan penempatan rapat.
  • Jika Anda membuat tugas menggunakan konsol Google Cloud, VM-nya akan otomatis menggunakan pemesanan yang cocok. Untuk menggunakan reservasi tertentu atau memblokir VM agar tidak menggunakan reservasi, Anda harus menentukan kolom reservation saat membuat tugas menggunakan gcloud CLI atau Batch API.

Persyaratan

Bagian ini merangkum persyaratan agar VM tugas menggunakan reservasi. Untuk mengetahui informasi selengkapnya tentang semua persyaratan, lihat persyaratan umum untuk pemesanan dalam dokumentasi Compute Engine dan prosedur untuk merencanakan konfigurasi Anda nanti dalam dokumen ini.

  • Agar VM tugas secara umum dapat menggunakan reservasi, semua kondisi berikut harus terpenuhi:

    • Tugas dan reservasi harus menentukan properti VM yang sama persis.

    • Anda harus mematuhi semua batasan dalam dokumen ini dan semua persyaratan umum lainnya untuk pemesanan.

  • Agar setiap VM tugas berhasil menggunakan reservasi, reservasi harus memiliki kapasitas yang tidak terpakai selama waktu proses VM.

    Kapasitas pemesanan yang tidak digunakan adalah perbedaan antara jumlah VM dan jumlah VM yang saat ini menggunakannya. VM mencoba menggunakan reservasi setiap kali Anda memiliki kapasitas reservasi yang tidak digunakan. Jadi, VM dapat mulai menggunakan reservasi saat VM dibuat atau nanti pada waktu prosesnya. VM tidak berhenti menggunakan pemesanan hingga VM berhenti berjalan atau pemesanan dihapus.

    Bergantung pada total kapasitas reservasi yang tidak digunakan, tidak ada, beberapa, atau semua VM tugas mungkin menggunakan reservasi, dan jumlah VM yang direservasi dapat bervariasi selama waktu proses tugas.

Membuat dan menjalankan tugas yang dapat menggunakan VM yang direservasi

  1. Rencanakan konfigurasi Anda. Untuk memastikan tugas dan reservasi Anda kompatibel, selesaikan langkah-langkah berikut.

    Jika ingin menggunakan reservasi yang sudah ada, Anda harus membuat tugas dengan konfigurasi yang sesuai. Atau, jika Anda berencana membuat reservasi baru, pilih opsi konfigurasi yang Anda inginkan.

    1. Menentukan properti reservasi. Karena pembatasan tersebut, jenis berbagi harus single-project, yang merupakan opsi default untuk reservasi. Tentukan nilai yang ingin Anda gunakan untuk properti reservasi berikut:

      • Jenis penggunaan*
      • Jumlah VM

      *Jenis penggunaan pemesanan (ditargetkan secara khusus atau digunakan secara otomatis) menentukan VM mana yang dapat menggunakan reservasi.

      Jumlah VM mewakili total kapasitas reservasi. Saat menentukan nilai ini, pertimbangkan jumlah VM tugas.

    2. Tentukan properti VM untuk tugas dan reservasi. Karena pembatasan tersebut, baik tugas maupun pemesanan tidak dapat menentukan kebijakan penempatan rapat, yang merupakan opsi default untuk pemesanan dan tugas. Tentukan nilai yang ingin Anda gunakan untuk properti VM berikut, yang harus cocok persis untuk reservasi dan tugas:

      • Project
      • Zona*
      • Jenis mesin
      • Platform CPU minimum (jika ada)
      • Jenis dan jumlah GPU (jika ada)
      • Jenis dan jumlah SSD lokal (jika ada)
      • Afinitas pemesanan#

      *VM tugas harus berada di zona yang sama dengan VM yang dicadangkan. Anda harus menyertakan zona ini di kolom allowedLocations[] tugas atau, jika kolom allowedLocations[] dihilangkan, tetapkan lokasi tugas ke region yang berisi zona ini.

      Tugas harus menentukan semua properti ini menggunakan subkolom policy atau template instance VM. Tugas tidak dapat menentukan kombinasi subkolom policy dan template.

      Kolom opsional tidak dapat ditentukan untuk satu resource dan dihilangkan dari resource lainnya. Tentukan atau hapus kolom opsional untuk reservasi dan tugas. Jika tugas menentukan template instance VM, hal ini juga berlaku untuk kolom template yang ditentukan.

      #Jenis penggunaan pemesanan menentukan afinitas pemesanan yang diperlukan untuk VM tugas, yang harus Anda tentukan dalam tugas sebagai berikut:

  2. Siapkan reservasi. Jika Anda belum melakukannya, buat reservasi yang ingin Anda gunakan oleh VM tugas. Pastikan reservasi memiliki properti yang Anda rencanakan.

  3. Buat dan jalankan tugas. Anda dapat membuat dan menjalankan tugas yang menggunakan VM dari reservasi yang disiapkan menggunakan gcloud CLI atau Batch API:

    gcloud

    1. Buat file JSON yang menentukan detail konfigurasi tugas yang menetapkan subkolom resource instance VM (instances[]) agar cocok persis dengan properti VM dari pemesanan.

      Misalnya, untuk membuat tugas skrip dasar yang menggunakan VM dari reservasi, buat file JSON dengan konten berikut:

      {
        "taskGroups": [
          {
            "taskSpec": {
              "runnables": [
                {
                  "script": {
                    "text": "echo Hello world from task ${BATCH_TASK_INDEX}"
                  }
                }
              ]
            },
            "taskCount": 3
          }
        ],
        "allocationPolicy": {
          "instances": [
            {
              VM_RESOURCES
            }
          ],
        },
        "logsPolicy": {
          "destination": "CLOUD_LOGGING"
        }
      }
      

      Ganti VM_RESOURCES dengan resource VM yang cocok dengan reservasi yang Anda inginkan untuk digunakan tugas dengan menentukan subkolom instances[] yang Anda rencanakan di langkah sebelumnya.

      Misalnya, mulai dari nilai berikut untuk VM_RESOURCES:

      "installGpuDrivers": INSTALL_GPU_DRIVERS,
      "policy": {
        "machineType": "MACHINE_TYPE",
        "minCpuPlatform": "MIN_CPU_PLATFORM",
        "accelerators": [
          {
            "type": "GPU_TYPE",
            "count": GPU_COUNT
          }
        ],
        "disks": [
          {
            "newDisk": {
              "sizeGb": LOCAL_SSD_SIZE,
              "type": "local-ssd"
            },
            "deviceName": "LOCAL_SSD_NAME"
          }
        ],
        "reservation": "SPECIFIC_RESERVATION_NAME"
      }
      

      Untuk menggunakan nilai ini, buat semua perubahan berikut:

      1. Apakah Anda ingin menggunakan template instance?

        • Ya: Ganti kolom policy dengan kolom instanceTemplate dan tentukan template instance VM yang ada yang cocok dengan pemesanan. Misalnya, lihat contoh kode untuk menggunakan template instance VM. Jika reservasi menggunakan GPU atau SSD lokal, Anda juga perlu mengonfigurasi kolom installGpuDrivers dan kolom volumes[] tugas. Jika tidak, lewati perubahan lainnya.

        • Tidak: Ganti MACHINE_TYPE dengan jenis mesin yang sama dengan reservasi.

      2. Apakah reservasi menyertakan platform CPU minimum?

        • Ya: Ganti MIN_CPU_PLATFORM dengan platform CPU minimum yang sama.

        • Tidak: Hapus kolom minCpuPlatform.

      3. Apakah reservasi mencakup GPU?

        • Ya: Ganti INSTALL_GPU_DRIVERS, GPU_TYPE, dan GPU_COUNT agar cocok dengan reservasi. Misalnya, lihat contoh kode untuk menggunakan GPU.

        • Tidak: Hapus kolom installGpuDrivers dan kolom accelerators[].

      4. Apakah reservasi mencakup SSD lokal?

        • Ya: Ganti LOCAL_SSD_SIZE dan LOCAL_SSD_NAME agar cocok dengan reservasi, dan pasang SSD lokal dengan menambahkan kolom volumes[] ke tugas. Misalnya, lihat contoh kode untuk menggunakan SSD lokal.

        • Tidak: Hapus kolom disks[].

      5. Apakah reservasi menggunakan jenis konsumsi yang ditargetkan secara khusus?

        • Ya: Ganti SPECIFIC_RESERVATION_NAME dengan nama reservasi.

        • Tidak: Hapus kolom reservation.

      Misalnya, Anda menggunakan reservasi yang otomatis digunakan untuk VM n2-standard-32 yang tidak menentukan platform CPU minimum, GPU, atau SSD lokal. Selain itu, Anda tidak ingin menentukan template instance VM. Dalam hal ini, Anda harus mengganti VM_RESOURCES dengan nilai berikut:

      "policy": {
        "machineType": "n2-standard-32"
      }
      
    2. Untuk membuat dan menjalankan tugas, gunakan perintah gcloud batch jobs submit:

      gcloud batch jobs submit JOB_NAME \
        --location LOCATION \
        --config JSON_CONFIGURATION_FILE
      

      Ganti kode berikut:

      • JOB_NAME: nama tugas.

      • LOCATION: lokasi tugas. Kecuali jika tugas menentukan kolom allowedLocations[], ini harus berupa region yang berisi zona reservasi.

      • JSON_CONFIGURATION_FILE: jalur untuk file JSON dengan detail konfigurasi tugas.

    API

    Buat permintaan POST ke metode jobs.create yang menetapkan subkolom resource instance VM (instances[]) agar sama persis dengan properti VM dari reservasi.

    Misalnya, untuk membuat tugas skrip dasar yang menggunakan VM dari reservasi, buat permintaan berikut:

    POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo Hello world from task ${BATCH_TASK_INDEX}"
                }
              }
            ]
          },
          "taskCount": 3
        }
      ],
      "allocationPolicy": {
        "instances": [
          {
            VM_RESOURCES
          }
        ],
      },
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    

    Ganti kode berikut:

    • PROJECT_ID: Project ID project Anda.

    • LOCATION: lokasi tugas. Kecuali jika tugas menentukan kolom allowedLocations[], ini harus berupa region yang berisi zona reservasi.

    • JOB_NAME: nama tugas.

    • VM_RESOURCES: resource VM yang cocok dengan reservasi yang Anda inginkan untuk digunakan oleh tugas dengan menentukan subkolom instances[] yang Anda rencanakan di langkah sebelumnya.

      Misalnya, mulai dari nilai berikut untuk VM_RESOURCES:

      "installGpuDrivers": INSTALL_GPU_DRIVERS,
      "policy": {
        "machineType": "MACHINE_TYPE",
        "minCpuPlatform": "MIN_CPU_PLATFORM",
        "accelerators": [
          {
            "type": "GPU_TYPE",
            "count": GPU_COUNT
          }
        ],
        "disks": [
          {
            "newDisk": {
              "sizeGb": LOCAL_SSD_SIZE,
              "type": "local-ssd"
            },
            "deviceName": "LOCAL_SSD_NAME"
          }
        ],
        "reservation": "SPECIFIC_RESERVATION_NAME"
      }

      Untuk menggunakan nilai ini, buat semua perubahan berikut:

      1. Apakah Anda ingin menggunakan template instance?

        • Ya: Ganti kolom policy dengan kolom instanceTemplate dan tentukan template instance VM yang ada yang cocok dengan pemesanan. Misalnya, lihat contoh kode untuk menggunakan template instance VM. Jika reservasi menggunakan GPU atau SSD lokal, Anda juga perlu mengonfigurasi kolom installGpuDrivers dan kolom volumes[] tugas. Jika tidak, lewati perubahan lainnya.

        • Tidak: Ganti MACHINE_TYPE dengan jenis mesin yang sama dengan reservasi.

      2. Apakah reservasi menyertakan platform CPU minimum?

        • Ya: Ganti MIN_CPU_PLATFORM dengan platform CPU minimum yang sama.

        • Tidak: Hapus kolom minCpuPlatform.

      3. Apakah reservasi mencakup GPU?

        • Ya: Ganti INSTALL_GPU_DRIVERS, GPU_TYPE, dan GPU_COUNT agar cocok dengan reservasi. Misalnya, lihat contoh kode untuk menggunakan GPU.

        • Tidak: Hapus kolom installGpuDrivers dan kolom accelerators[].

      4. Apakah reservasi mencakup SSD lokal?

        • Ya: Ganti LOCAL_SSD_SIZE dan LOCAL_SSD_NAME agar cocok dengan reservasi, dan pasang SSD lokal dengan menambahkan kolom volumes[] ke tugas. Misalnya, lihat contoh kode untuk menggunakan SSD lokal.

        • Tidak: Hapus kolom disks[].

      5. Apakah reservasi menggunakan jenis konsumsi yang ditargetkan secara khusus?

        • Ya: Ganti SPECIFIC_RESERVATION_NAME dengan nama reservasi.

        • Tidak: Hapus kolom reservation.

      Misalnya, Anda menggunakan reservasi yang otomatis digunakan untuk VM n2-standard-32 yang tidak menentukan platform CPU minimum, GPU, atau SSD lokal. Selain itu, Anda tidak ingin menentukan template instance VM. Dalam hal ini, Anda harus mengganti VM_RESOURCES dengan nilai berikut:

      "policy": {
        "machineType": "n2-standard-32"
      }

Membuat dan menjalankan tugas yang tidak dapat menggunakan VM yang direservasi

Untuk memblokir tugas agar tidak menggunakan reservasi apa pun, tetapkan kolom reservation ke NO_RESERVATION. Untuk mengetahui informasi selengkapnya tentang cara mencegah penggunaan pemesanan, lihat Membuat VM tanpa menggunakan pemesanan dalam dokumentasi Compute Engine.

Anda dapat membuat dan menjalankan tugas yang tidak dapat menggunakan VM yang direservasi menggunakan gcloud CLI atau Batch API.

gcloud

  1. Buat file JSON yang menentukan detail konfigurasi tugas dan menetapkan kolom reservation ke NO_RESERVATION.

    Misalnya, untuk membuat tugas skrip dasar yang tidak dapat menggunakan reservasi, buat file JSON dengan konten berikut:

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo Hello world from task ${BATCH_TASK_INDEX}"
                }
              }
            ]
          },
          "taskCount": 3
        }
      ],
      "allocationPolicy": {
        "instances": [
          {
            "policy": {
              "reservation": "NO_RESERVATION"
            }
          }
        ],
      },
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    
  2. Untuk membuat dan menjalankan tugas, gunakan perintah gcloud batch jobs submit:

    gcloud batch jobs submit JOB_NAME \
      --location LOCATION \
      --config JSON_CONFIGURATION_FILE
    

    Ganti kode berikut:

    • JOB_NAME: nama tugas.

    • LOCATION: lokasi tugas.

    • JSON_CONFIGURATION_FILE: jalur untuk file JSON dengan detail konfigurasi tugas.

API

Buat permintaan POST ke metode jobs.create yang menetapkan kolom reservation ke NO_RESERVATION.

Misalnya, untuk membuat tugas skrip dasar yang tidak dapat menggunakan reservasi, buat permintaan berikut:

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME

{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo Hello world from task ${BATCH_TASK_INDEX}"
            }
          }
        ]
      },
      "taskCount": 3
    }
  ],
  "allocationPolicy": {
    "instances": [
      {
        "policy": {
          "reservation": "NO_RESERVATION"
        }
      }
    ],
  },
  "logsPolicy": {
    "destination": "CLOUD_LOGGING"
  }
}

Ganti kode berikut:

  • PROJECT_ID: Project ID project Anda.

  • LOCATION: lokasi tugas.

  • JOB_NAME: nama tugas.

Langkah selanjutnya