【问题标题】:Allow multiple K8s resources in a JSON在一个 JSON 中允许多个 K8s 资源
【发布时间】:2020-12-25 13:37:49
【问题描述】:

我有一个 YAML 文件,其中包含多个资源部署和服务。

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: petclinic
  name: petclinic
spec:
  replicas: 1
  selector:
    matchLabels:
      app: petclinic
  strategy: {}
  template:
    metadata:
      labels:
        app: petclinic
    spec:
      containers:
        - image: arey/springboot-petclinic
          name: springboot-petclinic
          resources: {}
          ports:
            - containerPort: 8080
status: {}
---
apiVersion: v1
kind: Service
metadata:
  name: petclinic
spec:
  type: LoadBalancer
  selector:
    app: petclinic
  ports:
    - port: 8080
      targetPort: 8080
      protocol: TCP
      name: http

我正在 JSON 中创建一个类似的文件。我能够使用 JSON 创建部署资源并成功部署,但是当我尝试包含服务资源时,它失败了。任何关于我哪里出错的帮助将不胜感激。下面是 JSON 的 sn-p。

{
   "apiVersion": "apps/v1",
   "kind": "Deployment",
   "metadata": {
      "creationTimestamp": null,
      "labels": {
         "app": "petclinic"
      },
      "name": "petclinic"
   },
   "spec": {
      "replicas": 2,
      "selector": {
         "matchLabels": {
            "app": "petclinic"
         }
      },
      "strategy": {},
      "template": {
         "metadata": {
            "labels": {
               "app": "petclinic"
            }
         },
         "spec": {
            "containers": [
               {
                  "image": "arey/springboot-petclinic",
                  "name": "springboot-petclinic",
                  "resources": {},
                  "ports": [
                     {
                        "containerPort": 8080
                     }
                  ]
               }
            ]
         }
      }
   },
   "status": {}
}

{
   "apiVersion": "v1",
   "kind": "Service",
   "metadata": {
        "name": "petclinic"
   },
   "spec": {
      "type": "LoadBalancer",
      "selector": {
       
            "app": "petclinic"
         
      },
        
            "ports": [
               {
                  "port": 8080,
                  "targetPort": 8080,
                  "protocol": "TCP",
                  "name": "http"                   
                  ]
             }     
   }    
}

【问题讨论】:

    标签: json kubernetes yaml


    【解决方案1】:

    您的服务资源中存在语法错误(ports 中的数组右括号)。应该是:

    {
      "apiVersion": "v1",
      "kind": "Service",
      "metadata": {
        "name": "petclinic"
      },
      "spec": {
        "type": "LoadBalancer",
        "selector": {
          "app": "petclinic"
        },
        "ports": [
          {
            "port": 8080,
            "targetPort": 8080,
            "protocol": "TCP",
            "name": "http"
          }
        ]
      }
    }
    

    要使文件成为有效的 JSON 文件,您可以将定义包装在 List 资源中:

    {
      "apiVersion": "v1",
      "kind": "List",
      "items": [
        {
          "apiVersion": "v1",
          "kind": "Deployment",
          ...
        },
        {
          "apiVersion": "v1",
          "kind": "Service",
          ...
        }
      ]
    }
    

    【讨论】:

    • 谢谢,我有一个问题。是否可以将两个根对象(部署和服务)包含在数组中以便满足 JSON 语法?我可以有语法吗?
    • @Coolbreeze 在 JSON 数组本身中没有,但您可以使用 List 资源包装它们。查看编辑后的回复
    • 非常感谢编辑回复。这正是我想要的。感谢您在这方面为我提供帮助所花费的时间。
    【解决方案2】:

    您可以先使用 kubectl 应用 yaml,然后使用 kubectl get deploy,services -o json > example.json 获取 json 文件

    json 的正确语法是在两个资源之间使用 ,,而不是在 yaml 中使用 ---

    ...
        // deployment
    },
    {
        // service
    ...
    

    【讨论】:

      猜你喜欢
      • 2021-09-01
      • 2021-05-31
      • 2015-09-24
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 2022-07-07
      相关资源
      最近更新 更多