Mengonfigurasi pemasangan volume NFS untuk layanan

Halaman ini menunjukkan cara memasang berbagi file NFS sebagai volume di Cloud Run. Anda dapat menggunakan server NFS apa pun, termasuk server NFS Anda sendiri yang dihosting di lokal, atau di VM Compute Engine. Jika Anda belum memiliki server NFS, sebaiknya gunakan Filestore, yang merupakan penawaran NFS yang dikelola sepenuhnya dari Google Cloud.

Jika Anda ingin menggunakan sistem file jaringan NBD, 9P, CIFS/Samba, dan Ceph, lihat menggunakan sistem file jaringan NBD, 9P, CIFS/Samba, dan Ceph.

Memasang berbagi file NFS sebagai volume di Cloud Run akan menampilkan berbagi file sebagai file di sistem file penampung. Setelah memasang berbagi file sebagai volume, Anda mengaksesnya seolah-olah itu adalah direktori di sistem file lokal, menggunakan operasi dan library sistem file bahasa pemrograman Anda.

Jalur yang tidak diizinkan

Cloud Run tidak mengizinkan Anda memasang volume di /dev, /proc, dan /sys, atau di subdirektorinya.

Batasan

  • Untuk menulis ke volume NFS, penampung Anda harus berjalan sebagai root. Jika penampung Anda hanya membaca dari sistem file, penampung tersebut dapat berjalan sebagai pengguna mana pun.

  • Cloud Run tidak mendukung penguncian NFS. Volume NFS otomatis dipasang dalam mode tanpa kunci.

Sebelum memulai

Untuk memasang server NFS sebagai volume di Cloud Run, pastikan Anda memiliki hal berikut:

  • Jaringan VPC tempat server NFS atau instance Filestore Anda berjalan.
  • Server NFS yang berjalan di jaringan VPC, dengan layanan Cloud Run Anda terhubung ke jaringan VPC tersebut. Jika Anda belum memiliki server NFS, buat server NFS dengan membuat instance Filestore.
  • Layanan Cloud Run Anda dilampirkan ke jaringan VPC tempat server NFS Anda berjalan. Untuk performa terbaik, gunakan VPC Langsung, bukan Konektor VPC.
  • Jika Anda menggunakan project yang sudah ada, pastikan konfigurasi Firewall VPC Anda mengizinkan Cloud Run menjangkau server NFS Anda. (Jika Anda memulai dari project baru, ini akan berlaku secara default.) Jika Anda menggunakan Filestore sebagai server NFS, ikuti dokumentasi Filestore untuk membuat Aturan keluar firewall agar Cloud Run dapat menjangkau Filestore.

Memasang volume NFS

Anda dapat memasang beberapa server NFS, instance Filestore, atau jenis volume lain di jalur pemasangan yang berbeda.

Jika Anda menggunakan beberapa penampung, tentukan volume terlebih dahulu, lalu tentukan mount volume untuk setiap penampung.

Konsol

  1. Di konsol Google Cloud, buka Cloud Run:

    Buka Cloud Run

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

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

  4. Klik tab Volume.

    gambar

    • Di bagian Volumes:
      • Klik Tambahkan volume.
      • Di drop-down Volume type, pilih NFS sebagai jenis volume.
      • Di kolom Volume name, masukkan nama yang ingin digunakan untuk volume.
      • Di kolom Server NFS, masukkan nama domain atau lokasi (dalam bentuk IP_ADDRESS) dari berbagi file NFS.
      • Di kolom Path, masukkan jalur ke direktori server NFS yang ingin Anda pasang.
      • Klik Done.
    • Klik tab Container, lalu luaskan penampung tempat Anda memasang volume, untuk mengedit penampung.
    • Klik tab Volume Mounts.
    • Klik Mount volume.
      • Pilih volume NFS dari menu.
      • Tentukan jalur tempat Anda ingin memasang volume.
      • Klik Mount Volume
  5. Klik Buat atau Deploy.

