Mengonfigurasi pemasangan volume dalam memori untuk instance

Halaman ini menjelaskan cara mengonfigurasi volume dalam memori khusus yang dapat Anda gunakan untuk membaca dan menulis file menggunakan pemasangan volume Cloud Run. Perhatikan bahwa fitur ini berbeda dengan sistem file dalam memori bawaan yang disediakan oleh Cloud Run.

Saat Anda memasang volume dalam memori di Cloud Run, volume dalam memori akan muncul sebagai file dalam sistem file container. Setelah memasang volume dalam memori, Anda akan mengaksesnya seolah-olah itu adalah direktori di sistem file lokal, menggunakan operasi dan library sistem file bahasa pemrograman Anda.

Anda dapat menggunakan volume dalam memori untuk melakukan hal berikut:

  • Membatasi ukuran volume dalam memori. Jika Anda membatasi ukuran volume, penulisan ke volume yang penuh akan gagal, yang lebih baik daripada membuat Cloud Run menghentikan instance karena volume menggunakan terlalu banyak memori.

Perilaku

Saat membuat volume dalam memori, sebaiknya tentukan batas ukuran. Jika volume mencapai batas ukurannya, penulisan lebih lanjut akan gagal dengan error kehabisan memori. Instance Anda dapat menangani error ini dan terus berjalan.

Perhatikan bahwa batas ukuran hanyalah batas: batas ini tidak mengalokasikan ruang tambahan untuk volume dalam memori Anda. Sebaliknya, volume dalam memori Anda menggunakan memori yang Anda konfigurasi untuk container. Jika Anda men-deploy beberapa container, memori yang digunakan oleh setiap penulisan ke volume akan dihitung sebagai penggunaan memori untuk container yang menulis data.

Jika Anda tidak menentukan batas ukuran, batas tersebut akan otomatis ditetapkan ke setengah dari total ukuran semua container di instance Anda. Misalnya, ukuran volume emptyDir = [Memori (Container A) + Memori (Container B) + Memori (Container N)]/2. Perilaku default ini dapat menyebabkan batas ukuran volume dalam memori lebih tinggi daripada memori yang dialokasikan untuk beberapa container Anda. Hal ini dapat menyebabkan error yang tidak terduga jika satu container melebihi memori yang dialokasikannya sendiri saat mencoba menulis lebih banyak data ke volume, meskipun batas ukuran volume belum tercapai.

Meskipun menetapkan batas ukuran bersifat opsional, sebaiknya tetapkan batas ukuran untuk melindungi container Anda agar tidak kehabisan memori dan mengalami error.

Jalur yang tidak diizinkan

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

Peran yang diperlukan

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

Mengonfigurasi volume dalam memori

Setelah Anda mengonfigurasi volume dalam memori untuk instance Cloud Run, volume kosong akan dibuat untuk setiap instance Cloud Run yang dimulai, dan volume akan ada selama instance tersebut berjalan. Saat instance berhenti berjalan, data dalam volume akan dihapus secara permanen.

Konfigurasi pemasangan volume dalam memori menggunakan Google Cloud CLI atau YAML.

gcloud

  • Untuk memasang volume:

    gcloud beta run instances update INSTANCE \
      --add-volume mount-path=MOUNT_PATH,type=in-memory,size-limit=SIZE_LIMIT

    Ganti kode berikut:

    • INSTANCE: nama instance Anda.
    • MOUNT_PATH: jalur relatif dalam sistem file container tempat Anda ingin memasang volume ini, misalnya, /mnt/my-volume.
    • SIZE_LIMIT: batas memori yang ingin Anda tetapkan ke volume, dalam MiB atau GiB (ditetapkan sebagai Mi atau Gi)—misalnya, 500Mi. Batas ini harus kurang dari total memori yang ditentukan untuk container Anda.
  • Jika Anda menggunakan beberapa container, tentukan volume terlebih dahulu, lalu tentukan pemasangan volume untuk setiap container:

    gcloud beta run instances update INSTANCE \
      --add-volume=name=VOLUME_NAME,type=in-memory,size-limit=SIZE_LIMIT \
      --container=CONTAINER_1 \
      --add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH \
      --container=CONTAINER_2 \
      --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH2

YAML

  1. Jika Anda membuat instance baru, lewati langkah ini. Jika Anda memperbarui instance yang ada, download konfigurasi YAML-nya:

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. Contoh berikut berisi konfigurasi YAML:

    apiVersion: run.googleapis.com/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
        containers:
          - name: CONTAINER_NAME
            image: IMAGE_URL
            volumeMounts:
            - name: VOLUME_NAME
              mountPath: MOUNT_PATH
          volumes:
          - name: VOLUME_NAME
            emptyDir:
              medium: Memory
              sizeLimit: SIZE_LIMIT

    Ganti kode berikut:

    • INSTANCE: nama instance Cloud Run Anda.
    • CONTAINER_NAME: nama container.
    • IMAGE_URL: referensi ke image container, seperti us-docker.pkg.dev/cloudrun/container/hello:latest.
    • VOLUME_NAME: nama apa pun yang Anda inginkan untuk volume Anda. Nilai VOLUME_NAME digunakan untuk memetakan volume ke pemasangan volume.
    • MOUNT_PATH: jalur relatif tempat Anda memasang volume, misalnya, /mnt/my-volume.
    • SIZE_LIMIT: batas memori yang ingin Anda tetapkan ke volume, dalam MiB atau GiB (ditetapkan sebagai Mi atau Gi), misalnya, 500Mi. Batas ini harus kurang dari total memori yang ditentukan untuk container Anda.
  3. Buat atau perbarui instance menggunakan perintah berikut:

    gcloud beta run instances replace instance.yaml

Membaca dan menulis ke volume

Jika Anda menggunakan fitur pemasangan volume Cloud Run, Anda akan 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 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 dalam volume, /mnt/my-volume:

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

Java

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

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

Menghapus dan menghapus volume dan pemasangan volume

Anda dapat menghapus semua volume dan pemasangan atau menghapus volume dan pemasangan volume satu per satu.

Menghapus semua volume dan pemasangan volume

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

gcloud beta run instances update INSTANCE \
    --clear-volumes \
    --clear-volume-mounts

Menghapus volume dan pemasangan volume satu per satu

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

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

gcloud beta run instances update INSTANCE \
    --remove-volume VOLUME_NAME \
    --container=container1 \
    --remove-volume-mount MOUNT_PATH \
    --container=container2 \
    --remove-volume-mount MOUNT_PATH