This patch implements the upgrade logic for kubernetes clusters.
Upgrade is done sequentially, node-by-node, in the order of create time.
Upgrade operation starts with the CP nodes. After all CP nodes are upgraded, then
moves to worker nodes.
For upgrading a node, it creates a new node with upgraded version of k8s, adds it to
the cluster and draing & removes the corresponding old node. There's no actual relation
between the old node and new node in reality.
Co-authored-by: Eren Başak <eren@ubicloud.com>
Co-authored-by: mohi-kalantari <mohi.kalantari1@gmail.com>