【问题标题】:POD Definition - Deploying to DC/OSPOD 定义 - 部署到 DC/OS
【发布时间】:2019-03-01 09:08:34
【问题描述】:

我是 DC/OS 的新手,我一直在努力尝试部署 POD。我已经尝试了documentation 中提供的简单示例 但部署仍停留在部署阶段。有很多可用的资源,所以这不是问题。

我有 3 个容器需要存在于虚拟网络中(队列、PDI、API)。我已经包含了以单个容器部署开始的定义文件,一旦成功部署,我将在定义中添加 2 个额外的容器。我一直在看这个example,但没有成功。

我已经通过 Jenkins 一次成功地部署了一个容器。所有 3 个图像都已发布并存在于 docker 注册表 (Jfrog) 中。我已经为其中一个成功的部署提供了我的 ma​​rathon.json 示例。我将不胜感激任何可以提供帮助的反馈。该服务卡在部署阶段,因此我无法通过命令行或 UI 深入查看日志。

containers.image = pdi-queue

工件服务器 = repos.pdi.com:5010/pdi-queue

1 容器 POD 定义 -(错误:卡在部署阶段)

{
"id":"/pdi-queue",
"containers":[
   {
      "name":"simple-docker",
      "resources":{
         "cpus":1,
         "mem":128,
         "disk":0,
         "gpus":0
      },
      "image":{
         "kind":"DOCKER",
         "id":"repos.pdi.com:5010/pdi-queue",
         "portMappings":[
            {
               "hostPort": 0,
               "containerPort": 15672,
               "protocol": "tcp",
               "servicePort": 15672

            }
         ]
      },
      "endpoints":[
         {
            "name":"web",
            "containerPort":80,
            "protocol":[
               "http"
            ]
         }

      ],
      "healthCheck":{
         "http":{
            "endpoint":"web",
            "path":"/"
         }
      }
   }
],
"networks":[
   {
      "mode":"container",
      "name":"dcos"
   }
]

}

Marathon.json -(无错误:成功部署)

  {
  "id": "/pdi-queue",
  "backoffFactor": 1.15,
  "backoffSeconds": 1,
  "container": {
    "portMappings": [
      {"containerPort": 15672, "hostPort": 0, "protocol": "tcp", "servicePort": 15672, "name": "health"},
      {"containerPort": 5672, "hostPort": 0, "protocol": "tcp", "servicePort": 5672, "name": "queue"}
    ],
    "type": "DOCKER",
    "volumes": [],
    "docker": {
      "image": "repos.pdi.com:5010/pdi-queue",
      "forcePullImage": true,
      "privileged": false,
      "parameters": []
    }
  },
  "cpus": 0.1,
  "disk": 0,
  "healthChecks": [
    {
      "gracePeriodSeconds": 300,
      "intervalSeconds": 60,
      "maxConsecutiveFailures": 3,
      "portIndex": 0,
      "timeoutSeconds": 20,
      "delaySeconds": 15,
      "protocol": "MESOS_HTTP",
      "path": "/"
    }
  ],
  "instances": 1,
  "maxLaunchDelaySeconds": 3600,
  "mem": 512,
  "gpus": 0,
  "networks": [
    {
      "mode": "container/bridge"
    }
  ],
  "requirePorts": false,
  "upgradeStrategy": {
    "maximumOverCapacity": 1,
    "minimumHealthCapacity": 1
  },
  "killSelection": "YOUNGEST_FIRST",
  "unreachableStrategy": {
    "inactiveAfterSeconds": 300,
    "expungeAfterSeconds": 600
  },
  "fetch": [],
  "constraints": [],
  "labels": {
    "traefik.frontend.redirect.entryPoint": "https",
    "traefik.frontend.redirect.permanent": "true",
    "traefik.enable": "true"
  }

}

【问题讨论】:

    标签: docker dcos


    【解决方案1】:

    我可能不知道您遇到的问题的答案,但我想我可以分享一些提示来帮助调试。

    首先,如果您无法从 DC​​/OS UI 查看日志,您也可以前往 <cluster_url>/mesos 并在 Completed Tasks 下找到 simple_docker 任务。它将显示为TASK_FAILED。单击右侧的沙盒链接,然后检查stderrstdout 文件的任务。那里可能有一些关于它为什么失败的线索。

    另一个地方可以查看任务失败的 Mesos UI 中的代理 IP。 SSH进入节点并运行sudo journalctl -u dcos-mesos-slave查看代理日志并尝试查找与失败任务对应的日志

    将应用程序作为 Pod 和您共享的应用程序定义之间的一个区别是,您的应用程序定义使用 DOCKER 作为任务的容器化器,而 Pod 使用 MESOS 容器化器。 我注意到您正在为您的 docker 映像使用私有 docker 注册表。一种可能性是,如果您的私有注册表的证书不受 Mesos 信任,但 docker 已配置为信任它:

    <copy the certificate(s) to /var/lib/dcos/pki/tls/certs>
    cd /var/lib/dcos/pki/tls/certs
    for file in *.crt; do ln -s \"$file\" \"$(openssl x509 -hash -noout -in \"$file\")\".0; done
    

    这需要在每个代理节点上完成。

    如果不是证书问题,则可能是 docker 注册表凭据问题。如果您使用的 docker 注册表需要身份验证,那么您可以在安装时指定 docker 凭据(假设使用高级安装方法):https://docs.mesosphere.com/1.11/installing/production/advanced-configuration/configuration-reference/#cluster-docker-credentials

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 2019-10-01
      相关资源
      最近更新 更多