Updated upgrades.md for 0.28.0.
diff --git a/docs/upgrades.md b/docs/upgrades.md
index b22e87f..e888b23 100644
--- a/docs/upgrades.md
+++ b/docs/upgrades.md
@@ -13,6 +13,15 @@
 
 * Mesos 0.28 changes the definitions of two ACLs used for authorization. The objects of the `ReserveResources` and `CreateVolume` ACLs have been changed to `roles`. In both cases, principals can now be authorized to perform these operations for particular roles. This means that by default, a framework or operator can reserve resources/create volumes for any role. To restrict this behavior, [ACLs can be added](authorization.md) to the master which authorize principals to reserve resources/create volumes for specified roles only. Previously, frameworks could only reserve resources for their own role; this behavior can be preserved by configuring the `ReserveResources` ACLs such that the framework's principal is only authorized to reserve for the framework's role. **NOTE** This renders existing `ReserveResources` and `CreateVolume` ACL definitions obsolete; if you are authorizing these operations, your ACL definitions should be updated.
 
+In order to upgrade a running cluster:
+
+1. Rebuild and install any modules so that upgraded masters/slaves can use them.
+2. Install the new master binaries and restart the masters.
+3. Install the new slave binaries and restart the slaves.
+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 ##
 
 * Mesos 0.27 introduces the concept of _implicit roles_. In previous releases, configuring roles required specifying a static whitelist of valid role names on master startup (via the `--roles` flag). In Mesos 0.27, if `--roles` is omitted, _any_ role name can be used; controlling which principals are allowed to register as which roles should be done using [ACLs](authorization.md). The role whitelist functionality is still supported but is deprecated.
@@ -27,6 +36,15 @@
 
 * Reserved resources are now accounted for in the DRF role sorter. Previously unaccounted reservations will influence the weighted DRF sorter. If role weights were explicitly set, they may need to be adjusted in order to account for the reserved resources in the cluster.
 
+In order to upgrade a running cluster:
+
+1. Rebuild and install any modules so that upgraded masters/slaves can use them.
+2. Install the new master binaries and restart the masters.
+3. Install the new slave binaries and restart the slaves.
+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 ##
 
 * The names of some TaskStatus::Reason enums have been changed. But the tag numbers remain unchanged, so it is backwards compatible. Frameworks using the new version might need to do some compile time adjustments:
@@ -42,6 +60,15 @@
 
 * The `NetworkInfo` protobuf has been changed. The fields `protocol` and `ip_address` are now deprecated. The new field `ip_addresses` subsumes the information provided by them.
 
+In order to upgrade a running cluster:
+
+1. Rebuild and install any modules so that upgraded masters/slaves can use them.
+2. Install the new master binaries and restart the masters.
+3. Install the new slave binaries and restart the slaves.
+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
 
 * The following endpoints will be deprecated in favor of new endpoints. Both versions will be available in 0.25 but the deprecated endpoints will be removed in a subsequent release.