2 min read | by Jordi Prats
When configuring command line arguments for containers we might need to be able to use certain values that might be elsewhere like the name of the current namespace.
We can use environment variables as the source of the information without having to write a wrappet to actually populate them
To do so we'll have to use the $() syntax, pleace notice how it's using parentheses instead of curly braces that you might be more familar. Then we just need to define the environment variable with whatever value we need. In this example we are using valueFrom to get the object's namespace:
kind: Deployment
apiVersion: apps/v1
metadata:
name: test-env
labels:
app: test-env
spec:
selector:
matchLabels:
app: test-env
replicas: 1
strategy:
type: RollingUpdate
template:
metadata:
labels:
app: test-env
spec:
containers:
- name: test-env
image: alpine:latest
imagePullPolicy: Always
command: ["echo"]
args:
- namespace=$(CURRENT_NAMESPACE)
env:
- name: CURRENT_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
Once we apply it we will be able to see how the value have been populated:
$ kubectl apply -f test_env.yaml
deployment.apps/test-env created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
test-env-9499cdd8c-7jwsd 0/1 ContainerCreating 0 5s
$ kubectl logs test-env-9499cdd8c-7jwsd
namespace=test-pet2cattle
We can use this not only on a Deployment as we did on the example, but on any Pod template we need.
Posted on 26/08/2022