Halaman ini menjelaskan cara mengonfigurasi volume dalam memori khusus yang dapat Anda gunakan untuk pembacaan dan penulisan file menggunakan pemasangan volume Cloud Run. Perhatikan bahwa berbeda dengan fitur bawaan sistem file dalam memori yang disediakan oleh di Cloud Run.
Saat Anda memasang volume dalam memori di Cloud Run, volume dalam memori akan muncul sebagai file dalam sistem file container. Setelah Anda memasang model dalam memori Anda mengaksesnya seolah-olah itu adalah direktori di file lokal Anda sistem file, menggunakan operasi dan pustaka sistem file dalam bahasa pemrograman Anda.
Anda dapat menggunakan volume dalam memori untuk melakukan hal berikut:
- Batasi ukuran volume dalam memori. Saat Anda membatasi ukuran volume, operasi tulis akan gagal, yang lebih baik dilakukan Cloud Run menghentikan instance karena volumenya menghabiskan terlalu banyak memori.
- Membagikan volume dalam memori antar-container yang berbeda dalam satu Cloud Run di instance Compute Engine. Saat Cloud Run meningkatkan skala hingga ke beberapa instance , setiap instance akan memiliki layanan dalam memori yang digunakan bersama oleh semua container pada instance tersebut. Volume ini tersedia untuk semua container saat Cloud Run melakukan penskalaan untuk menangani traffic.
Perilaku
Saat membuat volume dalam memori, sebaiknya tentukan batas ukuran. Jika volume mencapai batas ukurannya, operasi tulis lebih lanjut akan gagal dengan memori habis {i>error<i}. Instance Anda dapat menangani error ini dan terus berjalan.
Perhatikan bahwa batas ukuran hanyalah batas: tidak mengalokasikan ruang tambahan untuk volume dalam memori. Sebaliknya, volume dalam memori Anda menghabiskan memori yang untuk container Anda. Jika Anda men-deploy beberapa container, yang digunakan oleh setiap penulisan ke volume akan dihitung sebagai penggunaan memori untuk kontainer yang yang menulis datanya.
Jika Anda tidak menetapkan batas ukuran, maka akan otomatis disetel menjadi setengah
ukuran total semua kontainer dalam tugas atau layanan Anda. Misalnya,
Ukuran volume emptyDir
= [Memori (Container A) + Memori (Container B) + Memori (Container N)]/2.
Perilaku default ini dapat mengakibatkan batas ukuran volume dalam memori
lebih tinggi dari memori yang
dialokasikan untuk beberapa kontainer. Dalam situasi ini,
jika container terus menulis memori ke volume, container akan melampaui
memori yang dialokasikan dan error sebelum batas ukuran volume tercapai.
Meskipun menyetel batas ukuran bersifat opsional, sebaiknya Anda menyetelnya untuk melindungi container Anda sehingga 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, volume kosong akan dibuat untuk setiap instance Cloud Run yang dimulai, dan volume masih ada selama {i> instance<i} itu berjalan. Saat instance berhenti berjalan, data dalam volume akan dihapus secara permanen.
Konsol
Pada konsol Google Cloud, buka halaman tugas Cloud Run:
Klik Deploy container dan pilih Job untuk mengisi tugas awal halaman setelan. Jika Anda mengonfigurasi tugas yang ada, pilih tugas tersebut, lalu klik Edit.
Klik Container, variabel dan secret, koneksi, keamanan untuk memperluas halaman properti tugas.
Klik tab Volume.
- 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 container yang akan dipasang 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
- Di bagian Volume:
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 penampung sistem file 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 penampung, tentukan volume terlebih dahulu, lalu menentukan 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
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
Konfigurasikan atribut
volumeMounts
danvolumes
seperti yang ditunjukkan:apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME metadata: annotations: run.googleapis.com/launch-stage: BETA spec: template: 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 memiliki bentukLOCATION-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 penampung sistem file 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.
- IMAGE_URL dengan referensi ke image container,
misalnya,
Buat atau perbarui tugas menggunakan perintah berikut:
gcloud run jobs replace job.yaml
Membaca dan menulis pada volume
Jika menggunakan fitur pemasangan volume Cloud Run, Anda akan mengakses volume menggunakan pustaka yang sama dalam bahasa pemrograman yang Anda gunakan untuk membaca dan menulis file di sistem file lokal Anda.
Hal ini sangat berguna jika Anda menggunakan penampung yang sudah ada dan mengharapkan data untuk disimpan di sistem file lokal dan menggunakan sistem file biasa operasi 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 sudah ada
pada 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 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");