diff --git a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md
index 36e5a1a00c..f6706ea68a 100644
--- a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md
+++ b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md
@@ -79,83 +79,87 @@ Pick a control plane node that you wish to upgrade first. It must have the `/etc
**For the first control plane node**
-- Upgrade kubeadm:
+- Upgrade kubeadm:
-{{< tabs name="k8s_install_kubeadm_first_cp" >}}
-{{% tab name="Ubuntu, Debian or HypriotOS" %}}
- # replace x in {{< skew currentVersion >}}.x-00 with the latest patch version
- apt-mark unhold kubeadm && \
- apt-get update && apt-get install -y kubeadm={{< skew currentVersion >}}.x-00 && \
- apt-mark hold kubeadm
-{{% /tab %}}
-{{% tab name="CentOS, RHEL or Fedora" %}}
- # replace x in {{< skew currentVersion >}}.x-0 with the latest patch version
- yum install -y kubeadm-{{< skew currentVersion >}}.x-0 --disableexcludes=kubernetes
-{{% /tab %}}
-{{< /tabs >}}
-
+ {{< tabs name="k8s_install_kubeadm_first_cp" >}}
+ {{% tab name="Ubuntu, Debian or HypriotOS" %}}
+ ```shell
+ # replace x in {{< skew currentVersion >}}.x-00 with the latest patch version
+ apt-mark unhold kubeadm && \
+ apt-get update && apt-get install -y kubeadm={{< skew currentVersion >}}.x-00 && \
+ apt-mark hold kubeadm
+ ```
+ {{% /tab %}}
+ {{% tab name="CentOS, RHEL or Fedora" %}}
+ ```shell
+ # replace x in {{< skew currentVersion >}}.x-0 with the latest patch version
+ yum install -y kubeadm-{{< skew currentVersion >}}.x-0 --disableexcludes=kubernetes
+ ```
+ {{% /tab %}}
+ {{< /tabs >}}
+
-- Verify that the download works and has the expected version:
+- Verify that the download works and has the expected version:
- ```shell
- kubeadm version
- ```
+ ```shell
+ kubeadm version
+ ```
-- Verify the upgrade plan:
+- Verify the upgrade plan:
- ```shell
- kubeadm upgrade plan
- ```
+ ```shell
+ kubeadm upgrade plan
+ ```
- This command checks that your cluster can be upgraded, and fetches the versions you can upgrade to.
- It also shows a table with the component config version states.
+ This command checks that your cluster can be upgraded, and fetches the versions you can upgrade to.
+ It also shows a table with the component config version states.
-{{< note >}}
-`kubeadm upgrade` also automatically renews the certificates that it manages on this node.
-To opt-out of certificate renewal the flag `--certificate-renewal=false` can be used.
-For more information see the [certificate management guide](/docs/tasks/administer-cluster/kubeadm/kubeadm-certs).
-{{ note >}}
+ {{< note >}}
+ `kubeadm upgrade` also automatically renews the certificates that it manages on this node.
+ To opt-out of certificate renewal the flag `--certificate-renewal=false` can be used.
+ For more information see the [certificate management guide](/docs/tasks/administer-cluster/kubeadm/kubeadm-certs).
+ {{ note >}}
+
+ {{< note >}}
+ If `kubeadm upgrade plan` shows any component configs that require manual upgrade, users must provide
+ a config file with replacement configs to `kubeadm upgrade apply` via the `--config` command line flag.
+ Failing to do so will cause `kubeadm upgrade apply` to exit with an error and not perform an upgrade.
+ {{ note >}}
-{{< note >}}
-If `kubeadm upgrade plan` shows any component configs that require manual upgrade, users must provide
-a config file with replacement configs to `kubeadm upgrade apply` via the `--config` command line flag.
-Failing to do so will cause `kubeadm upgrade apply` to exit with an error and not perform an upgrade.
-{{ note >}}
+- Choose a version to upgrade to, and run the appropriate command. For example:
-- Choose a version to upgrade to, and run the appropriate command. For example:
+ ```shell
+ # replace x with the patch version you picked for this upgrade
+ sudo kubeadm upgrade apply v{{< skew currentVersion >}}.x
+ ```
- ```shell
- # replace x with the patch version you picked for this upgrade
- sudo kubeadm upgrade apply v{{< skew currentVersion >}}.x
- ```
+ Once the command finishes you should see:
- Once the command finishes you should see:
+ ```
+ [upgrade/successful] SUCCESS! Your cluster was upgraded to "v{{< skew currentVersion >}}.x". Enjoy!
- ```
- [upgrade/successful] SUCCESS! Your cluster was upgraded to "v{{< skew currentVersion >}}.x". Enjoy!
+ [upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
+ ```
- [upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
- ```
+- Manually upgrade your CNI provider plugin.
-- Manually upgrade your CNI provider plugin.
+ Your Container Network Interface (CNI) provider may have its own upgrade instructions to follow.
+ Check the [addons](/docs/concepts/cluster-administration/addons/) page to
+ find your CNI provider and see whether additional upgrade steps are required.
- Your Container Network Interface (CNI) provider may have its own upgrade instructions to follow.
- Check the [addons](/docs/concepts/cluster-administration/addons/) page to
- find your CNI provider and see whether additional upgrade steps are required.
-
- This step is not required on additional control plane nodes if the CNI provider runs as a DaemonSet.
+ This step is not required on additional control plane nodes if the CNI provider runs as a DaemonSet.
**For the other control plane nodes**
Same as the first control plane node but use:
-```
+```shell
sudo kubeadm upgrade node
```
instead of:
-```
+```shell
sudo kubeadm upgrade apply
```
@@ -163,46 +167,50 @@ Also calling `kubeadm upgrade plan` and upgrading the CNI provider plugin is no
### Drain the node
-- Prepare the node for maintenance by marking it unschedulable and evicting the workloads:
+- Prepare the node for maintenance by marking it unschedulable and evicting the workloads:
- ```shell
- # replace with the name of your node you are draining
- kubectl drain --ignore-daemonsets
- ```
+ ```shell
+ # replace with the name of your node you are draining
+ kubectl drain --ignore-daemonsets
+ ```
### Upgrade kubelet and kubectl
-- Upgrade the kubelet and kubectl:
+- Upgrade the kubelet and kubectl:
-{{< tabs name="k8s_install_kubelet" >}}
-{{% tab name="Ubuntu, Debian or HypriotOS" %}}
- # replace x in {{< skew currentVersion >}}.x-00 with the latest patch version
- apt-mark unhold kubelet kubectl && \
- apt-get update && apt-get install -y kubelet={{< skew currentVersion >}}.x-00 kubectl={{< skew currentVersion >}}.x-00 && \
- apt-mark hold kubelet kubectl
-{{% /tab %}}
-{{% tab name="CentOS, RHEL or Fedora" %}}
- # replace x in {{< skew currentVersion >}}.x-0 with the latest patch version
- yum install -y kubelet-{{< skew currentVersion >}}.x-0 kubectl-{{< skew currentVersion >}}.x-0 --disableexcludes=kubernetes
-{{% /tab %}}
-{{< /tabs >}}
-
+ {{< tabs name="k8s_install_kubelet" >}}
+ {{% tab name="Ubuntu, Debian or HypriotOS" %}}
+ ```shell
+ # replace x in {{< skew currentVersion >}}.x-00 with the latest patch version
+ apt-mark unhold kubelet kubectl && \
+ apt-get update && apt-get install -y kubelet={{< skew currentVersion >}}.x-00 kubectl={{< skew currentVersion >}}.x-00 && \
+ apt-mark hold kubelet kubectl
+ ```
+ {{% /tab %}}
+ {{% tab name="CentOS, RHEL or Fedora" %}}
+ ```shell
+ # replace x in {{< skew currentVersion >}}.x-0 with the latest patch version
+ yum install -y kubelet-{{< skew currentVersion >}}.x-0 kubectl-{{< skew currentVersion >}}.x-0 --disableexcludes=kubernetes
+ ```
+ {{% /tab %}}
+ {{< /tabs >}}
+
-- Restart the kubelet:
+- Restart the kubelet:
- ```shell
- sudo systemctl daemon-reload
- sudo systemctl restart kubelet
- ```
+ ```shell
+ sudo systemctl daemon-reload
+ sudo systemctl restart kubelet
+ ```
### Uncordon the node
-- Bring the node back online by marking it schedulable:
+- Bring the node back online by marking it schedulable:
- ```shell
- # replace with the name of your node
- kubectl uncordon
- ```
+ ```shell
+ # replace with the name of your node
+ kubectl uncordon
+ ```
## Upgrade worker nodes
@@ -211,76 +219,83 @@ without compromising the minimum required capacity for running your workloads.
### Upgrade kubeadm
-- Upgrade kubeadm:
+- Upgrade kubeadm:
-{{< tabs name="k8s_install_kubeadm_worker_nodes" >}}
-{{% tab name="Ubuntu, Debian or HypriotOS" %}}
- # replace x in {{< skew currentVersion >}}.x-00 with the latest patch version
- apt-mark unhold kubeadm && \
- apt-get update && apt-get install -y kubeadm={{< skew currentVersion >}}.x-00 && \
- apt-mark hold kubeadm
-{{% /tab %}}
-{{% tab name="CentOS, RHEL or Fedora" %}}
- # replace x in {{< skew currentVersion >}}.x-0 with the latest patch version
- yum install -y kubeadm-{{< skew currentVersion >}}.x-0 --disableexcludes=kubernetes
-{{% /tab %}}
-{{< /tabs >}}
+ {{< tabs name="k8s_install_kubeadm_worker_nodes" >}}
+ {{% tab name="Ubuntu, Debian or HypriotOS" %}}
+ ```shell
+ # replace x in {{< skew currentVersion >}}.x-00 with the latest patch version
+ apt-mark unhold kubeadm && \
+ apt-get update && apt-get install -y kubeadm={{< skew currentVersion >}}.x-00 && \
+ apt-mark hold kubeadm
+ ```
+ {{% /tab %}}
+ {{% tab name="CentOS, RHEL or Fedora" %}}
+ ```shell
+ # replace x in {{< skew currentVersion >}}.x-0 with the latest patch version
+ yum install -y kubeadm-{{< skew currentVersion >}}.x-0 --disableexcludes=kubernetes
+ ```
+ {{% /tab %}}
+ {{< /tabs >}}
### Call "kubeadm upgrade"
-- For worker nodes this upgrades the local kubelet configuration:
+- For worker nodes this upgrades the local kubelet configuration:
- ```shell
- sudo kubeadm upgrade node
- ```
+ ```shell
+ sudo kubeadm upgrade node
+ ```
### Drain the node
-- Prepare the node for maintenance by marking it unschedulable and evicting the workloads:
+- Prepare the node for maintenance by marking it unschedulable and evicting the workloads:
- ```shell
- # replace with the name of your node you are draining
- kubectl drain --ignore-daemonsets
- ```
+ ```shell
+ # replace with the name of your node you are draining
+ kubectl drain --ignore-daemonsets
+ ```
### Upgrade kubelet and kubectl
-- Upgrade the kubelet and kubectl:
+- Upgrade the kubelet and kubectl:
-{{< tabs name="k8s_kubelet_and_kubectl" >}}
-{{% tab name="Ubuntu, Debian or HypriotOS" %}}
- # replace x in {{< skew currentVersion >}}.x-00 with the latest patch version
- apt-mark unhold kubelet kubectl && \
- apt-get update && apt-get install -y kubelet={{< skew currentVersion >}}.x-00 kubectl={{< skew currentVersion >}}.x-00 && \
- apt-mark hold kubelet kubectl
-{{% /tab %}}
-{{% tab name="CentOS, RHEL or Fedora" %}}
- # replace x in {{< skew currentVersion >}}.x-0 with the latest patch version
- yum install -y kubelet-{{< skew currentVersion >}}.x-0 kubectl-{{< skew currentVersion >}}.x-0 --disableexcludes=kubernetes
-{{% /tab %}}
-{{< /tabs >}}
-
+ {{< tabs name="k8s_kubelet_and_kubectl" >}}
+ {{% tab name="Ubuntu, Debian or HypriotOS" %}}
+ ```shell
+ # replace x in {{< skew currentVersion >}}.x-00 with the latest patch version
+ apt-mark unhold kubelet kubectl && \
+ apt-get update && apt-get install -y kubelet={{< skew currentVersion >}}.x-00 kubectl={{< skew currentVersion >}}.x-00 && \
+ apt-mark hold kubelet kubectl
+ {{% /tab %}}
+ {{% tab name="CentOS, RHEL or Fedora" %}}
+ ```shell
+ # replace x in {{< skew currentVersion >}}.x-0 with the latest patch version
+ yum install -y kubelet-{{< skew currentVersion >}}.x-0 kubectl-{{< skew currentVersion >}}.x-0 --disableexcludes=kubernetes
+ ```
+ {{% /tab %}}
+ {{< /tabs >}}
+
-- Restart the kubelet:
+- Restart the kubelet:
- ```shell
- sudo systemctl daemon-reload
- sudo systemctl restart kubelet
- ```
+ ```shell
+ sudo systemctl daemon-reload
+ sudo systemctl restart kubelet
+ ```
### Uncordon the node
-- Bring the node back online by marking it schedulable:
+- Bring the node back online by marking it schedulable:
- ```shell
- # replace with the name of your node
- kubectl uncordon
- ```
+ ```shell
+ # replace with the name of your node
+ kubectl uncordon
+ ```
## Verify the status of the cluster
-After the kubelet is upgraded on all nodes verify that all nodes are available again by running the following command
-from anywhere kubectl can access the cluster:
+After the kubelet is upgraded on all nodes verify that all nodes are available again by running
+the following command from anywhere kubectl can access the cluster:
```shell
kubectl get nodes
@@ -296,6 +311,7 @@ This command is idempotent and eventually makes sure that the actual state is th
To recover from a bad state, you can also run `kubeadm upgrade apply --force` without changing the version that your cluster is running.
During upgrade kubeadm writes the following backup folders under `/etc/kubernetes/tmp`:
+
- `kubeadm-backup-etcd--