Hallo,
Ich verwende Mesos 1.0.1 und Marathon 1.3.0-RC6, wenn ich "taskKillGracePeriodSeconds" setze, App nicht auf Marathon bereitstellen, wird es nicht wirksam. Aus meiner Sicht erkennt Marathon UI dieses Feld nicht.
Hallo @robfrut135 ,
Ich habe dies vor ein paar Sekunden erneut getestet und konnte eine App mit taskKillGracePeriodSeconds
über die Benutzeroberfläche konfigurieren, die erkannt und korrekt übergeben wird. Könnten Sie bitte Ihre App-Definition einfügen?
Danke
Johannes
Hallo,
Ich habe diese Schritte befolgt:
Von der Benutzeroberfläche:
JSON von der API:
Hier das vollständige JSON (einige interne Daten entfernen)
{
"app": {
"id": "/genesis/dev/plaid",
"cmd": null,
"args": [
"kst-genesis/plaid/dev"
],
"user": null,
"env": {
"CONSUL": "consul.service.consul:8500"
},
"instances": 1,
"cpus": 0.2,
"mem": 512,
"disk": 0,
"gpus": 0,
"executor": "",
"constraints": [
[
"hostname",
"UNIQUE"
]
],
"uris": [
],
"fetch": [
],
"storeUrls": [
],
"backoffSeconds": 5,
"backoffFactor": 2,
"maxLaunchDelaySeconds": 60,
"container": {
"type": "DOCKER",
"volumes": [
],
"docker": {
"image": "genesis-plaid:0.0.2",
"network": "BRIDGE",
"portMappings": [
{
"containerPort": 9000,
"hostPort": 0,
"servicePort": 10011,
"protocol": "tcp",
"labels": {
}
}
],
"privileged": false,
"parameters": [
],
"forcePullImage": true
}
},
"healthChecks": [
{
"path": "/v1/plaid/health",
"protocol": "HTTP",
"portIndex": 0,
"gracePeriodSeconds": 30,
"intervalSeconds": 20,
"timeoutSeconds": 20,
"maxConsecutiveFailures": 5,
"ignoreHttp1xx": false
}
],
"readinessChecks": [
],
"dependencies": [
],
"upgradeStrategy": {
"minimumHealthCapacity": 1,
"maximumOverCapacity": 1
},
"labels": {
"subtopic": "plaid",
"tags": "genesis,plaid,aggregators",
"version": "v0.0.3",
"topic": "genesis"
},
"acceptedResourceRoles": null,
"ipAddress": null,
"version": "2016-09-08T11:45:31.503Z",
"residency": null,
"secrets": {
},
"taskKillGracePeriodSeconds": null,
"ports": [
10011
],
"portDefinitions": [
{
"port": 10011,
"protocol": "tcp",
"labels": {
}
}
],
"requirePorts": false,
"versionInfo": {
"lastScalingAt": "2016-09-08T11:45:31.503Z",
"lastConfigChangeAt": "2016-09-08T11:45:31.503Z"
},
"tasksStaged": 0,
"tasksRunning": 1,
"tasksHealthy": 1,
"tasksUnhealthy": 0,
"deployments": [
],
"tasks": [
{
"id": "genesis_dev_plaid.c23547d8-75b9-11e6-9376-069d0696a105",
"slaveId": "63aa66c3-527e-46ec-b1b2-4b7f69f96c46-S0",
"host": "xxxxxxx",
"state": "TASK_RUNNING",
"startedAt": "2016-09-08T11:45:38.073Z",
"stagedAt": "2016-09-08T11:45:36.905Z",
"ports": [
31064
],
"version": "2016-09-08T11:45:31.503Z",
"ipAddresses": [
{
"ipAddress": "172.17.0.9",
"protocol": "IPv4"
}
],
"appId": "/genesis/dev/plaid",
"healthCheckResults": [
{
"alive": true,
"consecutiveFailures": 0,
"firstSuccess": "2016-09-09T06:28:37.964Z",
"lastFailure": null,
"lastSuccess": "2016-09-09T16:42:33.056Z",
"lastFailureCause": null,
"taskId": "genesis_dev_plaid.c23547d8-75b9-11e6-9376-069d0696a105"
}
]
}
],
"lastTaskFailure": {
"appId": "/genesis/dev/plaid",
"host": "xxxxxxxxxxxxx",
"message": "Task was killed since health check failed. Reason: 404 Not Found",
"state": "TASK_KILLED",
"taskId": "genesis_dev_plaid.9113d602-75b7-11e6-9376-069d0696a105",
"timestamp": "2016-09-08T11:31:50.282Z",
"version": "2016-09-08T11:11:08.935Z",
"slaveId": "63aa66c3-527e-46ec-b1b2-4b7f69f96c46-S0"
}
}
}
Ich hoffe, dass diese Informationen nützlich sind.
Was ist mit diesem Problem? Hast du es reproduzieren können?
Ich habe auf Marathon 1.3.0 aktualisiert. Das Problem schlägt weiterhin fehl.
Ja, ich konnte es reproduzieren, dass das Feld taskKillGracePeriodSeconds
in der Marathon-Benutzeroberfläche nicht erkannt wird.
//cc @wavesoft
taskKillGracePeriodSeconds
schien bei mir nicht zu funktionieren, wenn die App auch mit dem Endpunkt POST /v2/apps
erstellt wurde.
@unterstein Wie bist du dazu gekommen, deine App mit taskKillGracePeriodSeconds
zu konfigurieren?
Gemäß diesem Dokument: https://mesosphere.github.io/marathon/docs/health-checks.html
taskKillGracePeriodSeconds
ist ein Label einer Anwendung. cc @robfrut135
Was er getan hat, nicht wahr, @tgermain ?
FWIW, das ist meine App-Definition:
{
"id": "/test-app",
"cmd": null,
"cpus": 1,
"mem": 256,
"disk": 0,
"instances": 1,
"constraints": [
[
"hostname",
"GROUP_BY"
]
],
"container": {
"type": "DOCKER",
"volumes": [],
"docker": {
...
}
},
"healthChecks": [
{
"path": "/health",
"protocol": "HTTP",
"portIndex": 0,
"gracePeriodSeconds": 90,
"intervalSeconds": 60,
"timeoutSeconds": 2,
"maxConsecutiveFailures": 3,
"ignoreHttp1xx": false
}
],
"portDefinitions": [
{
"port": 10041,
"protocol": "tcp",
"labels": {}
}
],
"args": [
...
],
"taskKillGracePeriodSeconds": 10,
"backoffFactor": 2,
"upgradeStrategy": {
"minimumHealthCapacity": 1,
"maximumOverCapacity": 0.5
}
}
Es ist, ich habe das Dokument falsch gelesen:
Um die erforderliche Nachfrist festzulegen, fügen Sie Ihrer Anwendungsdefinition das Label taskKillGracePeriodSeconds hinzu:
"taskKillGracePeriodSeconds": 10
Es ist ein appDefinition-Schlüssel (wie in json key/value) und keines der Labels Ihrer appDefinition.
Das offizielle Dokument der Marathon Rest API ist korrekt.
Ein vollständiges appDefinition-Beispiel wäre eine großartige Ergänzung zum Dokument, um den letzten Teil eindeutig zu machen. Ich werde das tun.
Irgendwelche Fortschritte zu diesem Thema? Das wird für uns zum Problem.
/cc @orlandohohmeier klingt nach einem UI-Bug?
Das taskKillGracePeriodSeconds
ist also eine unbekannte Eigenschaft für die Benutzeroberfläche, sodass es beim Filtern entfernt wird. Das Erstellen eines neuen Dienstes sollte problemlos funktionieren, aber beim Bearbeiten wird dieser Wert vollständig ignoriert.
Die einzige Lösung besteht derzeit darin, die API zum Bearbeiten zu verwenden, aber ich werde prüfen, ob wir den Fix auf die Version 1.1.5 der Benutzeroberfläche zurückportieren können.
Hinweis: Dieses Problem wurde zu https://jira.mesosphere.com/browse/MARATHON-1715 migriert. Weitere Informationen finden Sie unter https://groups.google.com/forum/#!topic/marathon-framework/khtvf-ifnp8 .
Hilfreichster Kommentar
Das
taskKillGracePeriodSeconds
ist also eine unbekannte Eigenschaft für die Benutzeroberfläche, sodass es beim Filtern entfernt wird. Das Erstellen eines neuen Dienstes sollte problemlos funktionieren, aber beim Bearbeiten wird dieser Wert vollständig ignoriert.Die einzige Lösung besteht derzeit darin, die API zum Bearbeiten zu verwenden, aber ich werde prüfen, ob wir den Fix auf die Version 1.1.5 der Benutzeroberfläche zurückportieren können.