【问题标题】:How to have multiple object types in a single openshift yaml template?如何在单个 openshift yaml 模板中拥有多种对象类型?
【发布时间】:2020-04-04 20:34:03
【问题描述】:

这是名称为:claim1 的单个 PersistentVolumeClaim 的示例模板

apiVersion: "v1"
kind: "PersistentVolumeClaim"
metadata:
  name: "claim1"
spec:
  accessModes:
    - "ReadWriteOnce"
  resources:
    requests:
      storage: "5Gi"
  volumeName: "pv0001"

如何在同一个模板文件中添加多个 PersistentVolumeClaim。 例如添加claim2

我尝试从其下方复制粘贴相同的模板并将claim1更改为claim2,但在导入模板时在openshift UI中它会发出警告:重复的映射键类型:PersistentVolumeClaim

更新: 我试过使用 cmets 中提到的---。但这会在导入 yaml 时在 openshift UI 中引发错误Expected a single document in the stream but found more

【问题讨论】:

  • 关于您的错误消息“预期流中有单个文档,但发现更多”,我怀疑 OpenShift UI 正在寻找 actual 模板。在 yaml 文件中使用 --- 可能会与 CLI 中的 oc create -f file.yml 一起正常工作
  • 是的,你是对的。我使用了您回答中提到的模板,效果很好。谢谢

标签: kubernetes yaml openshift


【解决方案1】:

我建议编写一个实际模板:https://docs.okd.io/latest/dev_guide/templates.html#writing-templates

具体来说,它看起来像:

apiVersion: v1
kind: Template
metadata:
  name: multiple-pvcs
objects:
- apiVersion: "v1"
  kind: "PersistentVolumeClaim"
  metadata:
    name: "claim1"
  spec:
    accessModes:
      - "ReadWriteOnce"
    resources:
      requests:
        storage: "5Gi"
    volumeName: "pv0001"
- apiVersion: "v1"
  kind: "PersistentVolumeClaim"
  metadata:
    name: "claim2"
  spec:
    accessModes:
      - "ReadWriteOnce"
    resources:
      requests:
        storage: "5Gi"
    volumeName: "pv0002"
parameters: []

然后你可以用oc process template.yml | oc create -f -创建对象

【讨论】:

    【解决方案2】:

    要分离对象,您需要添加的是---

    没错,就是这样:

    ---
    

    例如

    apiVersion: extensions/v1beta1
    kind: ReplicaSet
    metadata:
      name: replicaset-example-webapp-0-5
    spec:
      selector:
        matchLabels:
          mylabel: mywebapp
      replicas: 6
      template:
        metadata:
          labels:
            mylabel: mywebapp
        spec:
          containers:
            - name: pod-example-0-5
              image: richardchesterwood/k8s-fleetman-webapp-angular:release0-5
    ---
    apiVersion: extensions/v1beta1
    kind: ReplicaSet
    metadata:
      name: replicaset-example-webapp-0
    spec:
      selector:
        matchLabels:
          mylabel: mywebapp
      replicas: 2
      template:
        metadata:
          labels:
            mylabel: mywebapp
        spec:
          containers:
            - name: pod-example-0
              image: richardchesterwood/k8s-fleetman-webapp-angular:release0
    ---
    apiVersion: v1
    kind: Pod
    metadata:
      name: just-a-queue
      labels:
        mylabelname: myqueueapp
    spec:
      containers:
      - name: queue-app-container
        image: richardchesterwood/k8s-fleetman-queue:release1
    

    另外你可以在同一个 yaml 文件下有多个 Kubernetes 对象,你需要做的就是用 --- 分隔它

    但在 OpenShift 中是这样的

    实际上,如果创建一个项目数组,这会起作用:

    apiVersion: v1beta3                                                                              
    kind: List                                                                                       
    items:                                                                                           
      - #list of API objects
    

    【讨论】:

    • 它在导入时在 openshift UI 中引发错误:“预期流中有单个文档,但发现更多”
    • 感谢您的帮助。
    【解决方案3】:

    您可以通过添加新行来拆分 yaml 文档

    ----

    https://yaml.org/spec/1.2/spec.html#id2760395

    【讨论】:

    • 它在导入时在 openshift UI 中引发错误:“预期流中有单个文档,但发现更多”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多