Configurar montagens de volumes NFS para pools de worker

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.

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 ou /sys, ou nos subdiretórios deles.

Limitações

  • 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 pool de workers 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 pool de workers 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.
  • Defina as permissões no compartilhamento de arquivos NFS remoto para permitir o acesso ao usuário do contêiner. Por padrão, o Filestore oferece acesso de leitura a todos os usuários, mas restringe o acesso de gravação ao usuário raiz (uid 0). Se o contêiner exigir acesso de gravação e não for executado como usuário raiz, use um cliente conectado (executado como raiz) para modificar as permissões de compartilhamento. Por exemplo, use o comando chown para mudar a propriedade dos arquivos ou diretórios para o ID de usuário específico em que o contêiner é executado.

Funções exigidas

Para uma lista de papéis e permissões do IAM associados ao Cloud Run, consulte Papéis do IAM do Cloud Run e Permissões do IAM do Cloud Run. Se o pool de trabalhadores do Cloud Run interagir com APIs doGoogle Cloud , como as bibliotecas de cliente do Cloud, consulte o guia de configuração de identidade de serviço. Para mais informações sobre como conceder papéis, consulte permissões de implantação e gerenciar acesso.

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.

Configure uma montagem de volume NFS usando o console Google Cloud , a CLI do Google Cloud ou o Terraform.

Console

  1. No Google Cloud console, acesse o Cloud Run:

    Acessar o Cloud Run

  2. Selecione Pools de workers no menu e clique em Implantar contêiner para configurar um novo pool de workers. Se você estiver configurando um pool de workers atual, clique nele e em Editar e implantar nova revisão.

  3. Se você estiver configurando um novo pool de workers, preencha a página inicial do pool e clique em Contêineres, volumes, Rede e segurança para expandir a página de configuração de pools de workers.

  4. Clique na guia Volumes.

    imagem

    • Em Volumes, clique em Adicionar volume.
      • No menu suspenso Tipo de volume, selecione NFS.
      • No campo Nome do volume, digite o nome que você quer usar para o volume.
      • No campo Servidor NFS, digite o nome ou o local do domínio (no formulário IP_ADDRESS) do compartilhamento de arquivos NFS.
      • No campo Caminho, digite o caminho para o diretório do servidor NFS que você quer montar.
      • Clique em Concluído.
    • Clique na guia "Contêiner", localize o contêiner que você quer montar e abra os detalhes dele.
    • Clique na guia Montagens de volumes.
    • Clique em Montar volume.
      • Selecione o volume NFS de armazenamento no menu.
      • Especifique o caminho em que você quer montar o volume.
      • Clique em Montar volume.
      • Clique em Concluído.
  5. Clique em Criar ou Implantar.

gcloud

  • Para adicionar um volume e montá-lo:

    gcloud beta run worker-pools update WORKER_POOL \
    --add-volume name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

    Substitua:

    • WORKER_POOL: o nome do pool de workers.
    • VOLUME_NAME: o nome que você quer dar ao volume.
    • IP_ADDRESS: o local do compartilhamento de arquivos NFS.
    • NFS_PATH: o caminho para o compartilhamento de arquivos NFS que começa com uma barra, por exemplo, /example-directory.
    • MOUNT_PATH: o caminho relativo em que você está montando o volume, por exemplo, /mnt/my-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 worker-pools update WORKER_POOL \
    --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

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.

