Apache Mesos - Upgrading Mesos

Upgrading Mesos

This document serves as a guide for users who wish to upgrade an existing Mesos cluster. Some versions require particular upgrade techniques when upgrading a running cluster. Some upgrades will have incompatible changes.

Overview

This section provides an overview of the changes for each version (in particular when upgrading from the next lower version). For more details please check the respective sections below.

We categorize the changes as follows:

A New feature/behavior
C Changed feature/behavior
D Deprecated feature/behavior
R Removed feature/behavior
Version Mesos Core Flags Framework API Module API Endpoints
1.7.x
<ul style="padding-left:10px;">
  <li>A <a href="#1-7-x-linux-devices-isolator">Linux devices isolator</a></li>
  <li>A <a href="#1-7-x-auto-load-subsystems">Automatically load local enabled cgroups subsystems</a></li>
  <li>A <a href="#1-7-x-container-specific-cgroups-mounts">Container-specific cgroups mounts</a></li>
  <li>A <a href="#1-7-x-volume-mode-support">Volume mode support</a></li>
  <li>C <a href="#1-7-x-create-disk">`CREATE_DISK` and `DESTROY_DISK` operations and ACLs</a></li>
  <li>A <a href="#1-7-x-resource-provider-acls">Resource Provider ACLs</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>A <a href="#1-7-x-enforce-container-ports">enforce_container_ports</a></li>
  <li>A <a href="#1-7-x-gc-non-executor-container-sandboxes">gc_non_executor_container_sandboxes</a></li>
</ul>
<ul style="padding-left:10px;">
</ul>
<ul style="padding-left:10px;">
  <li>C <a href="#1-7-x-container-logger">ContainerLogger module interface changes</a></li>
  <li>C <a href="#1-7-x-isolator-recover">Isolator::recover module interface changes</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>C <a href="#1-7-x-json-serialization">JSON serialization changes</a></li>
</ul>
1.6.x
<ul style="padding-left:10px;">
  <li>C <a href="#1-6-x-grpc-requirement">Requirement for gRPC library</a></li>
  <li>C <a href="#1-6-x-csi-support">CSI v0.2 Support</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>A <a href="#1-6-x-fetcher-stall-timeout">fetcher_stall_timeout</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>A <a href="#1-6-x-xfs-kill-containers">xfs_kill_containers</a></li>
</ul>
<ul style="padding-left:10px;">
</ul>
<ul style="padding-left:10px;">
  <li>C <a href="#1-6-x-disk-profile-adaptor">Disk profile adaptor module changes</a></li>
</ul>
<ul style="padding-left:10px;">
</ul>
1.5.x
<ul style="padding-left:10px;">
  <li>C <a href="#1-5-x-task-starting">Built-in executors send a TASK_STARTING update</a></li>
  <li>A <a href="#1-5-x-network-ports-isolator">Network ports isolator</a></li>
  <li>C <a href="#1-5-x-relative-disk-source-root-path">Relative source root paths for disk resources</a></li>
  <li>A <a href="#1-5-x-reconfiguration-policy">Agent state recovery after resource changes</a></li>
  <li>C <a href="#1-5-x-protobuf-requirement">Requirement for Protobuf library</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>A <a href="#1-5-x-network-ports-isolator">container_ports_watch_interval</a></li>
  <li>A <a href="#1-5-x-network-ports-isolator">check_agent_port_range_only</a></li>
  <li>D <a href="#1-5-x-executor-secret-key">executor_secret_key</a></li>
  <li>A <a href="#1-5-x-reconfiguration-policy">reconfiguration_policy</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>A <a href="#1-5-x-task-resource-limitation">Added the TaskStatus.limitation message</a></li>
</ul>
<ul style="padding-left:10px;">
</ul>
<ul style="padding-left:10px;">
  <li>A <a href="#1-5-x-get-containers">Allowed to view nested/standalone containers</a></li>
