For example, a deployment yaml file:
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: guestbook spec: replicas: 2 template: metadata: labels: app: guestbook spec: container: - name: guestbook image: {{Here want to read value from config file outside}}
There is a ConfigMap
feature with Kubernetes, but that's also write the key/value to the yaml file. Is there a way to set the key to environment variables?
As mentioned above, using the YAML field allows you to declaratively manage your Kubernetes applications. These YAML files can be stored in a common directory and may all be applied using kubectl apply -f <directory>. This is fairly simple.
You can edit pod yaml on the fly using kubectl edit pods <pod-name> . You have to keep in mind that there are fields which will not be allowed to be edited while pod is scheduled, this is mentioned in your error message. I think you should first remove the pod and apply the new yaml file.
A PodSpec defines the containers, environment variables for the container and other properties such as the scheduler name, security context etc.
You can also use envsubst
when deploying.
e.g.
cat $app/deployment.yaml | envsubst | kubectl apply ...
It will replace all variables in the file with their values. We are successfully using this approach on our CI when deploying to multiple environments, also to inject the CI_TAG etc into the deployments.
You can't do it automatically, you need to use an external script to "compile" your template, or use helm as suggested by @Jakub.
You may want to use a custom bash script, maybe integrated with your CI pipeline.
Given a template yml file called deploy.yml.template
very similar to the one you provided, you can use something like this:
#!/bin/bash # sample value for your variables MYVARVALUE="nginx:latest" # read the yml template from a file and substitute the string # {{MYVARNAME}} with the value of the MYVARVALUE variable template=`cat "deploy.yml.template" | sed "s/{{MYVARNAME}}/$MYVARVALUE/g"` # apply the yml with the substituted value echo "$template" | kubectl apply -f -
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With