Memastikan ketersediaan resource menggunakan reservasi VM

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

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

Umumnya, reservasi berguna saat ketersediaan kapasitas sangat penting atau untuk mencegah error saat mendapatkan resource. Khusus untuk Batch, pertimbangkan untuk menggunakan reservasi khusus guna membantu meminimalkan waktu penjadwalan tugas, atau coba gunakan reservasi yang ada saat tidak digunakan. Jika Anda memiliki reservasi yang kurang digunakan, seperti reservasi yang diperlukan untuk diskon penggunaan berkomitmen, Anda dapat mengonfigurasi tugas untuk mencoba menggunakannya saat tidak digunakan untuk membantu mengoptimalkan biaya yang Anda keluarkan. Atau, jika Anda ingin membuat ketersediaan resource menjadi prioritas untuk workload lain di project Anda, 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 ingin Anda gunakan oleh VM tugas sesuai kebutuhan.
  3. Untuk mendapatkan izin yang Anda perlukan untuk membuat tugas, minta administrator Anda 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 pembatasan umum untuk pemesanan, Batch juga memiliki pembatasan berikut:

  • VM tugas tidak dapat menggunakan pemesanan bersama.
  • VM tugas tidak dapat menggunakan pemesanan jika keduanya menentukan kebijakan penempatan rapat.
  • Jika Anda membuat tugas menggunakan konsol Google Cloud , VM-nya akan otomatis menggunakan reservasi 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 dapat menggunakan reservasi. Untuk mengetahui informasi selengkapnya tentang semua persyaratan, lihat persyaratan umum untuk reservasi dalam dokumentasi Compute Engine dan prosedur untuk merencanakan konfigurasi nanti dalam dokumen ini.

  • Agar VM tugas umumnya dapat menggunakan reservasi, semua kondisi berikut harus dipenuhi:

    • 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 digunakan dan tersedia selama waktu proses VM.

    Kapasitas pemesanan yang tidak digunakan adalah selisih antara jumlah VM dan jumlah VM yang saat ini menggunakannya. VM mencoba memakai reservasi setiap kali Anda memiliki kapasitas reservasi yang tidak digunakan. Jadi, VM dapat mulai menggunakan reservasi saat VM dibuat atau nanti saat 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 dapat menggunakan reservasi, dan jumlah VM yang dipesan dapat bervariasi selama waktu berjalan tugas.

Membuat dan menjalankan tugas yang dapat menggunakan VM yang dipesan

  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. Jika tidak, jika Anda berencana membuat reservasi baru, pilih opsi konfigurasi yang Anda inginkan.

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

      • Jenis penggunaan*
      • Jumlah VM

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

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

    2. Tentukan properti VM untuk tugas dan reservasi. Karena pembatasan tersebut, 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 dengan 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 tidak menyertakan kolom allowedLocations[], 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 dihapus dari resource lainnya. Tentukan atau hilangkan 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 untuk 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 sub-bidang resource instance VM (instances[]) agar sama persis dengan properti VM dalam 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 sub-bidang 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, lakukan semua perubahan berikut:

      1. Apakah Anda ingin menggunakan template instance?

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

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

      2. Apakah reservasi mencakup 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 sesuai 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 sesuai 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 pemakaian yang ditargetkan secara khusus?

        • Ya: Ganti SPECIFIC_RESERVATION_NAME dengan nama reservasi.

        • Tidak: Hapus kolom reservation.

      Misalnya, anggaplah Anda menggunakan reservasi yang dikonsumsi secara otomatis 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 pekerjaan 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 sub-bidang 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 pekerjaan 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 dipakai oleh tugas dengan menentukan sub-bidang 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, lakukan semua perubahan berikut:

      1. Apakah Anda ingin menggunakan template instance?

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

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

      2. Apakah reservasi mencakup 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 sesuai 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 sesuai 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 pemakaian yang ditargetkan secara khusus?

        • Ya: Ganti SPECIFIC_RESERVATION_NAME dengan nama reservasi.

        • Tidak: Hapus kolom reservation.

      Misalnya, anggaplah Anda menggunakan reservasi yang dikonsumsi secara otomatis 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 dipesan

Untuk memblokir tugas agar tidak memakai reservasi apa pun, tetapkan kolom reservation ke NO_RESERVATION. Untuk mengetahui informasi selengkapnya tentang cara mencegah penggunaan reservasi, lihat Mencegah instance komputasi menggunakan reservasi dalam dokumentasi Compute Engine.

Anda dapat membuat dan menjalankan tugas yang tidak dapat menggunakan VM yang dicadangkan dengan 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 berikutnya