</ul>
1.4.x
<ul style="padding-left:10px;">
  <li>A <a href="#1-4-x-ambient-capabilities">Container capabilities are made ambient if supported</a></li>
  <li>A <a href="#1-4-x-bounding-capabilities">Support for explicit bounding capabilities</a></li>
  <li>C <a href="#1-4-x-agent-recovery">Agent recovery post reboot</a></li>
  <li>C <a href="#1-4-x-xfs-no-enforce">XFS disk isolator support for not enforcing disk limits</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>A <a href="#1-4-x-agent-capabilities-flags">effective_capabilities</a></li>
  <li>A <a href="#1-4-x-agent-capabilities-flags">bounding-capabilities</a></li>
  <li>D <a href="#1-4-x-agent-capabilities-flags">allowed-capabilities</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>A <a href="#1-4-x-bounding-capabilities">Support for explicit setting bounding capabilities</a></li>
  <li>D <a href="#1-4-x-linuxinfo-capabilities">LinuxInfo.effective_capabilities deprecates LinuxInfo.capabilities</a></li>
  <li>C <a href="#1-4-x-mesos-library">`Resources` class in the internal Mesos C++ library only supports post-`RESERVATION_REFINEMENT` format</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>C <a href="#1-4-x-allocator-update-slave">Changed semantics of Allocator::updateSlave</a></li>
</ul>
<ul style="padding-left:10px;">
</ul>
1.3.x
<ul style="padding-left:10px;">
  <li>R <a href="#1-3-x-disallow-old-agents">Prevent registration by old Mesos agents</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>R <a href="#1-3-x-setquota-removequota-acl">--acls (set_quotas and remove_quotas)</a></li>
  <li>R <a href="#1-3-x-shutdown-framework-acl">--acls (shutdown_frameworks)</a></li>
  <li>A <a href="#1-3-x-executor-authentication">authenticate_http_executors</a></li>
  <li>A <a href="#1-3-x-executor-authentication">executor_secret_key</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>A <a href="#1-3-x-multi-role-support">MULTI_ROLE support</a></li>
  <li>D <a href="#1-3-x-framework-info-role">FrameworkInfo.roles deprecates FrameworkInfo.role</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>C <a href="#1-3-x-allocator-interface-change">Allocator MULTI_ROLE interface changes</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>D <a href="#1-3-x-endpoints-roles">MULTI_ROLE deprecates 'role' field in endpoints</a></li>
</ul>
1.2.x
<ul style="padding-left:10px;">
  <li>R <a href="#1-2-1-disallow-old-agents">Prevent registration by old Mesos agents</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>A <a href="#1-2-x-heartbeat-flag">http_heartbeat_interval</a></li>
  <li>A <a href="#1-2-x-backend-flag">image_provisioner_backend</a></li>
  <li>A <a href="#1-2-x-unreachable-flag">max_unreachable_tasks_per_framework</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>A <a href="#1-2-x-revive-suppress">Revive and Suppress v1 scheduler Calls</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>C <a href="#1-2-x-container-logger-interface">Container Logger prepare method</a></li>
  <li>C <a href="#1-2-x-allocator-module-changes">Allocator module changes</a></li>
  <li>A <a href="#1-2-x-new-authz-actions">New Authorizer module actions</a></li>
  <li>D <a href="#1-2-x-renamed-authz-actions">Renamed Authorizer module actions (deprecated old aliases)</a></li>
  <li>R <a href="#1-2-x-removed-hooks">Removed slavePreLaunchDockerEnvironmentDecorator and slavePreLaunchDockerHook</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>A <a href="#1-2-x-debug-endpoints">LAUNCH_NESTED_CONTAINER_SESSION, ATTACH_CONTAINER_INPUT, ATTACH_CONTAINER_OUTPUT</a></li>
  <li>D <a href="#1-2-x-recovered-frameworks">v1 GetFrameworks recovered_frameworks</a></li>
  <li>D <a href="#1-2-x-orphan-executors">v1 GetExecutors orphan_executors</a></li>
  <li>D <a href="#1-2-x-orphan-tasks">v1 GetTasks orphan_tasks</a></li>
</ul>
1.1.x
<ul style="padding-left:10px;">
  <li>R <a href="#1-1-x-container-logger-interface">Container Logger recovery method</a></li>
  <li>C <a href="#1-1-x-allocator-updateallocation">Allocator updateAllocation method</a></li>
