Prerequisites
Before you begin, you must:
Overview
You may have many reasons to update the control plane. This topic covers three of the most common:
- To upgrade the Kubernetes version.
The control plane is described by a KubeadmControlPlane resource. This topic explains how to patch the KubeadmControlPlane in order to update the control plane.
Prepare the environment
-
Set the environment variable to the name you assigned this cluster.
CLUSTER_NAME=my-preprovisioned-cluster
See define infrastructure for information on naming your cluster.
-
If your workload cluster is self-managed, as described in Make the New Cluster Self-Managed, configure
kubectl
to use the kubeconfig for the cluster. If it is not self-managed, skip this step.export KUBECONFIG=${CLUSTER_NAME}.conf
-
Verify that the control plane is ready to be updated.
kubectl get kubeadmcontrolplane ${CLUSTER_NAME}-control-plane
The replicas, ready replicas, and updated replicas counts should be equal, as seen here:
NAME INITIALIZED API SERVER AVAILABLE VERSION REPLICAS READY UPDATED UNAVAILABLE my-preprovisioned-cluster-control-plane true true v1.21.3 1 1 1
-
Define the names of the resources.
export KUBEADMCONTROLPLANE_NAME=$(kubectl get kubeadmcontrolplanes --selector=cluster.x-k8s.io/cluster-name=${CLUSTER_NAME} -ojsonpath='{.items[0].metadata.name}')
-
Prepare the patch files.
echo '{}' > control-plane-kubernetes-version-patch.yaml
Prepare to update the Kubernetes version
-
Define the Kubernetes version. Use the letter
v
followed bymajor.minor.patch
version.export KUBERNETES_VERSION=v1.21.6
-
Create a patch file.
cat <<EOF > control-plane-kubernetes-version-patch.yaml apiVersion: controlplane.cluster.x-k8s.io/v1alpha4 kind: KubeadmControlPlane spec: version: ${KUBERNETES_VERSION} rolloutStrategy: rollingUpdate: maxSurge: 0 EOF
-
Update the KubeadmControlPlane
The KubeadmControlPlane is patched to use a new Kubernetes version.
kubectl get kubeadmcontrolplane ${KUBEADMCONTROLPLANE_NAME} --output=yaml \ | kubectl patch --local=true -f- --patch-file=control-plane-kubernetes-version-patch.yaml --type=merge --output=yaml \ | kubectl apply -f-
kubeadmcontrolplane.controlplane.cluster.x-k8s.io/my-preprovisioned-cluster-control-plane configured
-
Wait for the update to complete.
When the condition
Ready
is true, the update is complete.kubectl wait --timeout=30m kubeadmcontrolplane ${KUBEADMCONTROLPLANE_NAME} --for=condition=Ready