Mengonfigurasi disk sementara untuk layanan Cloud Run

Cloud Run menyediakan volume ephemeral disk yang hanya bertahan selama durasi instance Anda. Fitur ini memungkinkan Anda menentukan jumlah disk yang diperlukan dan lokasi untuk memasangnya. Cloud Run kemudian akan mengalokasikan jumlah disk tersebut ke resource Anda.

Disk disediakan secara otomatis, diformat sebelumnya ke ext4, dan dienkripsi dengan kunci khusus instance saat startup. Ephemeral disk membuat volume Anda sehingga pengguna mana pun dapat membaca atau menulis ke volume tersebut. Karena penyimpanan bersifat efemeral, semua data akan dihapus secara permanen saat instance dinonaktifkan. Hal ini mencakup penonaktifan yang disebabkan oleh:

  • Error instance
  • Penskalaan layanan
  • Migrasi traffic ke revisi baru

Disk dikhususkan untuk instance tertentu dan tidak dibagikan ke instance atau revisi lain. Anda memiliki kontrol atas struktur sistem file dengan direktori pemasangan yang dapat dikonfigurasi untuk setiap volume.

Sebelum mematikan instance, Cloud Run mengirimkan sinyal SIGTERM ke semua container dalam instance, yang menunjukkan dimulainya periode 10 detik sebelum penonaktifan yang sebenarnya terjadi. Pada saat itu Cloud Run mengirimkan sinyal SIGKILL. Anda dapat menggunakan periode 10 detik ini untuk melakukan operasi pembersihan, seperti melakukan putaran terakhir penyalinan konten disk ke penyimpanan persisten.

Kasus penggunaan

Anda dapat menggunakan ephemeral disk untuk hal berikut:

  • Workload pemrosesan data: Saat memproses file data besar di Cloud Run, Anda biasanya menyimpan seluruh file dalam memori atau mengatur pemisahannya menjadi bagian-bagian yang lebih kecil. Dengan penyimpanan sementara, Anda tidak perlu membayar memori dalam jumlah besar untuk membuat salinan lokal sementara data Anda. Anda juga akan dapat memproses set data yang lebih besar.
  • Caching: Dalam kasus penggunaan penyajian web, meng-cache data di disk, bukan mengambilnya dari penyimpanan jarak jauh, dapat mengoptimalkan latensi aplikasi Anda.

Batas penyimpanan dan instance

Batasan berikut berlaku:

  • Batas ukuran volume: setiap volume harus antara 1Gi dan 100Gi.
  • Batas penyimpanan instance: setiap instance dibatasi hingga total ruang 10 GiB secara default. Mengonfigurasi lebih dari 10 GiB per instance memerlukan permintaan penambahan kuota.
  • Batas volume instance: setiap instance dibatasi hingga maksimum 10 volume ephemeral disk.
  • Batas project: setiap project dimulai dengan total batas alokasi regional sebesar 0 GiB secara default. Project otomatis diberi 100 GiB per region saat pertama kali resource dengan disk sementara di-deploy di region tersebut. Saat runtime, kuota regional ini digunakan bersama di semua instance yang berjalan aktif di region tersebut. Saat men-deploy resource, ukuran ephemeral disk gabungan per instance dikalikan dengan jumlah maksimum instance-nya tidak boleh melebihi batas alokasi regional. Misalnya, dengan batas regional 100 GiB, resource dengan disk 10 GiB dapat dikonfigurasi dengan hingga 10 instance. Jika perlu, minta penambahan kuota.

Meminta penambahan kuota

Jika memerlukan kapasitas tambahan, Anda harus meminta penambahan kuota untuk layanan Cloud Run. Gunakan link yang disediakan di tombol berikut untuk meminta kuota yang Anda perlukan.

Kuota saat ini Link kuota
10 GiB per instance Meminta kuota yang lebih besar per instance
100 GiB per project Meminta kuota yang lebih besar per project

Untuk mengetahui informasi selengkapnya tentang cara meminta penambahan kuota, lihat Cara menambah kuota.