</ul>
1.0.x
<ul style="padding-left:10px;">
  <li>CD <a href="#1-0-x-allocator-metrics">Allocator Metrics</a></li>
  <li>C <a href="#1-0-x-persistent-volume">Destruction of persistent volumes</a></li>
  <li>C <a href="#1-0-x-slave">Slave to Agent rename</a></li>
  <li>C <a href="#1-0-x-quota-acls">Quota ACLs</a></li>
  <li>R <a href="#1-0-x-executor-environment-variables">Executor environment variables inheritance</a></li>
  <li>R <a href="#1-0-x-deprecated-fields-in-container-config">Deprecated fields in ContainerConfig</a></li>
  <li>C <a href="#1-0-x-persistent-volume-ownership">Persistent volume ownership</a></li>
  <li>C <a href="#1-0-x-fetcher-user">Fetcher assumes same user as task</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>D <a href="#1-0-x-docker-timeout-flag">docker_stop_timeout</a></li>
  <li>D <a href="#1-0-x-credentials-file">credential(s) (plain text format)</a></li>
  <li>C <a href="#1-0-x-slave">Slave to Agent rename</a></li>
  <li>R <a href="#1-0-x-workdir">work_dir default value</a></li>
  <li>D <a href="#1-0-x-deprecated-ssl-env-variables">SSL environment variables</a></li>
  <li>ACD <a href="#1-0-x-http-authentication-flags">HTTP authentication</a></li>
  <li>R <a href="#1-0-x-registry-strict">registry_strict</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>DC <a href="#1-0-x-executorinfo">ExecutorInfo.source</a></li>
  <li>A <a href="#1-0-x-v1-commandinfo">CommandInfo.URI output_file</a></li>
  <li>C <a href="#1-0-x-scheduler-proto">scheduler.proto optional fields</a></li>
  <li>C <a href="#1-0-x-executor-proto">executor.proto optional fields</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>C <a href="#1-0-x-authorizer">Authorizer</a></li>
  <li>C <a href="#1-0-x-allocator">Allocator</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>C <a href="#1-0-x-status-code">HTTP return codes</a></li>
  <li>R <a href="#1-0-x-status-code">/observe</a></li>
  <li>C <a href="#1-0-x-endpoint-authorization">Added authorization</a></li>
</ul>
0.28.x
<ul style="padding-left:10px;">
  <li>C <a href="#0-28-x-resource-precision">Resource Precision</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>C <a href="#0-28-x-autherization-acls">Authentication ACLs</a></li>
</ul>
0.27.x
<ul style="padding-left:10px;">
  <li>D <a href="#0-27-x-implicit-roles">--roles</a></li>
  <li>D <a href="#0-27-x-acl-shutdown-flag">--acls (shutdown_frameworks)</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>C <a href="#0-27-x-executor-lost-callback">executorLost callback</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>C <a href="#0-27-x-allocator-api">Allocator API</a></li>
  <li>C <a href="#0-27-x-isolator-api">Isolator API</a></li>
</ul>
0.26.x
<ul style="padding-left:10px;">
  <li>C <a href="#0-26-x-taskstatus-reason">TaskStatus::Reason Enum</a></li>
  <li>C <a href="#0-26-x-credential-protobuf">Credential Protobuf</a></li>
  <li>C <a href="#0-26-x-network-info-protobuf">NetworkInfo Protobuf</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>C <a href="#0-26-x-state-endpoint">State Endpoint</a></li>
</ul>
0.25.x
<ul style="padding-left:10px;">
  <li>C <a href="#0-25-x-scheduler-bindings">C++/Java/Python Scheduler Bindings</a></li>
</ul>
<ul style="padding-left:10px;">
  <li>D <a href="#0-25-x-json-endpoints">*.json Endpoints</a></li>
</ul>

Upgrading from 1.6.x to 1.7.x

Upgrading from 1.5.x to 1.6.x

Upgrading from 1.4.x to 1.5.x

Upgrading from 1.3.x to 1.4.x

Upgrading from 1.2.x to 1.3.x

In order to upgrade a running cluster:

  1. Rebuild and install any modules so that upgraded masters/agents/schedulers can use them.
  2. Install the new master binaries and restart the masters.
  3. Install the new agent binaries and restart the agents.
  4. Upgrade the schedulers by linking the latest native library / jar / egg (if necessary).
  5. Restart the schedulers.
  6. Upgrade the executors by linking the latest native library / jar / egg (if necessary).

