POD 定义 - 部署到 DC/OS
POD Definition - Deploying to DC/OS
我是 DC/OS 的新手,我一直在努力尝试部署 POD。我尝试了 documentation 中提供的简单示例
但部署仍停留在部署阶段。有很多可用资源,所以这不是问题。
我有 3 个容器需要存在于虚拟网络中(队列、PDI、API)。我已经包含了我的定义文件,该文件以单个容器部署开始,一旦我可以成功部署,我将向定义中添加 2 个额外的容器。我一直在看这个 example 但没有成功。
我已经成功地通过 Jenkins 一次部署一个容器。所有 3 张图片均已发布并存在于 docker 注册表 (Jfrog) 中。我已经包含了一个我的 marathon.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"
}
}
我可能不知道您 运行 遇到的问题的答案,但我想我可以分享一些帮助调试的建议。
首先,如果您无法从 DC/OS UI 查看日志,您也可以转到 <cluster_url>/mesos
并在已完成下找到 simple_docker
任务任务 。它会显示为 TASK_FAILED
。点击右边的Sandboxlink然后勾选任务的stderr
和stdout
文件。那里可能有一些关于失败原因的线索。
另一个可以查看的地方是记下任务失败的 Mesos UI 中的代理 IP。 SSH 进入节点并 运行 sudo journalctl -u dcos-mesos-slave
查看代理日志并尝试查找与失败任务对应的日志
运行将应用程序作为 Pod 与您共享的应用程序定义之间的一个区别是,您的应用程序定义使用 DOCKER
作为任务的容器化器,而 Pods 使用 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
我是 DC/OS 的新手,我一直在努力尝试部署 POD。我尝试了 documentation 中提供的简单示例 但部署仍停留在部署阶段。有很多可用资源,所以这不是问题。
我有 3 个容器需要存在于虚拟网络中(队列、PDI、API)。我已经包含了我的定义文件,该文件以单个容器部署开始,一旦我可以成功部署,我将向定义中添加 2 个额外的容器。我一直在看这个 example 但没有成功。
我已经成功地通过 Jenkins 一次部署一个容器。所有 3 张图片均已发布并存在于 docker 注册表 (Jfrog) 中。我已经包含了一个我的 marathon.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"
}
}
我可能不知道您 运行 遇到的问题的答案,但我想我可以分享一些帮助调试的建议。
首先,如果您无法从 DC/OS UI 查看日志,您也可以转到 <cluster_url>/mesos
并在已完成下找到 simple_docker
任务任务 。它会显示为 TASK_FAILED
。点击右边的Sandboxlink然后勾选任务的stderr
和stdout
文件。那里可能有一些关于失败原因的线索。
另一个可以查看的地方是记下任务失败的 Mesos UI 中的代理 IP。 SSH 进入节点并 运行 sudo journalctl -u dcos-mesos-slave
查看代理日志并尝试查找与失败任务对应的日志
运行将应用程序作为 Pod 与您共享的应用程序定义之间的一个区别是,您的应用程序定义使用 DOCKER
作为任务的容器化器,而 Pods 使用 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