Upgrading Marathon

The Marathon App itself is deployed via our continuous integration package workflow. Currently, it is using the official packages from the Mesosphere repository.

Releases for Marathon are here. Any API-breaking changes are usually listed in the changelog.

We use the Marathon Python client here.

Orchestrating Marathon Upgrades

In general, the Marathon Python client is not forward compatible with API changes. This usually drives the orchestration sequence as follows:

  1. Upgrade to the latest version of the Python client.

    1. Bump the version we want in paasta_tool’s setup.py and requirements.txt.
  2. Run the integration tests to ensure the new client works with the existing marathon container.

    1. Verify the marathon container version in the docker-compose.yml used by the integration tests.
    2. Run the tests (tox -e paasta_itests).
  3. If passing, deploy the new version of paasta_tools with the new client library. (follow the standard release cycle stuff)

  4. Once deployed everywhere, pull in the new version of the Marathon package.

    1. Clone the repo where it is built. (<git@git.yelpcorp.com:packages/marathon>)

    2. Bump the version numbers in the Makefile.

    3. Push and let Jenkins build the new package.

    4. Update Puppet to use the new version of Marathon. This is done using Hiera.

      (see the puppet code)

    5. Using ./orchestration_tools/upgrade_marathon.sh, perform the Marathon upgrade in each cluster.

If you find that there is incompatibility anywhere along the way, use judgement to decide what steps need to be re-ordered preserve Marathon availability.