v0.9.0-RC1
Pre-releaseRecommended Mesos version is 0.22.1
We tested this release against Mesos version 0.22.1. Thus, this is the recommended Mesos version for this release.
Breaking changes
Please look at the following changes to check whether you have to verify your setup before upgrading:
-
Disk resource limits are passed to Mesos.
-
New format for the
http_endpoints
command line parameter. -
New default for the
zk_max_versions
command line parameter. In Marathon, most state is versioned. This includes app
definitions and group definitions. Marathon already allowed restricting the number of versions that are kept by
--zk_max_versions
but you had to specify that explicitly.Starting with this version, Marathon will by default keep only 25 versions. That means that Marathon will start to
remove old versions in order to enforce the limit. -
Removed the deprecated
zk_hosts
andzk_state
command line parameters. Use thezk
parameter instead.
Overview
Restrict applications to certain Mesos roles
Prior Marathon versions already support registering with a --mesos_role
. This causes Mesos to offer resources
of the specified role to Marathon in addition to resources without any role designation ("*").
Marathon would use resources of any role for tasks of any app.
Now you can specify which roles Marathon should consider for launching apps per default via the
--default_accepted_resource_roles
configuration argument. You can override the default by specifying
a list of accepted roles for your app via the "acceptedResourceRoles"
attribute of the app definition.
Event stream as server sent events
Prior Marathon versions already notified other services of events via
event subscriptions.
Services could register an HTTP endpoint at which they received all events.
The new Marathon now provides an
event stream endpoint
where you receive all events conveniently as
Server Sent Events.
Abstraction for persistent storage added with ZooKeeper access directly in the JVM
A new storage abstraction has been created, which allows for different storage providers. It is completely non-blocking
and provides consistent usage patterns.
The new ZooKeeper Storage Provider is implemented in a backward compatible fashion - the same data format and storage
layout is used as prior versions of Marathon.
You can use this version of Marathon without migrating data while it is also possible to switch back to an older
version. The new persistent storage layer is enabled by default, no further action is needed.
Satisfy ports from any offered port range
In prior Marathon versions, matching port resources to the demands of a task had various restrictions:
- Marathon could not launch a task if it required port resources with different Mesos roles.
- Dynamically assigned non-docker host ports had to come from a single port range.
Now the port resources of a task can be satisfied by any combination of port ranges with any matching offered
role.
Randomize dynamic docker host ports
If a task reuses recently freed port resources, it can happen that dependencies of old tasks still expect
the old task to be reachable at the old port for a limited time span. For this reason, Marathon has already
randomized assignment of dynamic non-docker host ports to minimize the risk of launching a new task on ports recently
used by other tasks.
Now Marathon also randomly assigns dynamic docker host ports.
Disk resource limits are passed to Mesos
If you specify a non-zero disk resource limit, this limit is now passed to Mesos on task launch.
If you rely on disk limits, you also need to configure Mesos appropriately. This includes configuring the correct
isolator and enabling disk quotas enforcement with --enforce_container_disk_quota
.
Improved proxying to current leader
One of the Marathon instances is always elected as a leader and is the only instance processing your requests.
For convenience, Marathon has long proxied all requests to non-leaders to the current leader so that
you do not have to lookup the current leader yourself or are annoyed by redirects.
This proxying has now been improved and gained additional configuration parameters:
--leader_proxy_connection_timeout
(Optional. Default: 5000):
Maximum time, in milliseconds, for connecting to the
current Marathon leader from this Marathon instance.--leader_proxy_read_timeout
(Optional. Default: 10000):
Maximum time, in milliseconds, for reading from the
current Marathon leader.
Furthermore, leader proxying now uses HTTPS to talk to the leader if --http_disable
was specified.
These bugs are now obsolete:
- #1540 A marathon instance should never proxy to itself.
- #1541 Proxying Marathon requests should use timeouts.
- #1556 Proxying doesn't work for HTTPS.
Relative URL paths in the UI
The UI now uses relative URL paths making it easier to run Marathon behind a reverse proxy.
Restrict the number of versions by default
In Marathon, most state is versioned. This includes app definitions and group definitions. Marathon already allowed
restricting the number of versions that are kept by --zk_max_versions
but you had to specify that explicitly.
Since some of our users were running into problems with too many versions, we decided to restrict to
a maximum number of 25
versions by default. We recommend to set this to an even lower number, e.g. 3
, since
higher numbers impact performance negatively.
New format for the http_endpoints
command line parameter
We changed the format of the http_endpoints
command line parameter from a
space-separated to a comma-separated list of endpoints, in order to be
more consistent with the documentation and with the format used in other
parameters.
WARNING: If you use the http_endpoints
parameter with multiple space
separated URLs, you will need to migrate to the comma-separated format.
Do not delay task launches anymore as a result of failed health checks
Marathon uses an exponential back off strategy to delay further task launches after task failures. This should
prevent keeping the cluster busy with task launches which are set up to fail anyway. The delay was also increased
when health checks failed leading to delayed recovery.
Since health checks typically (depending on configuration) take a while to determine that a task is unhealthy,
this already delays restarting sufficiently.
Removed deprecated command line arguments zk_hosts
and zk_state
The command line arguments zk_hosts
and zk_state
were deprecated for some time and got removed in this version.
Use the --zk
command line argument to define the ZooKeeper connection string.
servicerouter.py
Is a replacement for the haproxy-marathon-bridge. It reads Marathon task information and generates haproxy
configuration. It supports advanced functions like sticky sessions, HTTP to HTTPS redirection, SSL offloading, VHost
support and templating.
Be more careful about using ulimit
in startup script
The startup script now only increases the maximum number of open files if the limit is too low and if the
script is started as root
.
Fixed Bugs
#1259 - Reject null bodies in REST API
#1540 - A marathon instance should never proxy to itself
#1541 - Proxying Marathon requests should use timeouts
#1556 - Proxying doesn't work for HTTPS
#1365 - servicePorts are not copied into ports
#1389 - Don't set ulimit in marathon-framework
#1452 - Remove ulimit changes from shell script
#1446 - Validation for app creation & update should not differ
#1456 - Marathon delaying app start by 70min after cluster reboot
#1481 - App stays in locked state
#1520 - Marathon don't match correctly the resources for a defined role
#1522 - Disk resource quota not communicated to Mesos on task launch
#1583 - Task uses invalid resources: disk(*):0
#1564 - args[] does not work
#1569 - http_endpoints not being split on comma
#1572 - Remove
Changelog
Changelog from Marathon 0.8.2 to 0.9.0-RC1: v0.8.2...v0.9.0-RC1
Contributors
Commits | Contributor |
---|---|
72 | Peter Kolloch |
35 | Matthias Veit |
31 | Lukas Loesche |
20 | Sunil Shah |
18 | Cody Maloney |
16 | aquamatthias |
14 | Dario Rexin |
13 | Jeremy Lingmann |
7 | Gaston Kleiman |
6 | Felix Gertz |
5 | Lukas Lösche |
5 | Philip Norman |
3 | Tamar Ben-Shachar |
3 | Gastón Kleiman |
2 | Ian Babrou |
2 | Connor Doyle |
1 | janisz |
1 | Chris Heller |
1 | Hans van den Bogert |
1 | Kamil Warguła |
1 | Michael Hausenblas |
1 | Pawel Chojnacki |
1 | Pradeep Chhetri |
1 | Sanjana Joshi Bhat |
1 | Thomas French |
1 | Tyler Neely |
1 | drexin |
1 | Adam Avilla |