Upgrading from 1.1.x to 1.2.x

In order to upgrade a running cluster:

  1. Rebuild and install any modules so that upgraded masters/agents/schedulers can use them.
  2. Install the new master binaries and restart the masters.
  3. Install the new agent binaries and restart the agents.
  4. Upgrade the schedulers by linking the latest native library / jar / egg (if necessary).
  5. Restart the schedulers.
  6. Upgrade the executors by linking the latest native library / jar / egg (if necessary).

Upgrading from 1.0.x to 1.1.x

Upgrading from 0.28.x to 1.0.x

In order to upgrade a running cluster:

  1. Rebuild and install any modules so that upgraded masters/agents can use them.
  2. Install the new master binaries and restart the masters.
  3. Install the new agent binaries and restart the agents.
  4. Upgrade the schedulers by linking the latest native library / jar / egg (if necessary).
  5. Restart the schedulers.
  6. Upgrade the executors by linking the latest native library / jar / egg (if necessary).

Upgrading from 0.27.x to 0.28.x

In order to upgrade a running cluster:

  1. Rebuild and install any modules so that upgraded masters/agents can use them.
  2. Install the new master binaries and restart the masters.
  3. Install the new agent binaries and restart the agents.
  4. Upgrade the schedulers by linking the latest native library / jar / egg (if necessary).
  5. Restart the schedulers.
  6. Upgrade the executors by linking the latest native library / jar / egg (if necessary).

Upgrading from 0.26.x to 0.27.x

In order to upgrade a running cluster:

  1. Rebuild and install any modules so that upgraded masters/agents can use them.
  2. Install the new master binaries and restart the masters.
  3. Install the new agent binaries and restart the agents.
  4. Upgrade the schedulers by linking the latest native library / jar / egg (if necessary).
  5. Restart the schedulers.
  6. Upgrade the executors by linking the latest native library / jar / egg (if necessary).

Upgrading from 0.25.x to 0.26.x

In order to upgrade a running cluster:

  1. Rebuild and install any modules so that upgraded masters/agents can use them.
  2. Install the new master binaries and restart the masters.
  3. Install the new agent binaries and restart the agents.
  4. Upgrade the schedulers by linking the latest native library / jar / egg (if necessary).
  5. Restart the schedulers.
  6. Upgrade the executors by linking the latest native library / jar / egg (if necessary).

Upgrading from 0.24.x to 0.25.x

In order to upgrade a running cluster:

  1. Rebuild and install any modules so that upgraded masters/agents can use them.
  2. Install the new master binaries and restart the masters.
  3. Install the new agent binaries and restart the agents.
  4. Upgrade the schedulers by linking the latest native library / jar / egg (if necessary).
  5. Restart the schedulers.
  6. Upgrade the executors by linking the latest native library / jar / egg (if necessary).

Upgrading from 0.23.x to 0.24.x

In order to upgrade a running cluster:

  1. Rebuild and install any modules so that upgraded masters/agents can use them.
  2. Install the new master binaries and restart the masters.
  3. Install the new agent binaries and restart the agents.
  4. Upgrade the schedulers by linking the latest native library / jar / egg (if necessary).
  5. Restart the schedulers.
  6. Upgrade the executors by linking the latest native library / jar / egg (if necessary).

Upgrading from 0.22.x to 0.23.x

In order to upgrade a running cluster:

  1. Rebuild and install any modules so that upgraded masters/agents can use them.
  2. Install the new master binaries and restart the masters.
  3. Install the new agent binaries and restart the agents.
  4. Upgrade the schedulers by linking the latest native library / jar / egg (if necessary).
  5. Restart the schedulers.
  6. Upgrade the executors by linking the latest native library / jar / egg (if necessary).

Upgrading from 0.21.x to 0.22.x

In order to upgrade a running cluster:

  1. Install the new master binaries and restart the masters.
  2. Install the new agent binaries and restart the agents.
  3. Upgrade the schedulers:
  1. Restart the schedulers.
  2. Upgrade the executors by linking the latest native library / jar / egg.

Upgrading from 0.20.x to 0.21.x

