Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2024-11-28 GMT+08:00

Configuração de uma variável de ambiente

Cenário

Uma variável de ambiente é uma variável cujo valor pode afetar a maneira como um contêiner em execução se comportará. Você pode modificar variáveis de ambiente mesmo depois que as cargas de trabalho são implantadas, aumentando a flexibilidade na configuração da carga de trabalho.

A função de definir variáveis de ambiente no CCE é a mesma de especificar ENV em um Dockerfile.

Depois que um contêiner é iniciado, não modifique as configurações no contêiner. Se as configurações no contêiner forem modificadas (por exemplo, senhas, certificados e variáveis de ambiente de uma aplicação em contêiner são adicionados ao contêiner), as configurações serão perdidas depois que o contêiner for reiniciado e os serviços do contêiner se tornarão anormais. Um exemplo de cenário de reinicialização do contêiner é o reagendamento do pod devido a anomalias do nó.

As configurações devem ser importadas para um contêiner como argumentos. Caso contrário, as configurações serão perdidas após a reinicialização do contêiner.

As variáveis de ambiente podem ser definidas nos seguintes modos:

  • Custom: insira o nome da variável de ambiente e o valor do parâmetro.
  • Added from ConfigMap key: importe todas as chaves em um ConfigMap como variáveis de ambiente.
  • Added from ConfigMap: importe uma chave em um ConfigMap como o valor de uma variável de ambiente. Como mostrado em Figura 1, se você importar configmap_value de configmap_key em um ConfigMap como o valor da variável de ambiente key1, uma variável de ambiente chamada key1 cujo valor é configmap_value existe no contêiner.
  • Added from secret: importe todas as chaves em um segredo como variáveis de ambiente.
  • Added from secret key: importe o valor de uma chave em um segredo como o valor de uma variável de ambiente. Como mostrado em Figura 1, se você importar secret_value de secret_key em segredo secret-example como o valor da variável de ambiente key2, uma variável de ambiente chamada key2 cujo valor é secret_value existe no contêiner.
  • Variable value/reference: use o campo definido por um pod como o valor da variável de ambiente. Conforme mostrado em Figura 1, se o nome do pod for importado como o valor da variável de ambiente key3, uma variável de ambiente chamada key3 existirá no contêiner e seu valor será o nome do pod.
  • Resource Reference: o valor de Request ou Limit definido pelo contêiner é usado como o valor da variável de ambiente. Conforme mostrado em Figura 1, se você importar o limite de CPU do contêiner-1 como o valor da variável de ambiente key4, uma variável de ambiente chamada key4 existirá no contêiner e seu valor será o limite de CPU do contêiner-1.

Adicionar variáveis de ambiente

  1. Efetue logon no console do CCE.
  2. Clique no nome do cluster para acessar o console do cluster, escolha Workloads no painel de navegação e clique em Create Workload no canto superior direito.
  3. Ao criar uma carga de trabalho, modifique as informações do contêiner em Container Configuration e clique na guia Environment Variables.
  4. Configure variáveis de ambiente.

    Figura 1 Configurar variáveis de ambiente

Exemplo de YAML

apiVersion: apps/v1
kind: Deployment
metadata:
  name: env-example
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: env-example
  template:
    metadata:
      labels:
        app: env-example
    spec:
      containers:
        - name: container-1
          image: nginx:alpine
          imagePullPolicy: Always
          resources:
            requests:
              cpu: 250m
              memory: 512Mi
            limits:
              cpu: 250m
              memory: 512Mi
          env:
            - name: key                     # Custom
              value: value
            - name: key1                    # Added from ConfigMap key
              valueFrom:
                configMapKeyRef:
                  name: configmap-example
                  key: key1
            - name: key2                    # Added from secret key
              valueFrom:
                secretKeyRef:
                  name: secret-example
                  key: key2
            - name: key3                    # Variable reference, which uses the field defined by a pod as the value of the environment variable.
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.name
            - name: key4                    # Resource reference, which uses the field defined by a container as the value of the environment variable.
              valueFrom:
                resourceFieldRef:
                  containerName: container1
                  resource: limits.cpu
                  divisor: 1
          envFrom:
            - configMapRef:                 # Added from ConfigMap
                name: configmap-example
            - secretRef:                    # Added from secret
                name: secret-example
      imagePullSecrets:
        - name: default-secret

Exibii variáveis de ambiente

Se os conteúdos de configmap-example e secret-example são os seguintes:

$ kubectl get configmap configmap-example -oyaml
apiVersion: v1
data:
  configmap_key: configmap_value
kind: ConfigMap
...

$ kubectl get secret secret-example -oyaml
apiVersion: v1
data:
  secret_key: c2VjcmV0X3ZhbHVl              # c2VjcmV0X3ZhbHVl is the value of secret_value in Base64 mode.
kind: Secret
...

As variáveis de ambiente no pod são as seguintes:

$ kubectl get pod
NAME                           READY   STATUS    RESTARTS   AGE
env-example-695b759569-lx9jp   1/1     Running   0          17m

$ kubectl exec env-example-695b759569-lx9jp  -- printenv
/ # env
key=value                             # Custom environment variable
ey1=configmap_value                  # Added from ConfigMap key
key2=secret_value                     # Added from secret key
key3=env-example-695b759569-lx9jp     # metadata.name defined by the pod
key4=1                                # limits.cpu defined by container1. The value is rounded up, in unit of cores.
configmap_key=configmap_value         # Added from ConfigMap. The key value in the original ConfigMap key is directly imported.
secret_key=secret_value               # Added from key. The key value in the original secret is directly imported.