Configure montagens de volumes NFS para pools de trabalhadores

Esta página mostra como montar uma partilha de ficheiros NFS como um volume no Cloud Run. Pode usar qualquer servidor NFS, incluindo o seu próprio servidor NFS alojado no local ou numa VM do Compute Engine. Se ainda não tiver um servidor NFS, recomendamos o Filestore, que é uma oferta NFS totalmente gerida da Google Cloud.

A montagem da partilha de ficheiros NFS como um volume no Cloud Run apresenta a partilha de ficheiros como ficheiros no sistema de ficheiros do contentor. Depois de montar a partilha de ficheiros como um volume, acede à mesma como se fosse um diretório no seu sistema de ficheiros local, através das operações e bibliotecas do sistema de ficheiros da sua linguagem de programação.

Caminhos não permitidos

O Cloud Run não permite montar um volume em /dev, /proc ou /sys, nem nos respetivos subdiretórios.

Limitações

  • O Cloud Run não suporta o 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, certifique-se de que tem o seguinte:

  • Uma rede VPC onde o servidor NFS ou a instância do Filestore está em execução.
  • Um servidor NFS em execução numa rede VPC, com o seu conjunto de trabalhadores do Cloud Run ligado a essa rede VPC. Se ainda não tiver um servidor NFS, crie um criando uma instância do Filestore.
  • O conjunto de trabalhadores do Cloud Run está associado à rede VPC onde o servidor NFS está em execução. Para o melhor desempenho, use a VPC direta em vez dos conectores de VPC.
  • Se estiver a usar um projeto existente, certifique-se de que a configuração da firewall da VPC permite que o Cloud Run alcance o seu servidor NFS. (Se estiver a começar com um novo projeto, esta opção está selecionada por predefinição.) Se estiver a usar o Filestore como servidor NFS, siga a documentação do Filestore para criar uma regra de saída da firewall para permitir que o Cloud Run alcance o Filestore.
  • Defina as autorizações na partilha de ficheiros NFS remota para permitir o acesso ao utilizador do contentor. Por predefinição, o Filestore fornece acesso de leitura a todos os utilizadores, mas restringe o acesso de escrita ao utilizador root (uid 0). Se o seu contentor exigir acesso de escrita e não for executado como utilizador root, tem de usar um cliente ligado (executado como root) para modificar as autorizações de partilha. Por exemplo, pode usar o comando chown para alterar a propriedade dos ficheiros ou diretórios para o ID do utilizador específico no qual o contentor é executado.

Funções necessárias

Para ver uma lista de funções e autorizações de IAM associadas ao Cloud Run, consulte os artigos Funções de IAM do Cloud Run e Autorizações de IAM do Cloud Run. Se o seu conjunto de trabalhadores do Cloud Run interage com Google Cloud APIs, como as bibliotecas de clientes da nuvem, consulte o guia de configuração da identidade do serviço. Para mais informações sobre a atribuição de funções, consulte as autorizações de implementação e faça a gestão do acesso.

Monte um volume NFS

Pode montar vários servidores NFS, instâncias do Filestore ou outros tipos de volumes em diferentes caminhos de montagem.

Se estiver a usar vários contentores, especifique primeiro os volumes e, em seguida, especifique as montagens de volumes para cada contentor.

Configure uma montagem de volume NFS através da Google Cloud consola, da Google Cloud CLI, YAML ou Terraform.

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Selecione Grupos de trabalhadores no menu e clique em Implementar contentor para configurar um novo grupo de trabalhadores. Se estiver a configurar um conjunto de trabalhadores existente, clique no conjunto de trabalhadores e, de seguida, em Editar e implementar nova revisão.

  3. Se estiver a configurar um novo conjunto de trabalhadores, preencha a página inicial do conjunto de trabalhadores e, em seguida, clique em Recipientes, volumes, rede, segurança para expandir a página de configuração dos conjuntos de trabalhadores.

  4. Clique no separador Volumes.

    imagem

    • Em Volumes, clique em Adicionar volume.
      • No menu pendente Tipo de volume, selecione NFS.
      • No campo Nome do volume, introduza o nome que quer usar para o volume.
      • No campo Servidor NFS, introduza o nome de domínio ou a localização (no formato IP_ADDRESS) da partilha de ficheiros NFS.
      • No campo Caminho, introduza o caminho para o diretório do servidor NFS que quer montar.
      • Clique em Concluído.
    • Clique no separador Contentor, localize o contentor que quer montar e expanda os detalhes do contentor.
    • Clique no separador Montagens de volumes.
    • Clique em Montar volume.
      • Selecione o volume NFS no menu.
      • Especifique o caminho onde quer montar o volume.
      • Clique em Volume de montagem.
      • Clique em Concluído.
  5. Clique em Criar ou Implementar.

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 o seguinte:

    • WORKER_POOL: o nome do seu conjunto de trabalhadores.
    • VOLUME_NAME: o nome que quer dar ao volume.
    • IP_ADDRESS: a localização da partilha de ficheiros NFS.
    • NFS_PATH: o caminho para a partilha de ficheiros NFS que começa com uma barra invertida, por exemplo, /example-directory.
    • MOUNT_PATH: o caminho relativo onde está a montar o volume, por exemplo, /mnt/my-volume.
  • Para montar o volume como um volume só de leitura:

    --add-volume name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH,readonly=true
  • Se estiver a usar vários contentores, especifique primeiro os volumes e, em seguida, especifique as montagens de volumes para cada contentor:

    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

