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 penampung. Setelah memasang volume dalam memori, Anda 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:
- Batasi ukuran volume dalam memori. Jika Anda membatasi ukuran volume, penulisan ke volume penuh akan gagal, yang lebih baik daripada Cloud Run menghentikan instance karena volume menggunakan terlalu banyak memori.
- Membagikan volume dalam memori di antara penampung yang berbeda dalam satu instance Cloud Run. Saat Cloud Run diskalakan ke beberapa instance layanan, setiap instance akan memiliki volume dalam memorinya sendiri yang digunakan bersama oleh semua container di instance tersebut. Volume ini tersedia untuk semua penampung saat Cloud Run diskalakan 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 memori tidak cukup. 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 dikonfigurasi untuk penampung. Jika Anda men-deploy beberapa penampung, memori yang digunakan oleh setiap operasi tulis ke volume akan dihitung sebagai penggunaan memori untuk penampung yang menulis data.
Jika Anda tidak menentukan batas ukuran, batas ukuran akan otomatis ditetapkan ke setengah dari
total ukuran semua penampung dalam tugas atau layanan 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 dari memori yang dialokasikan untuk beberapa penampung Anda. Dalam situasi ini,
jika penampung terus menulis memori ke volume, penampung akan melebihi
memori yang dialokasikan dan error sebelum batas ukuran volume tercapai.
Meskipun menetapkan batas ukuran bersifat opsional, sebaiknya tetap tetapkan batas ukuran untuk melindungi penampung 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.
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 tersebut tersedia selama instance tersebut berjalan. Saat instance berhenti berjalan, data dalam volume akan dihapus secara permanen.
Konsol
Di konsol Google Cloud, buka Cloud Run:
Klik Deploy container dan pilih Service untuk mengonfigurasi layanan baru. Jika Anda mengonfigurasi layanan yang sudah ada, klik layanan, lalu klik Edit dan deploy revisi baru.
Jika Anda mengonfigurasi layanan baru, isi halaman setelan layanan awal, lalu klik Container, volume, networking, security untuk memperluas halaman konfigurasi layanan.
Klik tab Volume.
- Di bagian Volumes:
- Klik Tambahkan volume.
- Di drop-down Volume type, pilih In-memory sebagai jenis volume.
- Di kolom Volume name, masukkan nama yang ingin digunakan untuk volume.
- Klik Done.
- Klik tab Container.
- Klik tab Volume Mounts.
- Klik Mount volume.
- Pilih volume dalam memori dari menu.
- Tentukan jalur tempat Anda ingin memasang volume.
- Klik Mount Volume
- Di bagian Volumes:
Klik Buat atau Deploy.
gcloud
Untuk menambahkan volume dan memasangnya:
gcloud 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 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 penampung, tentukan volume terlebih dahulu, lalu tentukan pemasangan volume untuk setiap penampung:
gcloud 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-nya:
gcloud run services describe SERVICE --format export > service.yaml
Konfigurasikan atribut
volumeMounts
danvolumes
seperti yang ditunjukkan:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE_NAME 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 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.
- IMAGE_URL dengan referensi ke image container,
misalnya,
Buat atau perbarui layanan menggunakan perintah berikut:
gcloud run services replace service.yaml
Membaca dan menulis ke volume
Jika menggunakan fitur pemasangan volume Cloud Run, Anda akan mengakses volume yang dipasang 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 penampung 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
dalam 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");