当我使用kubernetes Deployment rollback API时返回400

时间:2016-05-26 10:03:05

标签: docker kubernetes

对不起,也许这不是问题。 将以下数据发布到网址 HTTP:// IP $:8080 /的API /扩展/ v1beta1 /命名空间/默认/部署/部署-1 /回滚 {"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}

我的帖子数据有什么问题吗? 另一个问题: 如果部署有两个pod,则每个pod中都有两个容器。我想更新一个容器的图像(使用网址http://$ip:8080/apis/extensions/v1beta1/namespaces/default/deployments/$deployment_name)。如果我只是更改第一个容器的图像,另一个容器就不见了!是对的吗?这意味着如果我想更新一个容器'标签或图像我需要在同一个窗格中定义容器的所有信息吗?

2 个答案:

答案 0 :(得分:0)

UpdatedAnnotations应为map[string]string,因此请尝试以下内容:

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

对于第二个问题,您应该能够仅修改要更改的容器图像。如果你使用PUT(或kubectl apply),你需要提供完整的PodSpec,包括你没有改变的容器。

答案 1 :(得分:0)

我找到了第二个问题的答案 应该使用这样的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