Batasan

Ephemeral disk hanya tersedia di lingkungan eksekusi generasi kedua.

Jalur yang tidak diizinkan

Cloud Run tidak mengizinkan Anda memasang volume di /dev, /proc, atau /sys, atau di subdirektorinya.

Region yang didukung

Disk sementara tersedia di semua lokasi Cloud Run.

Sebelum memulai

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Instal dan lakukan inisialisasi gcloud CLI.
  4. Perbarui komponen:
    gcloud components update
  5. Tinjau halaman harga Cloud Run untuk CPU, memori, dan egress jaringan. Seluruh ukuran disk yang disediakan dan masa aktif instance yang menggunakannya akan memengaruhi biaya Anda.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk mengonfigurasi ephemeral disk, minta administrator untuk memberi Anda peran IAM berikut:

Untuk mengetahui daftar peran dan izin IAM yang terkait dengan Cloud Run, lihat Peran IAM Cloud Run dan Izin IAM Cloud Run. Jika layanan Cloud Run Anda berinteraksi dengan APIGoogle Cloud , seperti Library Klien Cloud, lihat panduan konfigurasi identitas layanan. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat izin deployment dan mengelola akses.

Membuat dan memasang ephemeral disk

Anda dapat membuat dan memasang ephemeral disk menggunakan konsol Google Cloud , Google Cloud CLI, YAML, atau Terraform:

Konsol

  1. Di konsol Google Cloud , buka Cloud Run:

    Buka Cloud Run

  2. Pilih Services dari menu navigasi Cloud Run, lalu klik Deploy container untuk mengonfigurasi layanan baru. Jika Anda mengonfigurasi layanan yang ada, klik layanan tersebut, lalu klik tab Containers.

  3. Jika Anda mengonfigurasi layanan baru, isi halaman setelan layanan awal, lalu klik Containers, Networking, Security.

  4. Pilih Ephemeral disk.

  5. Pilih ukuran dari menu, dan masukkan jalur pemasangan di kolom Mount path.

  6. Klik Create untuk layanan baru. Klik View diff & redeploy, lalu Deploy changes untuk layanan yang ada.

gcloud

Untuk menambahkan volume dan memasangnya:

gcloud run services update SERVICE \
    --execution-environment=gen2 \
    --add-volume=name=VOLUME_NAME,type=ephemeral-disk,size=SIZE \
    --add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH

Ganti kode berikut:

  • SERVICE: nama layanan Anda.
  • VOLUME_NAME: nama yang ingin Anda berikan untuk volume Anda.
  • SIZE: ukuran disk—misalnya, 10Gi. Ukurannya harus antara 1Gi dan 100Gi untuk volume ephemeral-disk.
  • MOUNT_PATH: jalur relatif tempat Anda memasang volume, misalnya, /mnt/my-volume.

YAML

  1. Jika Anda membuat layanan baru, lewati langkah ini. Jika Anda mengupdate layanan yang sudah ada, download konfigurasi YAML-nya:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Konfigurasikan file YAML:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      labels:
        cloud.googleapis.com/location: REGION
    spec:
      template:
        spec:
          containers:
          - name: CONTAINER_NAME
            image: IMAGE_URL
            volumeMounts:
            - name: VOLUME_NAME
              mountPath: MOUNT_PATH
          volumes:
          - name: VOLUME_NAME
            emptyDir:
              medium: Disk
              sizeLimit: SIZE
    

    Ganti kode berikut:

    • SERVICE: nama layanan Anda.
    • REGION: region Google Cloud .
    • CONTAINER_NAME: nama yang ingin Anda berikan ke container.
    • IMAGE_URL: referensi ke image container, misalnya, us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL mengikuti format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • VOLUME_NAME: nama yang ingin Anda berikan untuk volume Anda.
    • MOUNT_PATH: jalur relatif tempat Anda memasang volume, misalnya, /mnt/my-volume.
    • SIZE: ukuran disk—misalnya, 10Gi. Ukurannya harus antara 1Gi dan 100Gi untuk volume ephemeral-disk.
  3. Buat atau update layanan menggunakan perintah berikut:

    gcloud run services replace service.yaml

    Perintah gcloud run services replace secara default menggunakan file service.yaml jika ada.

