Skip to main content
RunBook Academy

KubernetesLXXX · Worker Node UpgradesWorker upgrades

kubelet-only upgrade — the patch-level maintenance

Advanced⏱ ~12 minkubeadmkubectl

What you'll learn

  • Identify when a kubelet-only upgrade is appropriate
  • Run a kubelet-only upgrade
  • Manage the kubelet binary and service
  • Verify the kubelet is at the new version

Prerequisites

Verified against Kubernetes 1.34.x · kubeadm 1.34.x · kubectl 1.34.x · etcd 3.6.x · CoreDNS 1.11.x · containerd 1.7.x / 2.x · 2026-08-16

Not yet marked complete on this device.

A kubelet-only upgrade updates the kubelet binary on a worker without changing the cluster version. The pattern is used for patch-level maintenance (e.g., 1.34.0 → 1.34.1 on the kubelet while the control plane is at 1.34.0). This lesson walks the pattern, the use cases, and the verification.

The pattern

flowchart LR
    A[Cluster at v1.34.0] --> B[Cluster version unchanged]
    B --> C[Upgrade kubelet binary on worker]
    C --> D[Restart kubelet service]
    D --> E[Worker joins at new kubelet]

The cluster version (kubectl version) is unchanged. The kubelet binary is updated on the worker.

The use cases

  • Security patch. A CVE is discovered in the kubelet; the operator patches the kubelet binary without upgrading the entire cluster.
  • Bug fix. A kubelet bug is fixed in a patch release; the operator updates the kubelet.
  • Staged upgrade. The control plane is at v1.34.0; the workers need to be at v1.34.1 to align with a forthcoming cluster upgrade.

The pattern is common in production.

The procedure

# On the worker
ssh worker-1

# Drain
kubectl drain worker-1 --ignore-daemonsets --delete-emptydir-data

# Update the kubelet package
sudo apt-get update
sudo apt-get install -y kubelet=1.34.1-1.34

# Restart kubelet
sudo systemctl restart kubelet

# Verify
kubectl uncordon worker-1

# Confirm
kubectl get nodes worker-1 -o wide

The kubelet binary is updated; the kubelet service is restarted with the new version.

The kubeadm upgrade node

The kubeadm equivalent:

# On the worker
sudo kubeadm upgrade node

The command upgrades the kubeadm and kubelet binaries. The kubelet service is restarted.

The kubeadm upgrade node command is the canonical command for kubelet-only upgrades when the cluster is managed by kubeadm.

The cluster version

The cluster version is unchanged:

kubectl version
Server Version: v1.34.0

The kubelet version is updated:

kubectl get nodes worker-1 -o jsonpath='{.status.nodeInfo.kubeletVersion}'
v1.34.1

The cluster version is at 1.34.0; the kubelet is at 1.34.1. The cluster is in skew (kubelet is 1 patch ahead of the cluster version), but the skew policy allows this (the kubelet is forward-compatible with the apiserver).

The validators

# On the worker
kubelet --version
Kubernetes v1.34.1

The kubelet version is reported.

journalctl -u kubelet -n 100

The kubelet logs confirm the new version.

The verify with kubectl

kubectl get nodes worker-1 -o wide
NAME       STATUS   ROLES    AGE   VERSION   INTERNAL-IP
worker-1   Ready    <none>   30d   v1.34.1   10.0.1.20

The VERSION column shows v1.34.1 (the kubelet version).

The cluster version

The cluster version is reported separately:

kubectl version
Server Version: v1.34.0

The server version is v1.34.0 (the apiserver version).

kubectl get nodes -o jsonpath='{.items[0].status.nodeInfo.kubeletVersion}'
v1.34.1

The kubelet version is v1.34.1.

The two versions differ; the cluster is in skew.

The cluster upgrade

After the kubelet is updated, the cluster can be upgraded (control plane to v1.34.1) to bring the cluster version in line:

# On the leader
sudo kubeadm upgrade apply v1.34.1

The cluster version is now v1.34.1; the kubelet is at v1.34.1. The skew is resolved.

The kubelet cert rotation

The kubelet’s client cert (rotated at 75% of validity) is unchanged by the kubelet-only upgrade. The kubelet’s cert is rotated by the kubelet itself, not by the upgrade.

The discipline

  • Document the kubelet version. The cluster version is v1.34.0; the kubelet is at v1.34.1. The skew is recorded.
  • Plan the cluster upgrade. The kubelet-only upgrade is a stepping stone; the cluster upgrade follows.
  • Validate the worker. The kubelet version matches the binary version.
  • Run smoke tests. The worker resumes normal operation.

Cross-course references

  • The Linux course covers package management.
  • The Observability course covers kubelet metrics.
  • The Ansible course covers idempotent package upgrades.

Quiz

Knowledge check · 4 questions

  1. Q1. After a kubelet-only upgrade, what is the cluster version reported by kubectl?

  2. Q2. A kubelet at v1.34.1 with a control plane at v1.34.0 is in skew.

  3. Q3. Walk the kubelet-only upgrade on a worker.

    Cluster at v1.34.0. CVE in kubelet 1.34.0; 1.34.1 fixes the CVE. The team is upgrading the kubelet binaries on the workers. The cluster version is unchanged.

  4. Q4. When is a kubelet-only upgrade appropriate?

Passing score: 75%. Answers are checked in this browser.

Production discipline

  • Document the skew. Cluster version vs kubelet version.
  • Stage the cluster upgrade. The kubelet-only upgrade is a stepping stone.
  • Validate the worker. The kubelet version matches the binary.
  • Track the CVE. The CVSS score, the patched version, the rollout.
  • Plan the cluster upgrade. The kubelet-only upgrade is the patch; the cluster upgrade is the planned event.

The kubelet-only upgrade is patch-level maintenance. Operating it well is documenting the skew and planning the cluster upgrade.