From 175f3a03e8d56a53bfbf273dd41b93ee75c9c3b6 Mon Sep 17 00:00:00 2001
From: Sheogorath <sheogorath@shivering-isles.com>
Date: Tue, 8 Mar 2022 18:51:52 +0100
Subject: [PATCH] fix(system-upgrade): Repair kubernetes upgrade automation

First of all, `kubeadm upgrade apply` shall only be used on the first
controlplane node. Therefore it'll check if another node controlplane
node is already upgraded.

Second we fixed the order, so that the kubelet is upgraded after the
node, and restarted after the update is installed.
---
 .../system-upgrades/kubernetes.yaml           | 22 +++++++++++++------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/infrastructure/system-upgrades/kubernetes.yaml b/infrastructure/system-upgrades/kubernetes.yaml
index 309307a9a..34be3b714 100644
--- a/infrastructure/system-upgrades/kubernetes.yaml
+++ b/infrastructure/system-upgrades/kubernetes.yaml
@@ -20,15 +20,24 @@ stringData:
     set -x
     secrets="$(dirname "$0")"
     systemd-run --same-dir --wait --collect --service-type=exec dnf upgrade -y kubernetes-kubeadm
-    kubeadm upgrade apply --yes
-    systemd-run --same-dir --wait --collect --service-type=exec dnf upgrade -y kubernetes-kubeadm
+    if [ "$1" = "first" ]; then
+      kubeadm upgrade apply --yes "$(kubeadm version -o short)"
+    else
+      kubeadm upgrade node
+    fi
+    systemd-run --same-dir --wait --collect --service-type=exec dnf upgrade -y kubernetes
+    systemctl restart kubelet.service
   upgrade.sh: |
     #!/bin/bash
     set -e
     set -x
-    secrets="$(dirname "$0")"
-    source "$secrets/setup-copr.sh"
-    source "$secrets/kubernetes-upgrade.sh"
+    secrets="/run/system-upgrade/secrets/"
+    chroot /host sh "$secrets/setup-copr.sh"
+    if ! /host/usr/bin/kubectl get pods -n kube-system -o yaml | grep kube-apiserver:v1.21.10; then
+      chroot /host sh "$secrets/kubernetes-upgrade.sh" "first"
+    else
+      chroot /host sh "$secrets/kubernetes-upgrade.sh"
+    fi
 ---
 apiVersion: upgrade.cattle.io/v1
 kind: Plan
@@ -58,5 +67,4 @@ spec:
   version: "1.0"
   upgrade:
     image: docker.io/library/fedora:35
-    command: ["chroot", "/host"]
-    args: ["sh", "/run/system-upgrade/secrets/kubernetes-upgrade/upgrade.sh"]
+    command: ["sh", "/host/run/system-upgrade/secrets/kubernetes-upgrade/upgrade.sh"]
-- 
GitLab