Terraform

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Tambahkan kode berikut ke resource google_cloud_run_v2_service dalam konfigurasi Terraform Anda:
  resource "google_cloud_run_v2_service" "default" {
    name     = "SERVICE"
    location = "REGION"
    deletion_protection =  "true"
    ingress = "INGRESS_TRAFFIC_ALL"
  template {
    containers {
      image = "IMAGE_URL"
      volume_mounts {
        name = "VOLUME_NAME"
        mount_path = "MOUNT_PATH"
      }
    }
    volumes {
      name = "VOLUME_NAME"
      empty_dir {
        medium = "DISK"
        size_limit = "SIZE"
      }
    }
  }
  lifecycle {
    ignore_changes = [
      launch_stage,
    ]
  }
}

Ganti kode berikut:

  • SERVICE: nama layanan Anda.
  • REGION: region Google Cloud .
  • IMAGE_URL: referensi ke image container, misalnya, us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL mengikuti format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • VOLUME_NAME: nama yang ingin Anda berikan untuk volume Anda.
  • MOUNT_PATH: jalur relatif tempat Anda memasang volume, misalnya, /mnt/my-volume.
  • SIZE: ukuran disk—misalnya, 10Gi. Ukurannya harus antara 1Gi dan 100Gi untuk volume ephemeral-disk.

Membaca dan menulis ke volume

Jika menggunakan fitur pemasangan volume Cloud Run, Anda dapat mengakses volume yang terpasang menggunakan library yang sama dalam bahasa pemrograman yang Anda gunakan untuk membaca dan menulis file di sistem file lokal.

Hal ini sangat berguna jika Anda menggunakan container yang sudah ada yang mengharapkan data disimpan di sistem file lokal dan menggunakan operasi sistem file reguler untuk mengaksesnya.

Cuplikan berikut mengasumsikan pemasangan volume dengan mountPath yang ditetapkan ke /mnt/my-volume.

Nodejs

Gunakan modul sistem file untuk membuat file baru atau menambahkan ke file yang ada di volume, /mnt/my-volume:

var fs = require('fs');
fs.appendFileSync('/mnt/my-volume/sample-logfile.txt', 'Hello logs!', { flag: 'a+' });

Python

Tulis ke file yang disimpan dalam volume, /mnt/my-volume:

f = open("/mnt/my-volume/sample-logfile.txt", "a")

Go

Gunakan paket os untuk membuat file baru yang disimpan di volume, /mnt/my-volume:

f, err := os.Create("/mnt/my-volume/sample-logfile.txt")

Java

Gunakan class Java.io.File untuk membuat file log di volume, /mnt/my-volume:

import java.io.File;
File f = new File("/mnt/my-volume/sample-logfile.txt");

Menghapus dan membuang volume dan pemasangan volume

Anda dapat menghapus semua volume dan pemasangan atau Anda dapat menghapus masing-masing volume dan pemasangan volume.

Menghapus semua volume dan pemasangan volume

Untuk menghapus semua volume dan pemasangan volume dari layanan container tunggal, jalankan perintah berikut:

gcloud run services update SERVICE \
    --clear-volumes \
    --clear-volume-mounts
Jika Anda memiliki beberapa container, ikuti konvensi CLI sidecar untuk menghapus volume dan pemasangan volume:

gcloud run services update SERVICE \
    --container=container1 \
    --clear-volumes \
    --clear-volume-mounts \
    --container=container2 \
    --clear-volumes \
    --clear-volume-mounts

Menghapus setiap volume dan pemasangan volume

Untuk menghapus volume, Anda juga harus menghapus semua pemasangan volume yang menggunakan volume tersebut.

Untuk menghapus setiap volume atau pemasangan volume, gunakan flag remove-volume dan remove-volume-mount:

