【问题标题】:How to create Pod from REST API如何从 REST API 创建 Pod
【发布时间】:2018-12-13 01:10:51
【问题描述】:

如何使用 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

【问题讨论】:

    标签: kubernetes kubernetes-pod kubernetes-apiserver


    【解决方案1】:

    需要将 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 的情况下做到这一点,请分享。

    【讨论】:

      【解决方案2】:

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

      我们可以如下直接使用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 reference
      2. Kubernetes Deployment curl example - 示例 1 就是基于此创建的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多