Развертывание док-контейнера Kibana 4 с отображением портов на Mesos / Marathon

Я использую мезо и марафон для развертывания контейнера Kibana 4. Развертываемый JSON:

{
    "id": "/org/products/kibana/webapp",
    "instances": 1,
    "cpus": 1,
    "mem": 768,
    "uris": [],
    "constraints": [
        ["hostname", "UNIQUE"]
    ],
    "upgradeStrategy": {
        "minimumHealthCapacity": 0.5
    },
    "healthChecks": [
        {
            "protocol": "HTTP",
            "path": "/",
            "portIndex": 0,
            "initialDelaySeconds": 600,
            "gracePeriodSeconds": 10,
            "intervalSeconds": 30,
            "timeoutSeconds": 120,
            "maxConsecutiveFailures": 10
        }
    ],
    "env": {
        "ES_HOST":"172.23.10.23",
        "ES_PORT":"9200"
    },
    "container": {
        "type": "DOCKER",
        "docker": {
            "image": "myregistry.local.com:5000/org/kibana:4.0.0",
            "network": "BRIDGE",
            "portMappings": [
                {
                    "containerPort": 5601,
                    "hostPort": 0,
                    "servicePort": 50061,
                    "protocol": "tcp"
                }
            ]
        },
        "volumes": [
          {
            "containerPath": "/etc/localtime",
            "hostPath": "/etc/localtime",
            "mode": "RO"
          }
        ]
    }
}

Но когда я публикую его, приложение kibana никогда не просыпается, а журнал stderr:

I0227 12:22:44.666357  1149 exec.cpp:132] Version: 0.21.1
I0227 12:22:44.669059  1178 exec.cpp:206] Executor registered on slave 20150225-040104-1124079532-5050-952-S0

/kibana/src/index.js:58
      throw error;
            ^
Error: listen EADDRNOTAVAIL
  at errnoException (net.js:905:11)
  at Server._listen2 (net.js:1024:19)
  at listen (net.js:1065:10)
  at net.js:1147:9
  at asyncCallback (dns.js:68:16)
  at Object.onanswer [as oncomplete] (dns.js:121:9)

После этого я пытаюсь исключить сопоставление портов, потому что я нашел некоторые ссылки, указывающие на то, что это проблема конфигурации порта или сети. Затем мое веб-приложение Kibana 4 просыпается нормально, но мне нужно настроить сопоставление портов для доступа через HTTP. Я не понимаю, почему у марафона проблемы с конфигурациями network и portMappings. Некоторая помощь будет оценена по достоинству.


person enrique-carbonell    schedule 27.02.2015    source источник


Ответы (1)


Это неприятная проблема, и я тоже с ней столкнулся (запускал Kibana 4 на Mesos + Marathon).

Краткий ответ:

Если вы используете текущий мастер репозитория Kibana, этого не произойдет - соответствующий код был изменен в моментальном снимке 4.1.0, который является мастером на момент написания.

Длинный ответ:

4.0.0 содержит этот фрагмент кода в src/server/index.js:

var port = parseInt(process.env.PORT, 10) || config.port || 3000;
var host = process.env.HOST || config.host || '127.0.0.1';

Marathon по умолчанию предоставляет переменные среды HOST и POST, а для переменной HOST задано имя хоста подчиненного устройства Mesos. Приведенный выше код заставляет Kibana попытаться привязаться к IP-адресу подчиненного устройства Mesos (который Marathon разместил в HOST), что не удастся, поскольку он работает внутри контейнера Docker.

Если вы хотите запустить 4.0.0, вы можете просто пропатчить эти строки:

var port = config.port || 3000;
var host = config.host || '127.0.0.1';

В настоящий момент код в мастере выглядит так.

person Andy Sykes    schedule 02.03.2015