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
Di konsol Google Cloud, buka Cloud Run:
Klik Deploy container lalu pilih Service untuk mengonfigurasi layanan baru. Jika Anda mengonfigurasi layanan yang ada, klik service, lalu klik Edit and deploy new revision.
Jika Anda mengonfigurasi layanan baru, isi layanan awal halaman setelan, lalu klik Container, volume, networking, security untuk meluaskan konfigurasi layanan Google Cloud.
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.
- Klik Done.
- Klik tab 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 Deploy.
gcloud
Untuk menambahkan volume dan memasangnya:
gcloud beta run services update SERVICE \ --add-volume=name=VOLUME_NAME,type=in-memory,size-limit=SIZE_LIMIT \ --add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH
Ganti:
SERVICE
dengan nama layanan 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 services update SERVICE \ --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 layanan baru, lewati langkah ini. Jika Anda mengupdate layanan yang sudah ada, download konfigurasi YAML:
gcloud run services describe SERVICE --format export > service.yaml
Konfigurasikan atribut
volumeMounts
danvolumes
seperti yang ditunjukkan:apiVersion: serving.knative.dev/v1 kind: Service 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 update layanan menggunakan perintah berikut:
gcloud run services replace service.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");