Mengonfigurasi pemasangan volume dalam memori untuk layanan

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

  1. Di konsol Google Cloud, buka Cloud Run:

    Buka Cloud Run

  2. 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.

  3. Jika Anda mengonfigurasi layanan baru, isi layanan awal halaman setelan, lalu klik Container, volume, networking, security untuk meluaskan konfigurasi layanan Google Cloud.

  4. Klik tab Volume.

    gambar

    • 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
  5. 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

  1. 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
  2. Konfigurasikan atribut volumeMounts dan volumes 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 bentuk LOCATION-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.
  3. 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");