How to Inject Environment Variables into Kubernetes Pods Before Deployment
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
Kubernetes is a powerful platform for managing containerized applications, allowing developers to rapidly deploy and manage these applications at scale. One of the challenges with managing applications in Kubernetes is handling configuration, such as environment variables, secrets, and configuration files. This article explores how to inject environment variables into Kubernetes pods before deployment.
Overview
Environment variables are an essential part of configuring applications in Kubernetes. They allow you to set dynamic values that your application code can access at runtime. In Kubernetes, there are multiple ways to inject these variables into your pods:
- Using the `env` field in PodSpec: Directly specifying environment variables in your Kubernetes PodSpec.
- Using ConfigMaps: Externalizing environment variables to ConfigMaps for better management and scalability.
- Using Secrets: Managing sensitive data such as passwords and tokens.
- Using Downward API: Accessing information about the pod or container.
1. Using the `env` field in PodSpec
You can directly define environment variables in the pod specification. Here is a detailed example:
- name: myapp-container
- name: DATABASE_HOST
- name: DATABASE_PORT
- `env`: The field where the list of environment variables is defined.
- `name`: The name of the environment variable.
- `value`: The value assigned to the environment variable.
- name: myapp-container
- configMapRef:
- `ConfigMap`: A Kubernetes resource used to hold non-confidential data in key-value pairs.
- `envFrom`: Allows you to load all variables from the specified ConfigMap.
- name: myapp-container
- secretRef:
- `Secret`: A resource similar to ConfigMaps but intended for storing sensitive data securely.
- `Base64 encoding`: Kubernetes Secrets require values to be provided as Base64 encoded strings.
- name: myapp-container
- name: POD_NAME
- `valueFrom`: Allows sourcing of environment variables from other fields.
- `fieldRef`: Provides access to particular fields in the Pod's configuration.
- Secrets Management: Ensure that secrets are only accessible to the pods that need them. Use tools like `Sealed Secrets` to facilitate secret management.
- Version Control: Consider version controlling your ConfigMaps and Secrets by keeping application configuration in sync with your deployment environment.
- RBAC Policies: Use Role-Based Access Control to restrict access to ConfigMaps and Secrets.
- Helm: Use Helm charts to manage environment variable configurations across different environments easily.
- Kustomize: This tool can be used to customize Kubernetes configurations, including the management of environment variables.
Related reading
- How to inject kubernetes secret into configuration file
- How to install a specific Chart version
- How to install Hive Metastore in Kubernetes?
- How to install Kubernetes cluster behind proxy with Kubeadm?
- How to install docker on Amazon Linux2
- How to install git on a docker ubuntu image?
- How to install specific version of Kubernetes?
- How to integrate Kubernetes with Gitlab

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.