resource "google_cloud_run_v2_worker_pool" "default" {
  name = "WORKER_POOL"
  location = "REGION"
  launch_stage = "BETA"

  template {
    containers {
      image = "IMAGE_URL"
      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-worker-pool"
  location = "REGION"
  tier     = "BASIC_HDD"

  file_shares {
    capacity_gb = 1024
    name        = "share1"
  }

  networks {
    network = "default"
    modes   = ["MODE_IPV4"]
  }
}

Substitua:

  • WORKER_POOL: o nome do pool de workers.
  • REGION: a região Google Cloud , por exemplo, europe-west1.
  • IMAGE_URL: uma referência à imagem de contêiner que contém o pool de workers, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
  • VOLUME_NAME: o nome do volume. O valor VOLUME_NAME é usado para mapear o volume para a montagem associada.
  • MOUNT_PATH: o caminho relativo em que você está montando o volume, por exemplo, /mnt/my-volume.
  • NFS_PATH: o caminho para o compartilhamento de arquivos NFS.
  • IS_READ_ONLY: True para tornar o volume somente leitura ou False para permitir gravações.

Ver a configuração da variável de ambiente para o pool de workers

  1. No Google Cloud console, acesse o Cloud Run:

    Acessar o Cloud Run

  2. Clique em Pools de workers para mostrar a lista de pools de workers implantados.

  3. Clique no pool de workers que você quer examinar para mostrar o painel de detalhes.

  4. Clique na guia Contêineres para mostrar a configuração do contêiner do pool de workers.

Solução de problemas de NFS

Se você tiver problemas, verifique se:

  • O pool de workers 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 precisar gravar dados, verifique se as permissões de compartilhamento do NFS estão configuradas para permitir gravações do usuário do contêiner.

Tempo de inicialização do contêiner e montagens de volumes NFS

O uso de montagens de volume NFS pode aumentar um pouco o tempo de inicialização a frio do contêiner do Cloud Run, porque a montagem de volume é iniciada antes dos contêineres. O contêiner só será iniciado se o NFS for montado.

O NFS só monta um volume após estabelecer uma conexão com o servidor e buscar um identificador de arquivo. Se o Cloud Run não conseguir estabelecer uma conexão com o servidor, o pool de workers do Cloud Run não será iniciado.

Além disso, qualquer atraso na rede pode afetar o tempo de inicialização do contêiner, já que o Cloud Run tem um tempo limite total de 30 segundos para todas as montagens. Se o NFS levar mais de 30 segundos para ser montado, o pool de workers do Cloud Run não será iniciado.

Características de desempenho do NFS

Se você criar mais de um volume NFS, todos os volumes serão montados em paralelo.

Como o NFS é um sistema de arquivos de rede, ele está sujeito a limites de largura de banda e o acesso ao sistema de arquivos pode ser afetado pela largura de banda limitada.

Quando você grava no volume NFS, a gravação é armazenada no Cloud Run na memória até que os dados sejam apagados. Os dados são apagados nas seguintes circunstâncias:

  • O aplicativo limpa os dados do arquivo explicitamente usando sync(2), msync(2) ou fsync(3).
  • O aplicativo fecha um arquivo com close(2).
  • A pressão da memória força a recuperação de recursos de memória do sistema.

Para mais informações, consulte a documentação do Linux sobre NFS.

Limpar e remover volumes e montagens de volume

Você pode limpar todos os volumes e montagens ou remover volumes e montagens individuais.

Limpar todos os volumes e ativações de volumes

Para limpar todos os volumes e montagens de volume do seu pool de workers de contêiner único, execute o seguinte comando:

gcloud beta run worker-pools update WORKER_POOL \
    --clear-volumes
    --clear-volume-mounts

Se você tiver vários contêineres, siga as convenções da CLI sidecars para limpar volumes e ativações de volume:

gcloud beta run worker-pools update WORKER_POOL \
    --container=container1 \
    --clear-volumes
    -–clear-volume-mounts \
    --container=container2 \
    --clear-volumes \
    -–clear-volume-mounts

Remover volumes e montagens de volume individuais

Para remover um volume, também é preciso remover todas as montagens de volume que o usam.

Para remover volumes ou ativações de volume individuais, use as flags remove-volume e remove-volume-mount:

gcloud beta run worker-pools update WORKER_POOL \
    --remove-volume VOLUME_NAME \
    --container=container1 \
    --remove-volume-mount MOUNT_PATH \
    --container=container2 \
    --remove-volume-mount MOUNT_PATH