Volumes na memória (serviços)

Esta página descreve como configurar um volume dedicado na memória que pode ser usado para leituras e gravações de arquivos.

Esse recurso é diferente do sistema de arquivos na memória integrado fornecido pelo Cloud Run, que não limita a memória consumida pelas gravações de arquivos na memória. Usando volumes na memória, é possível limitar a quantidade de memória que pode ser consumida.

Comportamento

Depois de configurar um volume na memória para o serviço do Cloud Run, um volume vazio será criado para cada instância do Cloud Run iniciada e existirá enquanto essa instância estiver em execução. Quando a execução da instância é interrompida, os dados no volume são excluídos permanentemente.

Se você especificar um limite para um volume na memória e exceder esse limite ao gravar no volume, você receberá um erro de falta de memória, que pode ser tratado, e a instância continuará em execução. Se você não especificar um limite de tamanho de volume e exceder o limite de memória da instância ao gravar no volume, a instância falhará.

A propriedade do volume varia por ambiente de execução e tipo de implantação

Quando você monta um volume, a identidade que detém os arquivos e os diretórios varia de acordo com o ambiente de execução da carga de trabalho e se a implantação consiste em um ou vários contêineres.

No ambiente de execução de primeira geração em que você está implantando um único contêiner, o volume pertence à identidade usada para o contêiner. Em todos os outros casos, o volume pertence à raiz. Incluindo:

  • Ambiente de execução de primeira geração em que você está implantando vários contêineres
  • O ambiente de segunda geração

Casos de uso

​ Os casos de uso de um volume na memória incluem a alocação de espaço de rascunho ou o checkpoint de um cálculo longo para evitar falhas

Configurar um volume na memória

Qualquer mudança na configuração leva à criação de uma nova revisão. As próximas revisões também recebem automaticamente essa configuração, a menos que você faça atualizações explícitas para alterá-la.

Se você especificar um limite de tamanho de memória para o volume, a memória será alocada com base na memória usada por todos os contêineres individuais na instância que acessam esse volume. Se você especificar um tamanho de volume na memória maior que a soma total de toda a memória usada pelos contêineres na instância, o volume usará como padrão a soma total usada pelos contêineres.

Se você não especificar um limite de tamanho de memória para um volume, poderá exceder o limite de memória da instância e causar uma falha na instância.

Se você usar o volume na memória como um volume compartilhado em uma implantação de vários contêineres sem especificar um limite de tamanho na memória, metade da memória total disponível da instância será alocada para o volume compartilhado. Por exemplo, o tamanho do volume emptyDir = [Memória (Contêiner A) + Memória (Contêiner B) + Memória (Contêiner N)]/2.

Console

  1. Acesse o Cloud Run

  2. Clique no serviço que você quer configurar.

  3. Clique na guia YAML.

  4. Configure os atributos volumeMounts e volumes como mostrado:

    apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
      annotations:
        run.googleapis.com/launch-stage: BETA
        name: SERVICE
      spec:
        template:
          metadata:
          spec:
            containers:
            - image: IMAGE_URL
              volumeMounts:
              - mountPath: PATH
                name: VOLUME_NAME
            volumes:
            - name: VOLUME_NAME
              emptyDir:
                sizeLimit: SIZE_LIMIT
                medium: Memory

    substituir

    • SERVICE pelo nome do serviço do Cloud Run;
    • IMAGE_URL por uma referência à imagem de contêiner. Por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL tem o formato REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • PATH pelo caminho relativo para o volume, por exemplo, /cache.
    • VOLUME_NAME pelo nome que você quer usar para o volume na memória.
    • SIZE_LIMIT pelo limite de memória que você quer atribuir ao volume, em MiB ou GiB (especificado como Mi ou Gi), por exemplo, 500Mi. Esse limite precisa ser menor que a memória total especificada para os contêineres.
  5. Clique em Salvar e implantar nova revisão.

YAML

É possível fazer o download e conferir as configurações de serviço usando o comando gcloud run services describe --format export, que produz resultados limpos no formato YAML. Em seguida, modifique os campos descritos abaixo e faça upload do YAML modificado usando o comando gcloud run services replace. Modifique os campos somente conforme documentado.

  1. Para ver e fazer o download da configuração:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Configure os atributos volumeMounts e volumes como mostrado:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     annotations:
      run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - mountPath: PATH
              name: VOLUME_NAME
          volumes:
          - name: VOLUME_NAME
            emptyDir:
              sizeLimit: SIZE_LIMIT
              medium: Memory

    Substitua:

    • SERVICE pelo nome do serviço do Cloud Run;
    • IMAGE_URL por uma referência à imagem de contêiner. Por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL tem o formato REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • PATH pelo caminho relativo para o volume, por exemplo, /cache.
    • VOLUME_NAME pelo nome que você quer usar para o volume na memória.
    • SIZE_LIMIT pelo limite de memória que você quer atribuir ao volume, em MiB ou GiB (especificado como Mi ou Gi), por exemplo, 500Mi. Esse limite precisa ser menor que a memória total especificada para os contêineres.
  3. Substitua o serviço pela nova configuração usando o seguinte comando:

    gcloud run services replace service.yaml