如何在kubernetes yaml文件中读取环境变量? 例如,我想更改docker图像标记,但不想重写文件,如此
apiVersion: v1
kind: ReplicationController
...
spec:
containers:
- name: myapp
image: myapp:${VERSION}
...
有了这个,我可以在不更新yaml文件的情况下kubectl rolling-update
。
感谢
答案 0 :(得分:2)
Helm应解决您的配置问题 - link to full list
答案 1 :(得分:2)
如果您想要一个简单,轻巧的方法,则可以尝试使用envsubst。因此,假设您的示例位于bash shell中名为example.yaml
的文件中,则将执行:
export VERSION=69
envsubst < example.yaml | kubectl apply -f -
Kustomize的最新版本也可以做到这一点。
答案 2 :(得分:1)
我强烈推荐使用HELM。 https://github.com/kubernetes/helm
您可以使用上述链接中包含的信息安装HELM。这将使helm
命令可用。
通过运行helm create YOUR_APP_NAME
,它将创建如下的目录结构。
YOUR_APP_NAME/
Chart.yaml # A YAML file containing information about the chart
LICENSE # OPTIONAL: A plain text file containing the license for the chart
README.md # OPTIONAL: A human-readable README file
values.yaml # The default configuration values for this chart
charts/ # OPTIONAL: A directory containing any charts upon which this chart depends.
templates/ # OPTIONAL: A directory of templates that, when combined with values,
# will generate valid Kubernetes manifest files.
templates/NOTES.txt # OPTIONAL: A plain text file containing short usage notes
在values.yaml
文件中,您可以设置一些ENV变量,如:
container:
name: "nginx"
version: "latest"
在ReplicationController
文件中,您可以使用以下方式引用变量:
apiVersion: v1
kind: ReplicationController
...
spec:
containers:
- name: myapp
image: {{.Values.container.name}}:{{.Values.container.version}}
...
复制控制器的YAML文件应放在templates目录中。
然后,您可以运行命令helm package YOUR_PACKAGE_NAME
。要在K8S群集上安装软件包,您可以运行helm install PACKAGE_NAME
注意:我建议您切换到使用Deployments
而不是ReplicationController
。请参阅:https://kubernetes.io/docs/user-guide/deployments/
答案 3 :(得分:0)
你应该使用Deployment
和kubectl set image
this一样使用{{3}}:
kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
答案 4 :(得分:-2)
也许你的意思是这个?
- name: PUBLIC_URL
value: "http://gitserver.$(POD_NAMESPACE):$(SERVICE_PORT)"
这是docs指定的内容......但它不再适用于我。