如何使用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文件内容讲解与编写

创建 k8s pod 时如何添加用户名

云原生之kubernetes实战k8s集群核心资源对象之Pod

K8S 创建pod yaml文件详解

为啥我应该在 K8s pod 定义 YAML 中的“值”前面有一个破折号?

k8s yaml格式的Pod配置文件