Adds a weekly detection CronJob (Sun 12:00 UTC) that probes apt-cache madison
on master for new patches + HEAD pkgs.k8s.io for next-minor availability,
then POSTs to claude-agent-service to dispatch the k8s-version-upgrade agent.
The agent (.claude/agents/k8s-version-upgrade.md) orchestrates:
pre-flight (5 nodes Ready + halt-on-alert + 24h-quiet + plan target match)
-> etcd snapshot save
-> optional master containerd skew fix
-> apt repo URL rewrite (minor bumps only)
-> drain/upgrade/uncordon master via ssh < update_k8s.sh
-> sequential workers k8s-node4 -> 3 -> 2 -> 1 with 10-min soak each
-> post-flight verification
Two new Upgrade Gates alerts catch failure modes:
- K8sVersionSkew (kubelet/apiserver gitVersion mismatch >30m)
- EtcdPreUpgradeSnapshotMissing (in_flight without snapshot_taken >10m)
update_k8s.sh refactored to take --role / --release args; the agent shells
it into each node via SSH pipe. update_node.sh annotated as OS-major path.
Operator-facing docs: docs/runbooks/k8s-version-upgrade.md and a new section
in docs/architecture/automated-upgrades.md.
Secrets: secret/k8s-upgrade/{ssh_key,ssh_key_pub,slack_webhook} (ed25519
keypair distributed to all 5 nodes via authorized_keys; slack_webhook
reuses kured webhook URL on initial deploy).
14 lines
619 B
Bash
14 lines
619 B
Bash
#!/usr/bin/env bash
|
|
#
|
|
# OS-major upgrade (Ubuntu do-release-upgrade). NOT in the auto-upgrade
|
|
# pipeline — minor apt patches are handled by unattended-upgrades + kured;
|
|
# K8s component bumps are handled by the k8s-version-upgrade agent. Run this
|
|
# script manually when bumping Ubuntu LTS major versions.
|
|
#
|
|
# See:
|
|
# - infra/docs/runbooks/k8s-node-auto-upgrades.md (apt + reboot)
|
|
# - infra/docs/runbooks/k8s-version-upgrade.md (kubeadm/kubelet/kubectl)
|
|
|
|
# sudo apt update && sudo apt autoremove -y && sudo apt upgrade -y
|
|
sudo do-release-upgrade
|
|
sudo apt update && sudo apt autoremove -y && sudo apt upgrade -y
|