【问题标题】:Deploying/Updating Marathon Docker image using API使用 API 部署/更新 Marathon Docker 映像
【发布时间】:2020-04-17 06:46:58
【问题描述】:

我正在编写代码来自动更新马拉松上部署的图像。我使用马拉松 API 参考http://mesosphere.github.io/marathon/api-console/index.html中列出的 REST 补丁方法@

    url = 'https://<my-hostname>:<my-port>/v2/apps'
    h = {'Content-type': 'application/json', 'Accept': 'application/json'}
    data = {'app': { "id": app,
                'container': {
                    'docker': {
                        'image': image}}}}
    print ('requests.patch(%s, %s)' % (url + app, json.dumps(data)))
    r = requests.patch(url + app, headers = h, auth = auth, data = json.dumps(data))
    if r.status_code == 200:
        print('Deployed %s' % app)

代码运行成功,我得到了一个部署 ID,但 UI 没有任何变化。没有新的部署发生。如果我将补丁请求更改为不带数据的获取请求,我会取回之前使用上述代码更新的图像。

根据这个类似的API参考https://docs.mesosphere.com/1.11/deploying-services/marathon-api/#/apps/V2AppsByAppId1

它说“此操作将创建一个部署”,但什么也没发生。在 Marathon GUI 中,我根本看不到配置发生变化。如果我重新启动,则重新启动相同的旧部署。我是否错误地解释了 API 参考?

【问题讨论】:

    标签: python rest docker marathon


    【解决方案1】:

    如果我正确阅读 API 参考指南,正文应该是:

    { "id": app,
      "container": {
           "docker": {
              "image": image
            }
       }
    }
    

    用马拉松 1.4.11 对此进行了测试,并且有效。 不知道为什么你会得到一个部署ID,如果我按照你的方式做(使用额外的 {"app":} 层),我会收到一个 500 错误。顺便说一句,我不确定这对单引号和双引号有多敏感。

    【讨论】:

    • 我觉得自己好蠢!你说的对。我有那个额外的“应用程序”外壳。我不确定我从哪里得到它。删除应用层就行了!
    • 我知道为什么。当我发出 GET 请求时,结果存储在“app”附件中。我只是假设我应该在修补时使用相同的格式。
    【解决方案2】:

    Marathon 中有 open bug 导致该请求正文未与当前定义合并。因此,只有.container.docker.imagePUT/PATCH 请求将删除 port mappingsvolumes 等设置>参数...

    解决方案是从当前应用程序中获取container 对象并将image 键替换为新的Docker 映像。

    例子:

    export MARATHON_IMAGE="registry.foo.bar/app:v10"
    
    export BODY=$(curl -s -H "Content-type: application/json" leader.mesos:8080/v2/apps/foo/bar | jq -cr '.app.container | .docker.image = env.MARATHON_IMAGE | {"container": .}')
    
    curl -s -H "Content-type: application/json" -X PATCH -d "${BODY}" leader.mesos:8080/v2/apps/foo/bar
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      • 2018-08-24
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      相关资源
      最近更新 更多