gcloud

  • Untuk menambahkan volume dan memasangnya:

    gcloud run services update SERVICE \
    --add-volume=name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH \
    --add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH

    Ganti:

    • SERVICE dengan nama layanan Anda.
    • VOLUME_NAME dengan nama yang ingin Anda berikan ke volume.
    • IP_ADDRESS dengan lokasi berbagi file NFS.
    • NFS_PATH dengan jalur ke berbagi file NFS yang dimulai dengan garis miring, misalnya /example-directory.
    • MOUNT_PATH dengan jalur relatif tempat Anda memasang volume, misalnya, /mnt/my-volume.
    • VOLUME_NAME dengan nama apa pun yang Anda inginkan untuk volume. Nilai VOLUME_NAME digunakan untuk memetakan volume ke pemasangan volume.
  • Untuk memasang volume sebagai volume hanya baca:

    --add-volume=name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH,readonly=true
  • 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=nfs,location=IP_ADDRESS:NFS_PATH \
    --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-nya:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Perbarui MOUNT_PATH, VOLUME_NAME, IP_ADDRESS, dan NFS_PATH sesuai kebutuhan. Jika memiliki beberapa pemasangan volume, Anda akan memiliki beberapa atribut ini.

    apiVersion: run.googleapis.com/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/execution-environment: gen2
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - name: VOLUME_NAME
              mountPath: MOUNT_PATH
          volumes:
          - name: VOLUME_NAME
            nfs:
              server: IP_ADDRESS
              path: NFS_PATH
              readOnly: IS_READ_ONLY

    Ganti

    • SERVICE dengan nama layanan Cloud Run Anda
    • MOUNT_PATH dengan jalur relatif tempat Anda memasang volume, misalnya, /mnt/my-volume.
    • VOLUME_NAME dengan nama apa pun yang Anda inginkan untuk volume. Nilai VOLUME_NAME digunakan untuk memetakan volume ke pemasangan volume.
    • IP_ADDRESS dengan alamat berbagi file NFS.
    • NFS_PATH dengan jalur ke berbagi file NFS yang dimulai dengan garis miring, misalnya, /example-directory.
    • IS_READ_ONLY dengan True untuk membuat volume hanya baca, atau False untuk mengizinkan operasi tulis.
  3. 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");

Memecahkan masalah NFS

Jika Anda mengalami masalah, periksa hal berikut:

  • Layanan Cloud Run Anda terhubung ke jaringan VPC tempat server NFS berada.
  • Tidak ada aturan firewall yang mencegah Cloud Run menjangkau server NFS.
  • Jika penampung Anda menulis ke server NFS, pastikan penampung tersebut berjalan sebagai root.

Waktu pengaktifan container dan pemasangan volume NFS

Menggunakan pemasangan volume NFS dapat sedikit meningkatkan waktu cold start container Cloud Run karena pemasangan volume dimulai sebelum memulai container. Penampung Anda hanya akan dimulai jika NFS berhasil dipasang.

Perhatikan bahwa NFS berhasil memasang volume hanya setelah membuat koneksi ke server dan mengambil filehandle. Setiap penundaan jaringan dapat memengaruhi waktu startup penampung. Jika Cloud Run gagal membangun koneksi ke server, layanan Cloud Run akan gagal dimulai. Selain itu, jika NFS memerlukan waktu lebih dari 30 detik untuk di-mount, layanan Cloud Run akan gagal dimulai karena Cloud Run memiliki waktu tunggu total 30 detik untuk melakukan semua pemasangan.

Karakteristik performa NFS

Jika Anda membuat lebih dari satu volume NFS, semua volume akan dipasang secara paralel.

Karena NFS adalah sistem file jaringan, NFS tunduk pada batas bandwidth dan akses ke sistem file dapat terpengaruh oleh bandwidth yang terbatas.

Saat Anda menulis ke volume NFS, penulisan akan disimpan dalam memori Cloud Run hingga data dihapus. Data dihapus dalam situasi berikut:

  • Aplikasi Anda menghapus data file secara eksplisit menggunakan sync(2), msync(2), atau fsync(3).
  • Aplikasi Anda menutup file dengan close(2).
  • Tekanan memori memaksa reklamasi resource memori sistem.

Untuk informasi selengkapnya, lihat dokumentasi Linux tentang NFS.