Definir variáveis de ambiente

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

Quando define variáveis de ambiente, estas são injetadas no contentor e ficam acessíveis ao seu código. As variáveis de ambiente são definidas como pares de chave/valor. Por exemplo, suponhamos que está a executar um serviço que ativa o registo adicional quando lê LOGGING_VERBOSE: true no ambiente. Neste cenário, define o par de chave/valor da variável de ambiente como LOGGING_VERBOSE=true. Os comandos exatos ou a IU são apresentados nas secções seguintes.

Nomes reservados

As variáveis de ambiente definidas no contrato de tempo de execução do contentor estão reservadas e não podem ser definidas. Em particular, a variável de ambiente PORT é injetada no contentor pelo Knative Serving. Não deve defini-lo manualmente.

Definir variáveis de ambiente num serviço

Qualquer alteração de configuração leva à criação de uma nova revisão. As revisões subsequentes também vão receber automaticamente esta definição de configuração, a menos que faça atualizações explícitas para a alterar.

Pode definir variáveis de ambiente através da Google Cloud consola, da CLI Google Cloud ou de um ficheiro YAML quando implementa um novo serviço ou atualiza um serviço existente e implementa uma revisão:

Consola

  1. Aceda ao Knative serving na Google Cloud consola:

    Aceda ao Knative serving

  2. Clique em Criar serviço se estiver a configurar um novo serviço para o qual está a implementar. Se estiver a configurar um serviço existente, clique no serviço e, de seguida, em Editar e implementar nova revisão.

  3. Em Definições avançadas, clique em Variáveis e segredos.

  4. Faça o seguinte:

    • Se estiver a adicionar uma variável, clique em Adicionar variável e especifique o nome que quer para a variável e o respetivo valor nas caixas de texto Nome e Valor.
    • Se estiver a alterar um valor de uma variável, substitua o valor atual na caixa de texto Valor pelo valor pretendido.
    • Se estiver a remover uma ou mais variáveis de ambiente, passe o cursor do rato à esquerda da caixa de texto Valor da variável que está a remover para apresentar o ícone do lixo e clique nele.

  5. Clique em Seguinte para continuar para a secção seguinte.

  6. Na secção Configure como este serviço é acionado, selecione a conetividade que quer usar para invocar o serviço.

  7. Clique em Criar para implementar a imagem no Knative Serving e aguarde que a implementação termine.

Linha de comandos

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

  • Para serviços existentes, 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

    Substituição:

    • SERVICE com o nome do seu 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 comandos

      • Para especificar uma variável de ambiente que contenha uma vírgula (,), tem de escapar cada CHAVE=VALOR com um delimitador diferente. Por exemplo, se usar @:
        --set-env-vars "^@^KEY1=value,with,commas@KEY2=anothervalue@KEY3..."
      • Para especificar vários conjuntos de pares de chave-valor, pode especificar vários parâmetros para facilitar a leitura. 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

    Substituição:

    • IMAGE_URL com uma referência à imagem do contentor, por exemplo, gcr.io/cloudrun/hello.
    • SERVICE com o nome do seu 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 comandos

      • Para especificar uma variável de ambiente que contenha uma vírgula (,), tem de escapar cada CHAVE=VALOR com um delimitador diferente. Por exemplo, se usar @:
        --set-env-vars "^@^KEY1=value,with,commas@KEY2=anothervalue@KEY3..."
      • Para especificar vários conjuntos de pares de chave-valor, pode especificar vários parâmetros para facilitar a leitura. Exemplo:
        [...]
        --set-env-vars "KEY=VALUE1" \
        --set-env-vars "KEY=VALUE2" \
        --set-env-vars "KEY=VALUE3"

YAML

Pode transferir a configuração de um serviço existente para um ficheiro YAML com o comando gcloud run services describe usando a flag --format=export. Em seguida, pode modificar esse ficheiro YAML e implementar essas alterações com o comando gcloud run services replace. Tem de garantir que modifica apenas os atributos especificados.

  1. Transfira a configuração do seu serviço para um ficheiro denominado 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 de fornecimento do Knative.

  2. No ficheiro 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 com o nome do seu serviço Knative serving
    • KEY-1, VALUE-1 com a variável de ambiente e o valor. Opcionalmente, adicione mais variáveis e valores conforme pretendido.
  3. Substitua o serviço pela respetiva nova configuração através do seguinte comando:

    gcloud run services replace service.yaml

Definir variáveis de ambiente predefinidas no contentor

Pode usar a declaração ENV no Dockerfile para definir valores predefinidos para variáveis de ambiente:

ENV KEY1=VALUE1,KEY2=VALUE2

Ordem de precedência: variáveis do contentor vs. variáveis de serviço

Se definir uma variável de ambiente predefinida no contentor e também definir uma variável de ambiente com o mesmo nome no serviço de implementação do Knative, o valor definido no serviço tem precedência.

Para usar os links de serviços do Kubernetes, tem de ativar manualmente o suporte. Devido aos problemas de desempenho observados em espaços de nomes com milhares de serviços e revisões, os links de serviços do Kubernetes foram desativados por predefinição a partir de janeiro de 2021.

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

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