In order to upgrade a running cluster:

  1. Install the new master binaries and restart the masters.
  2. Install the new agent binaries and restart the agents.
  3. Upgrade the schedulers by linking the latest native library (mesos jar upgrade not necessary).
  4. Restart the schedulers.
  5. Upgrade the executors by linking the latest native library and mesos jar (if necessary).

Upgrading from 0.19.x to 0.20.x.

In order to upgrade a running cluster:

  1. Install the new master binaries and restart the masters.
  2. Install the new agent binaries and restart the agents.
  3. Upgrade the schedulers by linking the latest native library (install the latest mesos jar and python egg if necessary).
  4. Restart the schedulers.
  5. Upgrade the executors by linking the latest native library (install the latest mesos jar and python egg if necessary).

Upgrading from 0.18.x to 0.19.x.

In order to upgrade a running cluster:

  1. Install the new master binaries and restart the masters.
  2. Install the new agent binaries and restart the agents.
  3. Upgrade the schedulers by linking the latest native library (mesos jar upgrade not necessary).
  4. Restart the schedulers.
  5. Upgrade the executors by linking the latest native library and mesos jar (if necessary).

Upgrading from 0.17.0 to 0.18.x.

In order to upgrade a running cluster:

  1. Install the new master binaries and restart the masters.
  2. Upgrade the schedulers by linking the latest native library and mesos jar (if necessary).
  3. Restart the schedulers.
  4. Install the new agent binaries then perform one of the following two steps, depending on if cgroups isolation is used:
  1. Upgrade the executors by linking the latest native library and mesos jar (if necessary).

Upgrading from 0.16.0 to 0.17.0.

In order to upgrade a running cluster:

  1. Install the new master binaries and restart the masters.
  2. Upgrade the schedulers by linking the latest native library and mesos jar (if necessary).
  3. Restart the schedulers.
  4. Install the new agent binaries and restart the agents.
  5. Upgrade the executors by linking the latest native library and mesos jar (if necessary).

Upgrading from 0.15.0 to 0.16.0.

In order to upgrade a running cluster:

  1. Install the new master binaries and restart the masters.
  2. Upgrade the schedulers by linking the latest native library and mesos jar (if necessary).
  3. Restart the schedulers.
  4. Install the new agent binaries and restart the agents.
  5. Upgrade the executors by linking the latest native library and mesos jar (if necessary).

Upgrading from 0.14.0 to 0.15.0.

In order to upgrade a running cluster:

  1. Install the new master binaries.
  2. Restart the masters with –credentials pointing to credentials of the framework(s).
  3. Install the new agent binaries and restart the agents.
  4. Upgrade the executors by linking the latest native library and mesos jar (if necessary).
  5. Upgrade the schedulers by linking the latest native library and mesos jar (if necessary).
  6. Restart the schedulers. Restart the masters with –authentication=true.

NOTE: After the restart unauthenticated frameworks will not be allowed to register.

Upgrading from 0.13.0 to 0.14.0.

In order to upgrade a running cluster:

  1. Install the new master binaries and restart the masters.
  2. Upgrade the executors by linking the latest native library and mesos jar (if necessary).
  3. Install the new agent binaries.
  4. Restart the agents after adding –checkpoint flag to enable checkpointing.
  5. Upgrade the schedulers by linking the latest native library and mesos jar (if necessary).
  6. Set FrameworkInfo.checkpoint in the scheduler if checkpointing is desired (recommended).
  7. Restart the schedulers.
  8. Restart the masters (to get rid of the cached FrameworkInfo).
  9. Restart the agents (to get rid of the cached FrameworkInfo).

Upgrading from 0.12.0 to 0.13.0.

In order to upgrade a running cluster:

  1. Install the new master binaries and restart the masters.
  2. Upgrade the schedulers by linking the latest native library and mesos jar (if necessary).
  3. Restart the schedulers.
  4. Install the new agent binaries.
  5. Restart the agents.
  6. Upgrade the executors by linking the latest native library and mesos jar (if necessary).

Upgrading from 0.11.0 to 0.12.0.

In order to upgrade a running cluster:

  1. Install the new agent binaries and restart the agents.
  2. Install the new master binaries and restart the masters.