gcloud run services update SERVICE \
    --remove-volume VOLUME_NAME \
    --container=container1 \
    --remove-volume-mount MOUNT_PATH \
    --container=container2 \
    --remove-volume-mount MOUNT_PATH

Praktik terbaik

Patuhi praktik terbaik berikut untuk mengelola data efemeral secara efektif dan mengoptimalkan performa penyimpanan.

Menyalin ke penyimpanan persisten

Jika Anda ingin menyalin konten ephemeral disk ke penyimpanan persisten, seperti bucket Cloud Storage, sebaiknya salin secara bertahap, daripada mengandalkan masa tenggang 10 detik SIGTERM hingga SIGKILL. Lihat Kontrak runtime container untuk mengetahui informasi selengkapnya tentang penonaktifan instance.

Cloud Run dapat membaca dan menulis dari Cloud Storage tanpa penyiapan jaringan tambahan. Untuk mencapai performa optimal, sebaiknya rutekan traffic ke dan dari Cloud Storage melalui jaringan VPC menggunakan Direct VPC.

Metode ini berfungsi jika Anda tidak memerlukan resource Cloud Run untuk mengakses internet. Jika Anda memerlukan akses internet, siapkan Cloud NAT, atau lihat Traffic internal ke Google API.

Untuk mengonfigurasi egress VPC Langsung dengan layanan, selesaikan langkah-langkah berikut:

  1. Di konsol Google Cloud , buka halaman Cloud Run:

    Buka Cloud Run

  2. Klik Buat Layanan jika Anda mengonfigurasi layanan baru yang akan di-deploy. Jika Anda mengonfigurasi dan men-deploy layanan yang sudah ada, klik layanan.

  3. Jika Anda mengonfigurasi layanan baru, isi halaman setelan layanan awal sesuai kebutuhan, lalu klik Container, Networking, Keamanan untuk memperluas halaman konfigurasi layanan.

  4. Klik tab Networking.

  5. Klik Hubungkan ke VPC untuk traffic keluar.

  6. Klik Kirim traffic langsung ke VPC.

  7. Di kolom Network, pilih jaringan VPC yang ingin Anda kirimi traffic.

  8. Di kolom Subnet, pilih subnet tempat alamat IP diterima oleh layanan Anda. Anda dapat men-deploy beberapa layanan di subnet yang sama.

  9. Untuk Traffic routing, pilih Route all traffic to the VPC untuk mengirim semua traffic keluar melalui jaringan VPC.

    1. Klik Create untuk layanan baru. Klik View diff & redeploy, lalu Deploy changes untuk layanan yang ada.

    2. Untuk memverifikasi bahwa layanan Anda berada di jaringan VPC, klik layanan tersebut, lalu klik tab Networking. Jaringan dan subnet tercantum dalam kartu VPC.

      Kini Anda dapat mengirim permintaan dari layanan Cloud Run ke resource mana pun di jaringan VPC, sebagaimana diizinkan oleh aturan firewall Anda.

    3. Aktifkan Akses Google Pribadi di subnet yang Anda hubungkan.

Memecahkan masalah

Jika Anda mengalami masalah, periksa hal berikut:

  • Jika container Anda kehabisan memori dan Anda menggunakan konsol Google Cloud untuk men-deploy revisi baru layanan dengan ephemeral disk yang terpasang, konsol Google Cloud kemungkinan mengonversi volume disk Anda menjadi volume dalam memori. Hal ini menyebabkan penulisan disk Anda ditulis ke dalam memori, sehingga container Anda kehabisan memori. Untuk memperbaikinya, deploy ulang layanan Anda menggunakan gcloud CLI lagi dan pastikan file YAML Anda menentukan medium: Disk di bagian volumes.
  • Jika Anda melihat kecepatan jaringan yang lambat saat mendownload data dalam jumlah besar ke disk sementara, ikuti langkah-langkah untuk mengaktifkan Direct VPC. Jika Direct VPC tidak diaktifkan, Anda akan melihat kecepatan transfer jaringan yang lebih lambat.