YAML

  1. Se estiver a criar um novo conjunto de trabalhadores, ignore este passo. Se estiver a atualizar um worker pool existente, transfira a respetiva configuração YAML:

    gcloud beta run worker-pools describe WORKER_POOL --format export > workerpool.yaml
  2. O exemplo seguinte contém a configuração YAML:

    apiVersion: run.googleapis.com/v1
    kind: WorkerPool
    metadata:
      name: WORKER_POOL
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      template:
        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

    Substitua o seguinte:

    • WORKER_POOL: o nome do seu conjunto de trabalhadores do Cloud Run.
    • CONTAINER_NAME: o nome do contentor.
    • IMAGE_URL: uma referência à imagem do contentor que contém o conjunto de trabalhadores, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest
    • VOLUME_NAME: qualquer nome que pretender para o seu volume. O valor VOLUME_NAME é usado para mapear o volume para a montagem do volume.
    • MOUNT_PATH: o caminho relativo onde está a montar o volume, por exemplo, /mnt/my-volume.
    • IP_ADDRESS: a morada da partilha de ficheiros NFS.
    • NFS_PATH: o caminho para a partilha de ficheiros NFS que começa com uma barra invertida, por exemplo, /example-directory.
    • IS_READ_ONLY: True para tornar o volume só de leitura ou False para permitir gravações.
  3. Crie ou atualize o conjunto de trabalhadores com o seguinte comando:

    gcloud beta run worker-pools replace workerpool.yaml

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte os 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 o seguinte:

  • WORKER_POOL: o nome do conjunto de trabalhadores.
  • REGION: a Google Cloud região, por exemplo, europe-west1.
  • IMAGE_URL: uma referência à imagem do contentor que contém o conjunto de trabalhadores, 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 o volume de montagem.
  • MOUNT_PATH: o caminho relativo onde está a montar o volume, por exemplo, /mnt/my-volume.
  • NFS_PATH: o caminho para a partilha de ficheiros NFS.
  • IS_READ_ONLY: True para tornar o volume só de leitura ou False para permitir gravações.

Veja a configuração das variáveis de ambiente para o conjunto de trabalhadores

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Clique em Conjuntos de trabalhadores para apresentar a lista de conjuntos de trabalhadores implementados.

  3. Clique no conjunto de trabalhadores que quer examinar para apresentar o respetivo painel de detalhes.

  4. Clique no separador Contentores para apresentar a configuração do contentor do conjunto de trabalhadores.

Resolução de problemas de NFS

Se tiver problemas, verifique o seguinte:

  • O conjunto de trabalhadores do Cloud Run está ligado à rede VPC em que o servidor NFS se encontra.
  • Não existem regras de firewall que impeçam o Cloud Run de alcançar o servidor NFS.
  • Se o seu contentor precisar de escrever dados, certifique-se de que as autorizações de partilha do NFS estão configuradas para permitir escritas do utilizador do contentor.

Tempo de arranque do contentor e montagens de volume NFS

A utilização de montagens de volumes NFS pode aumentar ligeiramente o tempo de arranque a frio do contentor do Cloud Run, porque a montagem de volumes é iniciada antes do início dos contentores. O contentor só é iniciado se o NFS for montado com êxito.

Tenha em atenção que o NFS monta com êxito um volume apenas depois de estabelecer uma ligação ao servidor e obter um identificador de ficheiro. Se o Cloud Run não conseguir estabelecer uma ligação ao servidor, o grupo de trabalhadores do Cloud Run não é iniciado.

Além disso, quaisquer atrasos na rede podem ter um impacto no tempo de arranque do contentor, uma vez que o Cloud Run tem um limite de tempo total de 30 segundos para todas as montagens. Se a montagem do NFS demorar mais de 30 segundos, o grupo de trabalhadores do Cloud Run não é iniciado.

Caraterísticas de desempenho do NFS

Se criar mais do que um volume NFS, todos os volumes são montados em paralelo.

Uma vez que o NFS é um sistema de ficheiros de rede, está sujeito a limites de largura de banda e o acesso ao sistema de ficheiros pode ser afetado pela largura de banda limitada.

Quando escreve no seu volume NFS, a escrita é armazenada na memória do Cloud Run até que os dados sejam descarregados. Os dados são descarregados nas seguintes circunstâncias:

  • A sua aplicação esvazia os dados dos ficheiros explicitamente através de sync(2), msync(2) ou fsync(3).
  • A sua aplicação fecha um ficheiro 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 o NFS.

Limpe e remova volumes e montagens de volumes

Pode limpar todos os volumes e montagens ou remover volumes individuais e montagens de volumes.

Limpe todos os volumes e montagens de volumes

Para limpar todos os volumes e montagens de volumes do seu worker pool de contentor único, execute o seguinte comando:

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

Se tiver vários contentores, siga as convenções da CLI sidecars para limpar volumes e montagens de volumes:

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

Remova volumes individuais e montagens de volumes

Para remover um volume, também tem de remover todas as montagens de volumes que usam esse volume.

Para remover volumes individuais ou montagens de volumes, use os 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