Definir variáveis de ambiente

Saiba como criar e usar variáveis de ambiente no Knative serving.

Quando você define variáveis de ambiente, elas são injetadas no contêiner e podem ser acessadas pelo código. As variáveis de ambiente são definidas como pares de chave-valor. Por exemplo, digamos que você esteja executando um serviço que ativa a geração de registros adicionais ao ler LOGGING_VERBOSE: true no ambiente. Nesse cenário, você define o par de chave-valor da variável de ambiente como LOGGING_VERBOSE=true. Os comandos ou IUs exatos serão mostrados nas seções a seguir.

Nomes reservados

As variáveis de ambiente definidas no contrato de ambiente de execução do contêiner são reservadas e não podem ser configuradas. Mais especificamente, a variável de ambiente PORT é injetada no contêiner pelo serviço Knative. Não configure isso.

Como configurar variáveis de ambiente em um serviço

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.

É possível definir variáveis de ambiente usando usando o console do Google Cloud, a Google Cloud CLI ou um arquivo YAML ao implantar um novo serviço ou atualizar um serviço atual e implantar uma revisão:

Console

  1. Acesse o Knative serving no console do Google Cloud:

    Acessar o Knative serving

  2. Clique em Criar serviço se estiver configurando um novo serviço em que fará uma implantação. Se você estiver configurando um serviço atual, clique nele e em Editar e implantar uma nova revisão.

  3. Em Configurações avançadas, clique em Variáveis e secrets.

  4. Faça o seguinte:

    • Se você estiver adicionando uma variável, clique em Adicionar variável. Especifique o nome escolhido para ela e o respectivo o valor nas caixas de texto Nome e Valor.
    • Se você estiver alterando um valor para uma variável, substitua o valor atual na caixa de texto Valor pelo valor escolhido.
    • Se você estiver removendo uma ou mais variáveis de ambiente, passe o cursor à esquerda da caixa de texto Valor da variável que você está removendo para exibir o ícone de lixeira e clique nele.

  5. Clique em Avançar para acessar a próxima seção.

  6. Na seção Configurar como este serviço é acionado, selecione qual conectividade você quer usar para invocar o serviço.

  7. Clique em Criar para implantar a imagem no Knative serving e aguarde até que a implantação seja concluída.

Linha de comando

Use a Google Cloud CLI para definir variáveis de ambiente para novos serviços ou para atualizar serviços existentes:

  • Para serviços atuais, atualize as variáveis de ambiente executando o comando gcloud run services update com um dos seguintes parâmetros:

    Exemplo:

    gcloud run services update SERVICE --update-env-vars KEY1=VALUE1,KEY2=VALUE2
    

    Substitua:

    • SERVICE pelo nome do serviço;
    • KEY1=VALUE1,KEY2=VALUE2 com uma lista separada por vírgulas de pares de nome e valor para cada variável de ambiente. Especifique o nome da variável de ambiente para cada KEY e o valor dessa variável de ambiente para VALUE. Como especificar vários parâmetros:
    • Opções de parâmetros de comando

      • Para especificar uma variável de ambiente que contenha uma vírgula (,), você precisa fazer escape de cada KEY=VALUE com um delimitador diferente. Por exemplo, se você usar @:
        --set-env-vars "^@^KEY1=value,with,commas@KEY2=anothervalue@KEY3..."
        
      • Para especificar vários conjuntos de pares de chave-valor, é possível especificar vários parâmetros de legibilidade. Exemplo:
        [...]
        --set-env-vars "KEY=VALUE1" \
        --set-env-vars "KEY=VALUE2" \
        --set-env-vars "KEY=VALUE3"
        
  • Para novos serviços, defina variáveis de ambiente executando o comando gcloud run deploy com o parâmetro --set-env-vars:

    gcloud run deploy SERVICE --image=IMAGE_URL --set-env-vars KEY1=VALUE1,KEY2=VALUE2
    

    Substitua:

    • IMAGE_URL por uma referência à imagem de contêiner. Por exemplo, gcr.io/cloudrun/hello;
    • SERVICE pelo nome do serviço;
    • KEY1=VALUE1,KEY2=VALUE2 com uma lista separada por vírgulas de pares de nome e valor para cada variável de ambiente. Especifique o nome da variável de ambiente para cada KEY e o valor dessa variável de ambiente para VALUE. Como especificar vários parâmetros:
    • Opções de parâmetros de comando

      • Para especificar uma variável de ambiente que contenha uma vírgula (,), você precisa fazer escape de cada KEY=VALUE com um delimitador diferente. Por exemplo, se você usar @:
        --set-env-vars "^@^KEY1=value,with,commas@KEY2=anothervalue@KEY3..."
        
      • Para especificar vários conjuntos de pares de chave-valor, é possível especificar vários parâmetros de legibilidade. Exemplo:
        [...]
        --set-env-vars "KEY=VALUE1" \
        --set-env-vars "KEY=VALUE2" \
        --set-env-vars "KEY=VALUE3"
        

YAML

Faça o download da configuração de um serviço existente para um arquivo YAML com o comando gcloud run services describe usando a sinalização --format=export. Em seguida, modifique o arquivo YAML e implante essas alterações com o comando gcloud run services replace. Modifique apenas os atributos especificados.

  1. Faça o download da configuração do serviço em um arquivo chamado service.yaml no espaço de trabalho local:

    gcloud run services describe SERVICE --format export > service.yaml

    Substitua SERVICE pelo nome do seu serviço Knative serving.

  2. Em seu arquivo local, atualize os atributos name e value no atributo env em containers::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - env:
            - name: KEY-1
              value: VALUE-1
            - name: KEY-N
              value: VALUE-N

    Substituir

    • SERVICE pelo nome do serviço do Knative serving
    • KEY-1, VALUE-1 pela variável de ambiente e valor. Se quiser, adicione variáveis e valores.
  3. Substitua o serviço pela nova configuração usando o seguinte comando:

    gcloud run services replace service.yaml

Como definir variáveis de ambiente padrão no contêiner

Use a instrução ENV em um Dockerfile para definir valores padrão para variáveis de ambiente:

ENV KEY1=VALUE1,KEY2=VALUE2

Ordem de precedência: variáveis de contêiner x serviço

Se você definir uma variável de ambiente padrão no contêiner e também definir uma variável de ambiente com o mesmo nome no serviço Knative serving, o valor definido no serviço terá precedência.

Para usar links de serviço do Kubernetes, ative o suporte manualmente. Devido aos problemas de desempenho vistos em namespaces com milhares de serviços e revisões, os links de serviço do Kubernetes foram desativados por padrão a partir de janeiro de 2021.

Para ativar os links de serviço do Kubernetes, execute o seguinte comando para definir data.enable-service-links como true no ConfigMap knative-serving/config-defaults:

kubectl patch cm -n knative-serving config-defaults -p '{"data":{"enable-service-links":"true"}}