如何使用heredoc在k8s pod yaml定义中创建yaml文件?
Posted
技术标签:
【中文标题】如何使用heredoc在k8s pod yaml定义中创建yaml文件?【英文标题】:How to use heredoc to create a yaml file in k8s pod yaml definition? 【发布时间】:2021-12-09 13:36:15 【问题描述】:我想在 k8s pod 启动后创建一个 yaml,在我之前的尝试中,我只是上传 yaml 文件并使用 wget 下载它。
apiVersion: v1
kind: Pod
metadata:
name: test
spec:
containers:
- name: p-test
image: p-test:latest
command:
- sh
- '-c'
- >-
wgethttps://ppt.cc/aId -O labels.yml
image: test/alpine-utils
为了更明确,我尝试使用heredoc将labels.yml
的内容嵌入到k8s pod manifest中,比如:
apiVersion: v1
kind: Pod
metadata:
name: test
spec:
containers:
- name: p-test
image: p-test:latest
command:
- "/bin/bash"
- '-c'
- >
cat << LABEL > labels.yml
key: value
LABEL
但是不行,请指教如何修改,谢谢。
【问题讨论】:
不起作用不是问题描述。请描述观察到的行为以及它与您想要实现的行为有何不同。 【参考方案1】:与其在 pod 定义中使用 heredoc
,不如在 the ConfigMap 中定义您的 yaml
文件并在您的 pod 定义中引用它(将其挂载为卷和 use subPath
)会更好、更方便 - 比如在本例中(我将p-test
图像更改为nginx
图像):
apiVersion: v1
kind: ConfigMap
metadata:
name: my-configmap
data:
labels.yaml: |-
key: value
---
apiVersion: v1
kind: Pod
metadata:
name: test
spec:
containers:
- name: p-test
image: nginx:latest
volumeMounts:
- name: my-configmap-volume
mountPath: /tmp/labels.yaml
subPath: labels.yaml
volumes:
- name: my-configmap-volume
configMap:
name: my-configmap
然后在 pod 上,您会在 /tmp/labels.yaml
中找到您的 labels.yaml
。
【讨论】:
你好@good5dog5。你成功了吗?以上是关于如何使用heredoc在k8s pod yaml定义中创建yaml文件?的主要内容,如果未能解决你的问题,请参考以下文章
k8s核心资源之Pod概念及入门使用讲解&&资源清单yaml文件内容讲解与编写
云原生之kubernetes实战k8s集群核心资源对象之Pod