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 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 membuat Cloud Run menghentikan instance karena volume menggunakan terlalu banyak memori.
- Membagikan volume dalam memori antara berbagai container dalam satu instance Cloud Run. Saat Cloud Run menskalakan beberapa instance layanan, setiap instance akan memiliki volume dalam memori sendiri yang dibagikan oleh semua container di instance tersebut. Volume ini tersedia untuk semua container saat Cloud Run menskalakan 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.
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. 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 total ukuran semua container 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 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 error.
Jalur yang tidak diizinkan
Cloud Run tidak mengizinkan Anda memasang volume di /dev, /proc, dan /sys, atau di subdirektorinya.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan untuk mengonfigurasi dan men-deploy layanan Cloud Run, minta administrator untuk memberi Anda peran IAM berikut:
-
Developer Cloud Run (
roles/run.developer) di layanan Cloud Run -
Pengguna Akun Layanan (
roles/iam.serviceAccountUser) di identitas layanan
Jika Anda men-deploy layanan atau fungsi dari kode sumber, Anda juga harus memiliki peran tambahan yang diberikan kepada Anda di project dan akun layanan Cloud Build.
Untuk mengetahui daftar peran dan izin IAM yang terkait dengan Cloud Run, lihat Peran IAM Cloud Run dan Izin IAM Cloud Run. Jika layanan 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 layanan 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.
Konsol
Di Google Cloud konsol, buka Cloud Run:
Pilih Layanan dari menu navigasi Cloud Run, lalu klik Deploy container untuk mengonfigurasi layanan baru. Jika Anda mengonfigurasi layanan yang sudah ada, klik layanan tersebut, lalu klik Edit dan deploy revisi baru.
Jika Anda mengonfigurasi layanan baru, isi halaman setelan layanan awal, lalu klik Container, Volume, Jaringan, Keamanan untuk memperluas halaman konfigurasi layanan.
Klik tab Volume.
- Di bagian Volume:
- Klik Tambahkan volume.
- Di menu drop-down Jenis volume, pilih Dalam memori sebagai jenis volume.
- Di kolom Nama volume, masukkan nama yang ingin Anda gunakan untuk volume.
- Klik Selesai.
- Klik tab Container.
- Klik tab Pemasangan 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 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 kode berikut:
SERVICE: nama layanan Anda.- VOLUME_NAME: nama apa pun yang Anda inginkan untuk volume Anda. Nilai VOLUME_NAME digunakan untuk memetakan volume ke pemasangan 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 (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 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 memperbarui layanan yang sudah ada, download konfigurasi YAML-nya:
gcloud run services describe SERVICE --format export > service.yaml
Konfigurasikan atribut
volumeMountsdanvolumesseperti 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 kode berikut:
- IMAGE_URL: 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 mengikuti formatLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. - VOLUME_NAME: nama apa pun yang Anda inginkan untuk volume Anda. Nilai VOLUME_NAME digunakan untuk memetakan volume ke pemasangan 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 (ditetapkan sebagai Mi atau Gi), misalnya,
500Mi. Batas ini harus kurang dari total memori yang ditentukan untuk container Anda.
- IMAGE_URL: referensi ke image container, misalnya,
Buat atau perbarui layanan menggunakan perintah berikut:
gcloud run services replace service.yaml
Terraform
Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.
Tambahkan kode berikut ke resourcegoogle_cloud_run_v2_service
di konfigurasi Terraform Anda:resource "google_cloud_run_v2_service" "default" {
name = "SERVICE_NAME"
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:
- SERVICE_NAME: nama layanan Cloud Run Anda.
- REGION: Google Cloud region. Misalnya,
europe-west1. - IMAGE_URL: 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 mengikuti formatLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. - VOLUME_NAME: nama apa pun yang Anda inginkan untuk volume Anda. Nilai VOLUME_NAME digunakan untuk memetakan volume ke pemasangan 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 (ditetapkan sebagai Mi atau Gi), misalnya,
500Mi. Batas ini harus kurang dari total memori yang ditentukan untuk container Anda.
Compose
Untuk menentukan pemasangan volume dalam memori di file compose.yaml, gunakan ekstensi khusus Google x-google-cloudrun:volume-type: in-memory.
services: web: image: IMAGE volumes: - VOLUME_NAME:MOUNT_PATH volumes: VOLUME_NAME: x-google-cloudrun: volume-type: in-memory
Ganti kode berikut:
- IMAGE: URL image container Anda.
- VOLUME_NAME: nama volume dalam memori.
- MOUNT_PATH: jalur tempat Anda ingin memasang volume—misalnya,
/mnt/my-volume.
Men-deploy layanan
Untuk men-deploy layanan, jalankan perintah
gcloud run compose up:gcloud run compose up compose.yamlRespons
yterhadap setiap permintaan untuk menginstal komponen yang diperlukan atau untuk mengaktifkan API.Opsional: Tampilkan layanan Anda ke publik jika ingin mengizinkan akses tanpa autentikasi ke layanan.
Setelah deployment, URL layanan Cloud Run akan ditampilkan. Salin URL ini dan tempel ke browser Anda untuk melihat container yang sedang berjalan. Anda dapat menonaktifkan autentikasi default dari Google Cloud konsol.
Membaca dan menulis ke volume
Jika Anda menggunakan fitur pemasangan 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 pemasangan 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 serta pemasangan volume
Anda dapat menghapus semua volume dan pemasangan atau menghapus volume dan pemasangan volume satu per satu.
Menghapus semua volume dan pemasangan volume
Untuk menghapus semua volume dan pemasangan volume dari layanan container tunggal Anda, jalankan perintah berikut:
gcloud run services update SERVICE \ --clear-volumes --clear-volume-mounts
Jika Anda memiliki beberapa container, ikuti konvensi CLI sidecar untuk menghapus volume dan pemasangan volume:
gcloud run services update SERVICE \ --container=container1 \ --clear-volumes -–clear-volume-mounts \ --container=container2 \ --clear-volumes \ -–clear-volume-mounts
Menghapus volume dan pemasangan volume satu per satu
Untuk menghapus volume, Anda juga harus menghapus semua pemasangan volume yang menggunakan volume tersebut.
Untuk menghapus volume atau pemasangan volume satu per satu, gunakan flag remove-volume dan remove-volume-mount:
gcloud run services update SERVICE \ --remove-volume VOLUME_NAME \ --container=container1 \ --remove-volume-mount MOUNT_PATH \ --container=container2 \ --remove-volume-mount MOUNT_PATH