penguin/monok8s

k8s image for Mono Gateway Dev Kit

commit f1a7074528ca4d6b60c4ee3b9eec933a28b5cd248ef3eff025bd30679bcff77d

author斟酌 鵬兄 <tgckpg@gmail.com>
date2026-04-14T20:53:28Z
subjectCleanup k8s states after upgrade
commit f1a7074528ca4d6b60c4ee3b9eec933a28b5cd248ef3eff025bd30679bcff77d
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date:   2026-04-14T20:53:28Z

    Cleanup k8s states after upgrade
---
 alpine/rootfs-extra/etc/local.d/monok8s.start | 17 +++++++++++++++++
 build.env                                     |  4 ++--
 clitools/pkg/controller/osupgrade/progress.go |  2 ++
 clitools/pkg/node/fs.go                       | 25 +++++++++++++++++++++++++
 4 files changed, 46 insertions(+), 2 deletions(-)

diff --git a/alpine/rootfs-extra/etc/local.d/monok8s.start b/alpine/rootfs-extra/etc/local.d/monok8s.start
index 0f39ebb..2f88bd9 100755
--- a/alpine/rootfs-extra/etc/local.d/monok8s.start
+++ b/alpine/rootfs-extra/etc/local.d/monok8s.start
@@ -1,4 +1,7 @@
 #!/bin/sh
+set -eu
+
+exec >>/var/log/monok8s/boot.log 2>&1
 
 export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
 
@@ -6,4 +9,18 @@ mkdir -p /dev/hugepages
 mountpoint -q /dev/hugepages || mount -t hugetlbfs none /dev/hugepages
 echo 640 > /proc/sys/vm/nr_hugepages
 
+CUR=$(grep '^BOOT_PART=' /run/monok8s/boot-state.env | cut -d= -f2-)
+LAST=$(cat /opt/monok8s/config/.bootpart 2>/dev/null || true)
+
+if [ "$CUR" != "$LAST" ]; then
+	echo "Slot changed ($LAST -> $CUR), cleaning runtime state"
+
+	rm -rf /var/lib/containers \
+		/var/lib/kubelet/pods \
+		/var/lib/kubelet/plugins \
+		/var/lib/kubelet/device-plugins
+
+	mkdir -p /var/lib/containers /var/lib/kubelet
+fi
+
 /usr/local/bin/ctl init --env-file /opt/monok8s/config/cluster.env >>/var/log/monok8s/bootstrap.log 2>&1 &
diff --git a/build.env b/build.env
index 35cdff0..d0e760a 100644
--- a/build.env
+++ b/build.env
@@ -11,8 +11,8 @@ DPDK_VERSION=lf-6.18.2-1.0.0
 VPP_VERSION=lf-6.18.2-1.0.0
 VPP_UPSTREAM_VERSION=23.10
 
-CRIO_VERSION=cri-o.arm64.v1.33.3
-KUBE_VERSION=v1.33.3
+CRIO_VERSION=cri-o.arm64.v1.35.2
+KUBE_VERSION=v1.35.3
 
 # Mono's tutorial said fsl-ls1046a-rdb.dtb but our shipped board is not that one
 # We need fsl-ls1046a-rdb-sdk.dtb here
diff --git a/clitools/pkg/controller/osupgrade/progress.go b/clitools/pkg/controller/osupgrade/progress.go
index 71a79aa..40771fe 100644
--- a/clitools/pkg/controller/osupgrade/progress.go
+++ b/clitools/pkg/controller/osupgrade/progress.go
@@ -326,6 +326,8 @@ func markProgressCompleted(
 
 		cur.Status.Phase = monov1alpha1.OSUpgradeProgressPhaseCompleted
 		cur.Status.Message = message
+		cur.Status.CurrentVersion = osup.Status.CurrentVersion
+		cur.Status.TargetVersion = osup.Status.TargetVersion
 		cur.Status.LastUpdatedAt = &now
 		cur.Status.CompletedAt = &now
 	})
diff --git a/clitools/pkg/node/fs.go b/clitools/pkg/node/fs.go
index fbb1032..8eab227 100644
--- a/clitools/pkg/node/fs.go
+++ b/clitools/pkg/node/fs.go
@@ -29,6 +29,31 @@ func ReleaseControlGate(ctx context.Context, nctx *NodeContext) error {
 		return fmt.Errorf("relate control gate: %w", err)
 	}
 
+	return WriteLastState(ctx, nctx)
+}
+
+// Required for detecting bootslot changes
+func WriteLastState(ctx context.Context, nctx *NodeContext) error {
+	stBootPart := filepath.Join(monov1alpha1.EnvConfigDir, ".bootpart")
+
+	state, err := osimage.ReadBootState()
+	if err != nil {
+		return fmt.Errorf("read boot state: %w", err)
+	}
+
+	bootPart := state["BOOT_PART"]
+	if bootPart == "" {
+		return fmt.Errorf("BOOT_PART missing")
+	}
+
+	tmp := stBootPart + ".tmp"
+	if err := os.WriteFile(tmp, []byte(bootPart+"\n"), 0o644); err != nil {
+		return err
+	}
+	if err := os.Rename(tmp, stBootPart); err != nil {
+		return err
+	}
+
 	return nil
 }