如何使用 RestApi 更新 k8s 中的部署?

问题描述 投票:0回答:3

我想使用RestApi来更新部署。 我用邮递员测试了它,但总是得到 415 回复。


信息如下:

类型: 补丁

网址:https://k8sClusterUrl:6443/apis/extensions/v1beta1/namespaces/ns/deployments/peer0

标题:

Authorization: bearer token  
Content-Type:application/json  

身体:

{
    "kind": "Deployment",
    "spec":
    {
        "template":
        {
            "spec":
            {
                "containers":[
                    {
                        "$setElementOrder/volumeMounts":[{"mountPath":"/host/var/run/"},{"mountPath":"/mnt"}],
                        "name":"peer0",
                        "image":"hyperledger/fabric-peer:x86_64-1.1.0"}
                ]
            }
        }
    }
}

回复:

{
    "kind": "Status",
    "apiVersion": "v1",
    "metadata": {},
    "status": "Failure",
    "message": "the server responded with the status code 415 but did not return more information",
    "details": {},
    "code": 415
}

我这个pod中有多个容器,只想申请特定的容器:

peer0

$setElementOrder
var 有什么不同吗?

deployment kubernetes postman
3个回答
2
投票

415
是无效的媒体类型。

在这种情况下,您应该将媒体类型设置为

application/json+patch+json
(您可以在文档此处中看到这一点)


0
投票

您可以尝试使用 body 并使用 Content-Type 为 application/json-patch+json,方法 PATCH:

[{
"op" : "replace",
"path" : "/spec/template/spec/container/0/$setElementOrder/volumeMounts",
"value" : "<value you want to replace>"
}]

0
投票

对我有用的是将 content_type 设置为

application/merge-patch+json
,然后仅传递我想要的更改的正文,而不是我尝试的整个 DeploymentSpec。在你的情况下,这将是身体:

{
  "spec": {
    "template": {
      "spec": {
        "containers":[{
          "$setElementOrder/volumeMounts":[{"mountPath":"/host/var/run/"},{"mountPath":"/mnt"}],
          "name":"peer0",
          "image":"hyperledger/fabric-peer:x86_64-1.1.0"
        }]
      }
    }
  }
}

不幸的是,我找不到记录的地方,这只是反复试验。

© www.soinside.com 2019 - 2024. All rights reserved.