Upgrade do Kubernetes deve ser feito de forma incremental, uma minor version por vez (ex: 1.29 → 1.30), sempre começando pelo Control Plane.

Conceito Geral

  • Upgrade apenas uma minor version por vez (não pular versões)
  • Ordem: Control Plane → Workers
  • Em HA: um master por vez
  • Drenar nodes antes do upgrade (migrar pods)
  • Sempre fazer backup do etcd antes
Backup etcd
   ↓
Upgrade Master01 (kubeadm → kubelet)
   ↓
Upgrade Master02, Master03 (HA)
   ↓
Upgrade Worker01 (drenar → upgrade → uncordon)
   ↓
Upgrade Worker02, Worker03...
   ↓
Validar cluster

Verificar Versão Atual

kubectl version --short
kubeadm version
kubelet --version

Planejar Upgrade

# Ver versões disponíveis
apt-cache madison kubeadm
# ou
yum list --showduplicates kubeadm

Upgrade do Control Plane (Master)

1. Upgrade kubeadm

apt-mark unhold kubeadm
apt-get update
apt-get install -y kubeadm=1.30.0-00
apt-mark hold kubeadm

2. Plano de Upgrade

kubeadm upgrade plan

3. Aplicar Upgrade

kubeadm upgrade apply v1.30.0

4. Drenar o Node

kubectl drain master01 --ignore-daemonsets

5. Upgrade kubelet e kubectl

apt-mark unhold kubelet kubectl
apt-get update
apt-get install -y kubelet=1.30.0-00 kubectl=1.30.0-00
apt-mark hold kubelet kubectl

systemctl daemon-reload
systemctl restart kubelet

6. Uncordon

kubectl uncordon master01

Upgrade de Masters Adicionais (HA)

# No Master02 e Master03
kubeadm upgrade node

kubectl drain master02 --ignore-daemonsets
# Upgrade kubelet e kubectl (mesmo processo)
systemctl restart kubelet
kubectl uncordon master02

Upgrade de Worker Nodes

# No master, drenar o worker
kubectl drain worker01 --ignore-daemonsets --delete-emptydir-data

# No worker01
apt-mark unhold kubeadm
apt-get update
apt-get install -y kubeadm=1.30.0-00
apt-mark hold kubeadm

kubeadm upgrade node

apt-mark unhold kubelet kubectl
apt-get install -y kubelet=1.30.0-00 kubectl=1.30.0-00
apt-mark hold kubelet kubectl

systemctl daemon-reload
systemctl restart kubelet

# No master
kubectl uncordon worker01

Verificar Upgrade

kubectl get nodes
kubectl version
kubectl get pods --all-namespaces

Rollback (Se Necessário)

# Restaurar backup do etcd
ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-pre-upgrade.db

# Downgrade dos pacotes
apt-get install -y kubeadm=1.29.0-00 kubelet=1.29.0-00 kubectl=1.29.0-00

Checklist de Upgrade

  • Backup do etcd
  • Testar em ambiente de dev/staging
  • Ler release notes da nova versão
  • Verificar compatibilidade de addons
  • Janela de manutenção agendada
  • Upgrade master primeiro
  • Upgrade workers um por vez
  • Validar aplicações após cada node