此 Kubernetes 服务规范的等效 JSON 是多少?

What is the equivalent JSON for this Kubernetes service specification?

我想传递一个 JSON 文件,而不是 this YAML 文件。它的等效 JSON 是什么?我想在 kubectl create -f ... 命令中使用它:

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx
---
apiVersion: v1
kind: ReplicationController
metadata:
  name: my-nginx
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

有很多在线 YAMLJSON(反之亦然)转换器,涵盖 1.1 和 1.2 规范。

我以前没有用过Kubernetes,但是我看到你可以传递多个文件。基本上,您使用的 YAML 结构是两个文档的简短版本。 JSON 没有与此等效的文件,因此您必须将其分成两个单独的文档(文件)。

YAML 中的三个破折号是定义多个文档的一种方式。 所以上面基本上不是一个JSONoblect/file,而是两个。

第一个

{
  "apiVersion": "v1",
  "kind": "Service",
  "metadata": {
    "name": "my-nginx-svc",
    "labels": {
      "app": "nginx"
    }
  },
  "spec": {
    "type": "LoadBalancer",
    "ports": [
      {
        "port": 80
      }
    ],
    "selector": {
      "app": "nginx"
    }
  }
} 

第二个

{
  "apiVersion": "v1",
  "kind": "ReplicationController",
  "metadata": {
    "name": "my-nginx"
  },
  "spec": {
    "replicas": 2,
    "template": {
      "metadata": {
        "labels": {
          "app": "nginx"
        }
      },
      "spec": {
        "containers": [
          {
            "name": "nginx",
            "image": "nginx",
            "ports": [
              {
                "containerPort": 80
              }
            ]
          }
        ]
      }
    }
  }
}

作为旁注,由于这对您的目的没有用,为了将它们表示为一个 JSON 对象,您需要一个数组。但这意味着 YAML 也必须改变。所以为了拥有这个

[
  {
    "apiVersion": "v1",
    "kind": "Service",
    "metadata": {
      "name": "my-nginx-svc",
      "labels": {
        "app": "nginx"
      }
    },
    "spec": {
      "type": "LoadBalancer",
      "ports": [
        {
          "port": 80
        }
      ],
      "selector": {
        "app": "nginx"
      }
    }
  },
  {
    "apiVersion": "v1",
    "kind": "ReplicationController",
    "metadata": {
      "name": "my-nginx"
    },
    "spec": {
      "replicas": 2,
      "template": {
        "metadata": {
          "labels": {
            "app": "nginx"
          }
        },
        "spec": {
          "containers": [
            {
              "name": "nginx",
              "image": "nginx",
              "ports": [
                {
                  "containerPort": 80
                }
              ]
            }
          ]
        }
      }
    }
  }
]

YAML 等价物是这个

---
-
  apiVersion: v1
  kind: Service
  metadata:
    name: my-nginx-svc
    labels:
      app: nginx
  spec:
    type: LoadBalancer
    ports:
    - port: 80
    selector:
      app: nginx
-
  apiVersion: v1
  kind: ReplicationController
  metadata:
    name: my-nginx
  spec:
    replicas: 2
    template:
      metadata:
        labels:
          app: nginx
      spec:
        containers:
        - name: nginx
          image: nginx
          ports:
          - containerPort: 80

您也可以使用 YAML 创建 Kubernetes 对象:

$ kubectl create -f nginx.yaml

如果你想得到JSON,你可以做到

$ kubectl get pods -o json

考虑到 spec.yaml 文件中的初始规范和调用:

kubectl create -f spec.yaml

使用 JSON 格式的等价物是:

  1. spec.yaml 分成多个 JSON 文件:srv.jsonrc.json(每个 YAML 片段一个)
  2. 全部提供给kubectl:

    kubectl create -f srv.json -f rc.json