One of the most complicated and risky tasks involved in running a Kubernetes cluster is a live upgrade. The interactions between different parts of the system of different versions are often difficult to predict, but in many situations, it is required. Large clusters with many users can't afford to be offline for maintenance. The best way to attack complexity is to divide and conquer. Microservice architecture helps a lot here. You never upgrade your entire system. You just constantly upgrade several sets of related microservices, and if APIs have changed, then you upgrade their clients too. A properly-designed upgrade will preserve backward compatibility at least until all clients have been upgraded, and then deprecate old APIs across several releases.
In this section, we will discuss how to go about upgrading your cluster using various strategies,...