Mengonfigurasi pemasangan volume NFS untuk instance

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

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

Batasan

  • Cloud Run tidak mendukung penguncian NFS. Volume NFS otomatis dipasang dalam mode tanpa kunci.
  • Jalur yang tidak diizinkan: Cloud Run tidak mengizinkan Anda memasang volume di /dev, /proc, atau /sys, atau di subdirektorinya.

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 instance Cloud Run Anda terhubung ke jaringan VPC tersebut. Jika Anda belum memiliki server NFS, buat server NFS dengan membuat instance Filestore.
  • Instance Cloud Run Anda terlampir 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, hal ini akan berlaku secara default.) Jika Anda menggunakan Filestore sebagai server NFS, ikuti dokumentasi Filestore untuk membuat aturan traffic keluar Firewall agar Cloud Run dapat menjangkau Filestore.
  • Tetapkan izin pada berbagi file NFS jarak jauh Anda untuk mengizinkan akses bagi pengguna container. Secara default, Filestore memberikan akses baca ke semua pengguna, tetapi membatasi akses tulis ke pengguna root (uid 0). Jika container Anda memerlukan akses tulis dan tidak berjalan sebagai pengguna root, Anda harus menggunakan klien yang terhubung (berjalan sebagai root) untuk mengubah izin berbagi. Misalnya, Anda dapat menggunakan perintah chown untuk mengubah kepemilikan file atau direktori ke ID pengguna tertentu tempat container Anda berjalan.

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

Memasang volume NFS

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

Jika Anda menggunakan beberapa container, tentukan volume terlebih dahulu, lalu tentukan pemasangan volume untuk setiap container.

Konfigurasi pemasangan volume NFS menggunakan Google Cloud CLI atau YAML;

gcloud

  • Untuk menambahkan pemasangan volume:

    gcloud beta run instances update INSTANCE \
    --add-volume mount-path=MOUNT_PATH,type=nfs,location=IP_ADDRESS:NFS_PATH,readonly=READ_ONLY

    Ganti kode berikut:

    • INSTANCE: nama instance Anda.
    • MOUNT_PATH: jalur relatif tempat Anda memasang volume, misalnya, /mnt/my-volume.
    • IP_ADDRESS: lokasi berbagi file NFS.
    • NFS_PATH: jalur ke berbagi file NFS yang dimulai dengan garis miring—misalnya /example-directory.
    • READ_ONLY: true untuk membuat volume hanya baca, atau false untuk mengizinkan penulisan.
  • Jika Anda menggunakan beberapa container, tentukan volume terlebih dahulu, lalu tentukan pemasangan volume untuk setiap container:

    gcloud beta run instances update INSTANCE \
      --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 instance baru, lewati langkah ini. Jika Anda memperbarui instance yang sudah ada, download konfigurasi YAML-nya:

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. Contoh berikut berisi konfigurasi YAML:

    apiVersion: run.googleapis.com/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      containers:
      - name: CONTAINER_NAME
        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 kode berikut:

    • INSTANCE: nama instance Cloud Run Anda.
    • CONTAINER_NAME: nama container.
    • IMAGE_URL: referensi ke image container, seperti us-docker.pkg.dev/cloudrun/container/hello:latest.
    • 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 tempat Anda memasang volume—misalnya, /mnt/my-volume.
    • IP_ADDRESS: alamat berbagi file NFS.
    • NFS_PATH: jalur ke berbagi file NFS yang dimulai dengan garis miring—misalnya, /example-directory.
    • IS_READ_ONLY: True untuk membuat volume hanya baca, atau False untuk mengizinkan penulisan.
  3. Buat atau perbarui instance menggunakan perintah berikut:

    gcloud beta run instances replace instance.yaml

Pemecahan masalah NFS

Jika Anda mengalami masalah, periksa hal berikut:

  • Instance Cloud Run Anda terhubung ke jaringan VPC tempat server NFS berada.
  • Tidak ada aturan firewall yang mencegah Cloud Run menjangkau server NFS.
  • Jika container Anda perlu menulis data, pastikan izin berbagi NFS dikonfigurasi untuk mengizinkan penulisan dari pengguna container Anda.

Waktu startup container dan pemasangan volume NFS

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

Perhatikan bahwa NFS berhasil memasang volume hanya setelah membuat koneksi ke server dan mengambil handle file. Jika Cloud Run gagal membuat koneksi ke server, instance Cloud Run akan gagal dimulai.

Selain itu, penundaan jaringan apa pun dapat berdampak pada waktu startup container karena Cloud Run memiliki total waktu tunggu 30 detik untuk semua pemasangan. Jika NFS memerlukan waktu lebih dari 30 detik untuk dipasang, instance Cloud Run akan gagal dimulai.

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

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

  • Aplikasi Anda mem-flush 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 mengetahui informasi selengkapnya, lihat dokumentasi Linux tentang NFS.

Menghapus dan menghapus volume dan 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 instance container tunggal Anda, jalankan perintah berikut:

gcloud beta run instances update INSTANCE \
    --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 beta run instances update INSTANCE \
    --remove-volume VOLUME_NAME \
    --container=container1 \
    --remove-volume-mount MOUNT_PATH \
    --container=container2 \
    --remove-volume-mount MOUNT_PATH