Mengonfigurasi pemasangan volume dalam memori untuk tugas

Halaman ini menjelaskan cara mengonfigurasi volume dalam memori khusus yang dapat Anda gunakan untuk pembacaan dan penulisan file menggunakan pemasangan volume Cloud Run. Perlu diperhatikan 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 di sistem file container. Setelah memasang volume dalam memori, Anda mengaksesnya seolah-olah itu adalah direktori di sistem file lokal Anda, menggunakan operasi dan library sistem file bahasa pemrograman Anda.

Anda dapat menggunakan volume dalam memori untuk melakukan hal berikut:

  • Batasi ukuran volume dalam memori. Jika Anda membatasi ukuran volume, operasi tulis hingga volume penuh akan gagal. Hal ini akan lebih baik jika Cloud Run menghentikan instance karena banyaknya volume yang digunakan.
  • Membagikan volume dalam memori antar-container yang berbeda di satu instance Cloud Run. Saat Cloud Run menskalakan ke beberapa instance layanan, setiap instance akan memiliki volume dalam memorinya sendiri yang digunakan bersama oleh semua container pada instance tersebut. Volume ini tersedia untuk semua container saat Cloud Run melakukan penyebaran skala untuk menangani traffic.

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.

Perlu diperhatikan bahwa batas ukuran hanyalah batas: tidak mengalokasikan ruang tambahan untuk volume dalam memori Anda. Sebaliknya, volume dalam memori Anda akan 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 ukuran akan otomatis ditetapkan menjadi setengah dari total ukuran semua container dalam tugas atau layanan Anda. Misalnya, emptyDir volume size = [Memori (Container A) + Memori (Container B) + Memori (Container N)]/2. Perilaku default ini dapat menyebabkan batas ukuran volume dalam memori menjadi lebih tinggi daripada memori yang dialokasikan untuk beberapa container. Dalam situasi ini, jika penampung Anda terus menulis memori ke volume, penampung akan melebihi alokasi memori dan error sebelum batas ukuran volume tercapai.

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

Jalur yang tidak diizinkan

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

Kepemilikan volume berbeda berdasarkan lingkungan eksekusi dan jenis deployment

Saat Anda memasang volume, identitas yang memiliki file dan direktori akan berbeda bergantung pada lingkungan eksekusi workload dan apakah deployment terdiri dari satu atau banyak container.

Di lingkungan eksekusi generasi pertama tempat Anda men-deploy satu container, volumenya dimiliki oleh identitas yang digunakan untuk container. Dalam kasus lainnya, volume dimiliki oleh root. Hal ini mencakup:

  • Lingkungan eksekusi generasi pertama tempat Anda men-deploy banyak container
  • Lingkungan generasi kedua

Mengonfigurasi volume dalam memori

Setiap perubahan konfigurasi akan menghasilkan revisi baru. Revisi selanjutnya juga akan otomatis mendapatkan setelan konfigurasi ini, kecuali jika Anda melakukan pembaruan eksplisit untuk mengubahnya.

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

Konsol

  1. Pada konsol Google Cloud, buka halaman tugas Cloud Run:

    Buka Cloud Run

  2. Jika Anda sedang mengonfigurasi tugas baru, klik tabTugas dan isi halaman setelan tugas awal seperti yang diinginkan. Jika Anda sedang mengonfigurasi tugas yang sudah ada, klik tugas tersebut, lalu klikEdit.

  3. Klik Container, variabel dan secret, koneksi, keamanan untuk memperluas halaman properti tugas.

  4. Klik tab Volume.

    image

    • Di bagian Volume:
      • Klik Tambahkan volume.
      • Di drop-down Jenis volume, pilih Dalam memori sebagai jenis volume.
      • Di kolom Nama volume, masukkan nama yang ingin Anda gunakan untuk volume.
      • Di kolom Batas ukuran, tentukan batas memori yang ingin Anda tetapkan pada volume. Batas ini harus kurang dari total memori yang ditentukan untuk penampung Anda. Data yang disimpan dalam volume ini menggunakan memori yang dicadangkan oleh container yang menulis data.
      • Klik Done.
    • Klik tab Container, lalu luaskan penampung tempat Anda memasang volume untuk mengedit penampung.
    • Klik tab Pasang Volume.
    • Klik Pasang volume.
      • Pilih volume dalam memori dari menu.
      • Tentukan jalur tempat Anda ingin memasang volume.
      • Klik Pasang Volume
  5. Klik Buat atau Perbarui.

gcloud

  • Untuk menambahkan volume dan memasangnya:

    gcloud beta run jobs update JOB \
    --add-volume=name=VOLUME_NAME,type=in-memory,size-limit=SIZE_LIMIT \
    --add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH

    Ganti:

    • JOB dengan nama tugas Anda.
    • VOLUME_NAME dengan nama apa pun yang Anda inginkan untuk volume. Nilai VOLUME_NAME digunakan untuk memetakan volume ke pemasangan volume.
    • MOUNT_PATH dengan jalur relatif dalam sistem file container tempat Anda ingin memasang volume ini, misalnya, /mnt/my-volume.
    • SIZE_LIMIT dengan 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 jobs update JOB \
    --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 tugas baru, lewati langkah ini. Jika Anda mengupdate tugas yang sudah ada, download konfigurasi YAML:

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. Konfigurasikan atribut volumeMounts dan volumes seperti yang ditunjukkan:

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

    Ganti:

    • IMAGE_URL dengan 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 berbentuk LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • VOLUME_NAME dengan nama apa pun yang Anda inginkan untuk volume. Nilai VOLUME_NAME digunakan untuk memetakan volume ke pemasangan volume.
    • MOUNT_PATH dengan jalur relatif dalam sistem file container tempat Anda ingin memasang volume ini, misalnya, /mnt/my-volume.
    • SIZE_LIMIT dengan 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. Ganti layanan dengan konfigurasi baru menggunakan perintah berikut:

    gcloud beta run jobs replace job.yaml

Membaca dan menulis pada volume

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

Hal ini sangat berguna jika Anda menggunakan penampung 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 disetel ke /mnt/my-volume.

Nodejs

Gunakan modul Sistem File untuk membuat file baru atau menambahkan file yang ada ke dalam volume, /mnt/my-volume:

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

Python

Menulis ke file yang dipertahankan 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 di volume, /mnt/my-volume:

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