5

如何使用 REST API 创建 Pod?

我检查了 Kubernetes API 文档:
https ://kubernetes.io/docs/reference/generated/kubernetes-api/v1.10/#-strong-write-operations-strong--54

他们正在编写需要使用 POST 请求的内容:
POST /api/v1/namespaces/{namespace}/pods

我有这个简单的 nginx pod 的 YAML:

cat > nginx-pod.yaml <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: nginx1
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80
EOF
4

2 回答 2

9

需要将 YAML 文件翻译成 JSON 文件:

cat > nginx-pod.json <<EOF
{
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
        "name": "nginx1"
    },
    "spec": {
        "containers": [
            {
                "name": "nginx",
                "image": "nginx:1.7.9",
                "ports": [
                    {
                        "containerPort": 80
                    }
                ]
            }
        ]
    }
}
EOF

像这样使用 curl 命令:

curl -k -v -X POST -H "Authorization: Bearer <JWT_TOKEN>" -H "Content-Type: application/json" https://127.0.0.1:6443/api/v1/namespaces/default/pods -d@nginx-pod.json  

当然,您使用的令牌应该具有创建 pod 的权限。

如果有人有办法在不转换为 JSON 的情况下做到这一点,请分享。

于 2018-07-04T14:48:29.640 回答
4

根据作者的要求添加答案。

我们可以直接使用Yaml文件如下。

curl -k -X POST -H 'Content-Type: application/yaml' \
-H "Authorization: Bearer <JWT_TOKEN>" --data '
apiVersion: v1
kind: Pod
metadata:
  name: nginx1
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80
' "https://127.0.0.1:6443/api/v1/namespaces/default/pods"

一件奇怪的事情是,如果我尝试在 curl 的数据(@file.yaml)中传递 YAML 文件,它会引发错误。似乎 YAML 内容类型不接受二进制,因此我曾经cat传递内容。所以以下也将起作用。

curl -k -X POST -H 'Content-Type: application/yaml' -H "Authorization: Bearer <JWT_TOKEN>"\
 --data "$(cat nginx-pod.yaml)" "https://127.0.0.1:6443/api/v1/namespaces/default/pods"

参考:

  1. Kubernetes API 参考
  2. Kubernetes Deployment curl 示例——示例 1 就是基于此创建的。
于 2020-07-30T03:17:16.620 回答