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
- Efetue logon no console do CCE.
- 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.
- Ao criar uma carga de trabalho, modifique as informações do contêiner em Container Configuration e clique na guia Environment Variables.
- Configure 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.