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 dalam sistem file container. Setelah memasang share file sebagai volume, Anda dapat 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
, atau /sys
, atau di subdirektorinya.
Batasan
Untuk menulis ke volume NFS, penampung Anda harus berjalan sebagai root. Jika container Anda hanya membaca dari sistem file, container tersebut dapat berjalan sebagai pengguna mana pun.
Cloud Run tidak mendukung penguncian NFS. Volume NFS dipasang secara otomatis dalam mode tanpa penguncian.
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 dengan membuat instance Filestore.
- Layanan Cloud Run Anda dilampirkan ke jaringan VPC tempat server NFS Anda berjalan. Untuk mendapatkan performa terbaik, gunakan VPC Langsung, bukan Konektor VPC.
- Jika Anda menggunakan project yang sudah ada, pastikan konfigurasi Firewall VPC Anda mengizinkan Cloud Run untuk menjangkau server NFS Anda. (Jika Anda memulai dari project baru, opsi ini benar secara default.) Jika Anda menggunakan Filestore sebagai server NFS, ikuti dokumentasi Filestore untuk membuat Aturan keluar firewall agar Cloud Run dapat menjangkau Filestore.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan untuk mengonfigurasi dan men-deploy layanan Cloud Run, minta administrator untuk memberi Anda peran IAM berikut pada layanan:
-
Cloud Run Developer (
roles/run.developer
) - layanan Cloud Run -
Pengguna Akun Layanan (
roles/iam.serviceAccountUser
) - identitas layanan
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.
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.
Konsol
Di konsol Google Cloud , buka Cloud Run:
Pilih Services dari menu, 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 meluaskan halaman konfigurasi layanan.
Klik tab Volumes.
- Di bagian Volumes:
- Klik Tambahkan volume.
- Di drop-down Volume type, pilih NFS sebagai jenis volume.
- Di kolom Nama volume, masukkan nama yang ingin Anda gunakan untuk volume.
- Di kolom Server NFS, masukkan nama domain atau lokasi (dalam
bentuk
IP_ADDRESS
) berbagi file NFS. - Di kolom Path, masukkan jalur ke direktori server NFS yang ingin Anda pasang.
- Klik Selesai.
- Klik tab Container, lalu luaskan container yang Anda pasangi volume untuk mengedit container.
- Klik tab Volume Mounts.
- Klik Mount volume.
- Pilih volume NFS dari menu.
- Tentukan jalur tempat Anda ingin memasang volume.
- Klik Mount Volume
- Di bagian Volumes:
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 Anda. 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 container, tentukan volume terlebih dahulu, lalu tentukan pemasangan volume untuk setiap container:
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
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
Perbarui MOUNT_PATH, VOLUME_NAME, IP_ADDRESS, dan NFS_PATH sesuai kebutuhan. Jika Anda 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 Anda. 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, atauFalse
untuk mengizinkan penulisan.
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"
location = "REGION"
template {
execution_environment = "EXECUTION_ENVIRONMENT_GEN2"
containers {
image = "us-docker.pkg.dev/cloudrun/container/hello"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
vpc_access {
network_interfaces {
network = "default"
subnetwork = "default"
}
}
volumes {
name = "VOLUME_NAME"
nfs {
server = google_filestore_instance.default.networks[0].ip_addresses[0]
path = "NFS_PATH"
read_only = IS_READ_ONLY
}
}
}
}
resource "google_filestore_instance" "default" {
name = "cloudrun-service-ro"
location = "REGION"
tier = "BASIC_HDD"
file_shares {
capacity_gb = 1024
name = "share1"
}
networks {
network = "default"
modes = ["MODE_IPV4"]
}
}
Ganti:
- SERVICE dengan nama layanan Cloud Run Anda.
- REGION dengan region Google Cloud . Contohnya,
europe-west1
. - MOUNT_PATH dengan jalur relatif tempat Anda memasang
volume, misalnya,
/mnt/nfs/filestore
. - VOLUME_NAME dengan nama apa pun yang Anda inginkan untuk volume Anda. Nilai VOLUME_NAME digunakan untuk memetakan volume ke pemasangan volume.
- NFS_PATH dengan jalur ke berbagi file NFS yang dimulai dengan
garis miring, misalnya,
/share1
. - IS_READ_ONLY dengan
True
untuk membuat volume hanya baca, atauFalse
untuk mengizinkan penulisan.
Membaca dan menulis ke volume
Jika Anda menggunakan fitur pemasangan volume Cloud Run, Anda mengakses volume yang dipasang menggunakan library yang sama dalam bahasa pemrograman yang Anda gunakan untuk membaca dan menulis file di sistem file lokal Anda.
Cara 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 ada
di volume, /mnt/my-volume
:
var fs = require('fs'); fs.appendFileSync('/mnt/my-volume/sample-logfile.txt', 'Hello logs!', { flag: 'a+' });
Python
Menulis ke file yang disimpan di volume, /mnt/my-volume
:
f = open("/mnt/my-volume/sample-logfile.txt", "a")
Go
Gunakan paket os
untuk membuat file baru yang disimpan di 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");
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 container Anda menulis ke server NFS, pastikan container tersebut berjalan sebagai root.
Waktu mulai container dan pemasangan volume NFS
Penggunaan pemasangan volume NFS dapat sedikit meningkatkan waktu cold start container Cloud Run karena pemasangan volume dimulai sebelum memulai container. Container Anda hanya akan dimulai jika NFS berhasil di-mount.
Perhatikan bahwa NFS berhasil memasang volume hanya setelah membuat koneksi ke server dan mengambil handle file. Jika Cloud Run gagal membuat koneksi ke server, layanan Cloud Run akan gagal dimulai.
Selain itu, penundaan jaringan apa pun dapat memengaruhi waktu startup container karena Cloud Run memiliki total waktu tunggu 30 detik untuk semua pemasangan. Jika pemasangan NFS memerlukan waktu lebih dari 30 detik, layanan Cloud Run akan gagal dimulai.
Karakteristik performa NFS
Jika Anda membuat lebih dari satu volume NFS, semua volume akan di-mount 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 disimpan dalam memori Cloud Run hingga data dihapus. Data akan dihapus dalam keadaan 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 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 layanan satu penampung, 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 individual
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