【问题标题】:Kubernetes ConfigMap UpdateKubernetes ConfigMap 更新
【发布时间】:2019-02-10 14:06:21
【问题描述】:

我正在编写一个用于以编程方式更新配置映射的 python 脚本。

示例脚本如下所示。

import requests

headers = {"Content-Type": "application/json-patch+json"}
configData = {
"apiVersion": "v1",
"kind": "ConfigMap",
"data": {
    "test2.load": "testimtest"
},
"metadata": {
    "name": "nginx2"
}
}

r = requests.patch("http://localhost:8080/api/v1/namespaces/default/configmaps/nginx2", json=configData)

这个问题有趣的一面是我对 POST 和 GET 方法没有任何问题,但是当我想用 HTTP 的 PATCH 方法更新 kubernetes 配置映射时,我得到了

 "reason":"UnsupportedMediaType" //STATUS_CODE 415

我该如何处理这个问题。

【问题讨论】:

    标签: python rest http kubernetes


    【解决方案1】:

    我建议您使用 Kubernetes 客户端库,而不是自己进行原始 HTTP 调用。然后你不需要弄清楚低级连接的东西,因为库会为你抽象出来。

    我一直在使用Pykube,它提供了一个不错的pythonic API,尽管它现在似乎被放弃了。

    您也可以使用官方的client-python,它正在积极维护中。该库有点笨拙,因为它基于自动生成的 OpenAPI 客户端,但它涵盖了许多用例,例如流式传输结果。

    【讨论】:

    【解决方案2】:

    您必须阅读一些内容才能确定实际上是否支持此 HTTP 动词,也许您遇到了权限问题?

    无论如何,我对你的建议是使用 kubectl 的详细选项来找出类似的东西。

    例如,假设我想删除一个 pod,我会:

    kubectl -v=9 delete pod myapp
    

    输出(我清理了一下)应该包含您正在寻找的信息:

    I1315 14:42:19.153664 30452 round_trippers.go:417]
       curl -k -v -XDELETE -H "Accept: application/json, */*"
       -H "User-Agent: kubectl/v1.8.5 (linux/amd64) kubernetes/cce11c6"
       https://<ip>:<port>/api/v1/namespaces/default/pods/myapp
    ...
    

    所以现在,如果我掌握了用 python 或其他方式构建方法所需的所有详细信息,希望这有意义和/或有所帮助,请使用patch 命令尝试。

    【讨论】:

    猜你喜欢
    • 2018-01-18
    • 2020-09-30
    • 2018-12-20
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 2020-03-25
    • 2020-02-20
    相关资源
    最近更新 更多