Halaman ini menjelaskan cara mengonfigurasi volume dalam memori khusus yang dapat Anda gunakan untuk membaca dan menulis file menggunakan penyangga 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 dapat mengaksesnya seolah-olah volume tersebut 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. Hal ini lebih baik daripada 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 Anda. 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 ukuran total semua container di kumpulan pekerja 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 kumpulan pekerja 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
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 kumpulan pekerja 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 penyangga volume dalam memori menggunakan Google Cloud konsol, Google Cloud CLI, YAML, atau Terraform.
Konsol
Di Google Cloud konsol, buka Cloud Run:
Pilih Kumpulan pekerja dari menu, lalu klik Deploy container untuk mengonfigurasi kumpulan pekerja baru. Jika Anda mengonfigurasi kumpulan pekerja yang sudah ada, klik kumpulan pekerja, lalu klik Edit dan deploy revisi baru.
Jika Anda mengonfigurasi kumpulan pekerja baru, isi halaman kumpulan pekerja awal, lalu klik Container, Jaringan, Keamanan untuk memperluas halaman konfigurasi kumpulan pekerja.
Klik tab Volume.
- Klik Pasang volume.
- Klik Dalam memori sebagai jenis volume.
- Di kolom Jalur pemasangan, masukkan jalur tempat Anda ingin memasang volume.
- Di kolom Nama volume, masukkan nama volume.
- Opsional: Masukkan Batas ukuran dan Unit memori untuk menentukan batas memori yang ingin Anda tetapkan ke volume. Batas ini harus kurang dari total memori yang ditentukan untuk container Anda. Data yang disimpan dalam volume ini menggunakan memori yang dicadangkan oleh container yang menulis data.
- Klik Simpan.
Klik Buat atau Deploy.
gcloud
Untuk memasang volume:
gcloud run worker-pools update WORKER_POOL \ --add-volume mount-path=MOUNT_PATH,type=in-memory,size-limit=SIZE_LIMIT
Ganti kode berikut:
- WORKER_POOL: nama kumpulan pekerja 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 (ditentukan 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 penyangga volume untuk setiap container:
gcloud run worker-pools update WORKER_POOL \ --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 kumpulan pekerja baru, lewati langkah ini. Jika Anda memperbarui kumpulan pekerja yang sudah ada, download konfigurasi YAML-nya:
gcloud run worker-pools describe WORKER_POOL --format export > worker-pool.yaml
Contoh berikut berisi konfigurasi YAML:
apiVersion: run.googleapis.com/v1 kind: WorkerPool metadata: name: WORKER_POOL spec: template: 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:
- WORKER_POOL: nama kumpulan pekerja Cloud Run Anda.
- CONTAINER_NAME: nama container.
IMAGE_URL: referensi ke image container yang berisi kumpulan pekerja, sepertius-docker.pkg.dev/cloudrun/container/worker-pool:latest- VOLUME_NAME: nama apa pun yang Anda inginkan untuk volume Anda. Nilai VOLUME_NAME digunakan untuk memetakan volume ke penyangga 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 (ditentukan sebagai Mi atau Gi), misalnya,
500Mi. Batas ini harus kurang dari total memori yang ditentukan untuk container Anda.
Buat atau perbarui kumpulan pekerja menggunakan perintah berikut:
gcloud run worker-pools replace worker-pool.yaml
Perintah
gcloud run worker-pools replacesecara default menggunakan fileworker-pool.yamljika ada.
Terraform
Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.
Untuk menentukan satu container, volume, dan penyangga volume:
resource "google_cloud_run_v2_worker_pool" "default" {
name = "WORKER_POOL"
location = "REGION"
template {
containers {
image = "IMAGE_URL"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
volumes {
name = "VOLUME_NAME"
empty_dir {
medium = "MEMORY"
size_limit = "SIZE_LIMIT"
}
}
}
}
Ganti kode berikut:
- WORKER_POOL: nama kumpulan pekerja Cloud Run Anda.
- REGION: Google Cloud region—misalnya,
europe-west1. IMAGE_URL: referensi ke image container yang berisi kumpulan pekerja, sepertius-docker.pkg.dev/cloudrun/container/worker-pool:latest.- VOLUME_NAME: nama apa pun yang Anda inginkan untuk volume Anda. Nilai VOLUME_NAME digunakan untuk memetakan volume ke penyangga volume.
- 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 (ditentukan sebagai Mi atau Gi)—misalnya,
500Mi. Batas ini harus kurang dari total memori yang ditentukan untuk container Anda.
Untuk menentukan beberapa container, volume, dan penyangga volume:
resource "google_cloud_run_v2_worker_pool" "default" {
name = "WORKER_POOL"
location = "REGION"
template {
containers {
image = "IMAGE_URL"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
containers {
image = "IMAGE_URL_2"
volume_mounts {
name = "VOLUME_NAME_2"
mount_path = "MOUNT_PATH_2"
}
}
volumes {
name = "VOLUME_NAME"
empty_dir {
medium = "MEMORY"
size_limit = "SIZE_LIMIT"
}
}
volumes {
name = "VOLUME_NAME_2"
empty_dir {
medium = "MEMORY"
size_limit = "SIZE_LIMIT_2"
}
}
}
}
Ganti kode berikut:
- WORKER_POOL: nama kumpulan pekerja Cloud Run Anda.
- REGION: Google Cloud region—misalnya,
europe-west1. - IMAGE_URL, IMAGE_URL_2: referensi ke image container yang berisi kumpulan pekerja, seperti
us-docker.pkg.dev/cloudrun/container/worker-pool:latest. - VOLUME_NAME, VOLUME_NAME_2: nama apa pun yang Anda inginkan untuk volume Anda. Nilai ini digunakan untuk memetakan volume ke penyangga volume.
- MOUNT_PATH, MOUNT_PATH_2: jalur relatif dalam sistem file
container tempat Anda ingin memasang volume ini—misalnya,
/mnt/my-volume. - SIZE_LIMIT, SIZE_LIMIT_2: batas memori yang ingin Anda
tetapkan ke volume, dalam MiB atau GiB (ditentukan sebagai Mi atau Gi)—misalnya,
500Mi. Batas ini harus kurang dari total memori yang ditentukan untuk container Anda.
Melihat konfigurasi variabel lingkungan untuk kumpulan pekerja
Di Google Cloud konsol, buka Cloud Run:
Klik Kumpulan pekerja untuk menampilkan daftar kumpulan pekerja yang di-deploy.
Klik kumpulan pekerja yang ingin Anda periksa untuk menampilkan panel detailnya.
Klik tab Container untuk menampilkan konfigurasi container kumpulan pekerja.
Membaca dan menulis ke volume
Jika menggunakan fitur penyangga volume Cloud Run, Anda dapat 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 container yang sudah ada yang mengharapkan data disimpan di sistem file lokal dan menggunakan operasi sistem file reguler untuk mengaksesnya.
Cuplikan berikut mengasumsikan penyangga volume dengan mountPath yang ditetapkan ke /mnt/my-volume.
Nodejs
Gunakan modul Sistem File untuk membuat file baru atau menambahkan ke file yang sudah 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 penyangga volume
Anda dapat menghapus semua volume dan penyangga atau menghapus volume dan penyangga volume satu per satu.
Menghapus semua volume dan penyangga volume
Untuk menghapus semua volume dan penyangga volume dari kumpulan pekerja satu container, jalankan perintah berikut:
gcloud run worker-pools update WORKER_POOL \ --clear-volumes \ --clear-volume-mounts
gcloud run worker-pools update WORKER_POOL \ --container=container1 \ --clear-volumes \ --clear-volume-mounts \ --container=container2 \ --clear-volumes \ --clear-volume-mounts
Menghapus volume dan penyangga volume satu per satu
Untuk menghapus volume, Anda juga harus menghapus semua penyangga volume yang menggunakan volume tersebut.
Untuk menghapus volume atau penyangga volume satu per satu, gunakan flag remove-volume dan remove-volume-mount:
gcloud run worker-pools update WORKER_POOL \ --remove-volume VOLUME_NAME \ --container=container1 \ --remove-volume-mount MOUNT_PATH \ --container=container2 \ --remove-volume-mount MOUNT_PATH