【问题标题】:Return 400 when i use kubernetes Deployment rollback API当我使用 kubernetes 部署回滚 API 时返回 400
【发布时间】:2016-05-27 18:35:27
【问题描述】:

抱歉,也许这不是问题。 将以下数据发布到 url http://$ip:8080/apis/extensions/v1beta1/namespaces/default/deployments/deployment-1/rollback {"kind":"Deployment","apiVersion":"extensions\/v1beta1","name":"deployment-1","updatedAnnotations":"1111","rollbackTo":{"revision":0}}

返回错误:

{"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"Deployment in version \"v1beta1\" cannot be handled as a DeploymentRollback: converting (v1beta1.Deployment) to (extensions.DeploymentRollback): UpdatedAnnotations not present in src","reason":"BadRequest","code":400}

我的帖子数据有什么问题吗? 另一个问题: 如果一个 Deployment 有两个 pod,那么每个 pod 中就有两个容器。我想更新一个容器的图像(使用 url http://$ip:8080/apis/extensions/v1beta1/namespaces/default/deployments/$deployment_name)。如果我只是更改第一个容器的图像,另一个容器就消失了!那正确吗?这意味着如果我想更新一个容器的标签或图像,我需要定义同一个 pod 中容器的所有信息?

【问题讨论】:

    标签: docker kubernetes


    【解决方案1】:

    UpdatedAnnotations 应该是一个map[string]string,所以试试这样的:

    {
        "kind":"Deployment",
        "apiVersion":"extensions\/v1beta1",
        "name":"deployment-1",
        "updatedAnnotations": {"label":"1111"},
        "rollbackTo":{"revision":0}
    }
    

    对于第二个问题,您应该能够只修补您想要更改的容器映像。如果您使用 PUT(或 kubectl apply),您需要提供完整的 PodSpec,包括您未更改的容器。

    【讨论】:

    • 感谢您的帮助!似乎你的答案和我的唯一不同的是“updatedAnnotations”应该是一个地图[字符串]字符串。我修改了我的数据,但仍然是同样的问题。对了,我的 kubernetes 版本是 1.22,你的呢?
    • 第二个问题,我再试一次(PHP代码)。 PATCH 只是我想要更改的容器图像。另一个又没了!这是一个错误吗?
    • curl --request PATCH --header "Content-Type:application/merge-patch+json" http://$ip:8080/apis/extensions/v1beta1/namespaces/default/deployments/部署补丁 --data '{"spec":{"template":{"spec":{"containers":[{"name":"mofang-web","image":"abc.com\/docker \/mofang-web-cc:stable"}]}}}}'
    • 我已经弄清楚了。像这样发布数据:{ "kind": "DeploymentRollback", "apiVersion": "extensions/v1beta1", "name": "node-46", " rollbackTo": { "revision": 3 } }
    【解决方案2】:

    我找到了第二个问题的答案 应该使用这样的 API:

    curl --request PATCH --header "Content-Type:application/strategic-merge-patch+json" http://$ip:8080/apis/extensions/v1beta1/namespaces/default/deployments/deploymen‌​t-patch --data '{"spec":{"template":{"spec":{"containers":[{"name":"mofang-web","image":"abc.co‌​m\/docker\/mofang-web-cc:stable"}]}}}}' 
    

    但是我还是不明白这三种方法的区别:

    application/json-patch+json
    application/merge-patch+json
    application/strategic-merge-patch+json
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-12
      • 2018-01-19
      • 2019-08-30
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      相关资源
      最近更新 更多