Nesta página, mostramos como montar um compartilhamento de arquivos NFS como um volume no Cloud Run. É possível usar qualquer servidor NFS, incluindo seu próprio servidor NFS hospedado no local ou em uma VM do Compute Engine. Se você ainda não tiver um servidor NFS, recomendamos o Filestore, que é uma oferta de NFS totalmente gerenciada do Google Cloud.
Se você quiser usar os sistemas de arquivos de rede NBd, 9P, CIFS/Samba e Ceph, consulte Como usar sistemas de arquivos de rede NBD, 9P, CIFS/Samba e Ceph.
Montar o compartilhamento de arquivos NFS como um volume no Cloud Run apresenta o arquivo compartilhar como arquivos no sistema de arquivos do contêiner. Depois de montar o arquivo compartilhar como um volume, você o acessa como se fosse um diretório no arquivo local usando as operações e bibliotecas do sistema de arquivos da sua linguagem de programação.
Caminhos não permitidos
O Cloud Run não permite montar um volume em /dev
,
/proc
e /sys
ou nos subdiretórios deles.
Limitações
Para gravar em um volume NFS, o contêiner precisa ser executado como raiz. Se o contêiner só fizer leituras no sistema de arquivos, ele poderá ser executado como qualquer usuário.
O Cloud Run não é compatível com bloqueio de NFS. Os volumes NFS são montados automaticamente no modo sem bloqueio.
Antes de começar
Para montar um servidor NFS como um volume no Cloud Run, verifique se você tem:
- Uma rede VPC em que o servidor NFS ou a instância do Filestore esteja em execução.
- Um servidor NFS em execução em uma rede VPC, com o serviço do Cloud Run conectado a essa rede VPC. Se você ainda não tiver um servidor NFS, crie um criando uma instância do Filestore.
- O serviço do Cloud Run está anexado à rede VPC em que o servidor NFS está em execução. Para ter o melhor desempenho, use a VPC direta em vez de conectores de VPC.
- Se você estiver usando um projeto atual, verifique se a configuração do firewall da VPC permite que o Cloud Run acesse seu servidor NFS. Se você está começando de um projeto novo, isso é verdade por padrão. Se você estiver usando o Filestore como servidor NFS, siga a documentação do Filestore para criar uma regra de saída de firewall e permitir que o Cloud Run alcance o Filestore.
Montar um volume NFS
É possível montar vários servidores NFS, instâncias do Filestore ou outros tipos de volumes em diferentes caminhos de montagem.
Ao usar vários contêineres, primeiro especifique o(s) volumes e, depois, a(s) montagem(ns) de volume de cada contêiner.
gcloud
Para adicionar um volume e montá-lo:
gcloud beta run jobs update JOB \ --add-volume name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH \ --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH
Substitua:
- JOB pelo nome do job.
- VOLUME_NAME pelo nome que você quer dar ao volume.
- IP_ADDRESS pelo local do compartilhamento de arquivos NFS.
- NFS_PATH pelo caminho para o compartilhamento de arquivos NFS.
- MOUNT_PATH pelo caminho no sistema de arquivos do contêiner em que você quer ativar esse volume.
Para montar o volume como somente leitura:
--add-volume name VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH,readonly=true
Ao usar vários contêineres, primeiro especifique os volumes e, depois, as montagens de volume de cada contêiner:
gcloud beta run jobs update JOB \ --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
Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:
gcloud run jobs describe JOB_NAME --format export > job.yaml
Atualize MOUNT_PATH, VOLUME_NAME, IP_ADDRESS e NFS_PATH conforme necessário. Se você tiver várias montagens de volume, terá vários desses atributos.
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME spec: metadata: annotations: run.googleapis.com/launch-stage: BETA template: metadata: annotations: run.googleapis.com/execution-environment: gen2 spec: template: 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
Substituir
- JOB pelo nome do seu job do Cloud Run.
- MOUNT_PATH pelo caminho relativo em que você está montando o volume, por exemplo,
/mnt/my-volume
. - VOLUME_NAME pelo nome que você quiser para o volume. O valor VOLUME_NAME é usado para mapear o volume para a montagem associada.
- IP_ADDRESS pelo endereço do compartilhamento de arquivos NFS.
- NFS_PATH pelo caminho para o compartilhamento de arquivos NFS.
- IS_READ_ONLY com
True
para tornar o volume somente leitura ouFalse
para permitir gravações.
Substitua o serviço pela nova configuração usando o seguinte comando:
gcloud beta run jobs replace job.yaml
Como ler e gravar em um volume
Se você usar o recurso de montagem de volume do Cloud Run, poderá acessar um volume usando as mesmas bibliotecas na linguagem de programação que você usa para ler e gravar arquivos no sistema de arquivos local.
Isso é especialmente útil se você estiver usando um contêiner existente em que espera os dados sejam armazenados no sistema de arquivos local e usa o sistema de arquivos para acessá-lo.
Os snippets a seguir pressupõem uma montagem de volume com mountPath
definido como /mnt/my-volume
.
Node.js
Use o módulo "Sistema de arquivos" para criar um novo arquivo ou anexar a um arquivo
no volume, /mnt/my-volume
:
var fs = require('fs'); fs.appendFileSync('/mnt/my-volume/sample-logfile.txt', 'Hello logs!', { flag: 'a+' });
Python
Grave em um arquivo mantido no volume, /mnt/my-volume
:
f = open("/mnt/my-volume/sample-logfile.txt", "a")
Go
Use o pacote os
para criar um novo arquivo mantido no volume: /mnt/my-volume
.
f, err := os.Create("/mnt/my-volume/sample-logfile.txt")
Java
Use a classe Java.io.File
para criar um arquivo de registros no volume, /mnt/my-volume
:
import java.io.File; File f = new File("/mnt/my-volume/sample-logfile.txt");
Solução de problemas de NFS
Se você tiver problemas, verifique se:
- O serviço do Cloud Run está conectado à rede VPC em que o servidor NFS está.
- Não há regras de firewall impedindo o Cloud Run de alcançar o servidor NFS.
- Se o contêiner grava no servidor NFS, verifique se ele está sendo executado como raiz.