From bb250af0a96cfa63758543ae7c89e22ddad36eea Mon Sep 17 00:00:00 2001 From: Chris Friesen Date: Sat, 10 Dec 2022 20:09:58 -0600 Subject: [PATCH] use symlinks instead of bind mounts for K8s versioning Switch to using "stage1" and "stage2" symlinks under /var/lib/kubernetes to select versions for kubeadm, kubelet, and kubectl. We have been using bind mounts to select K8s versions, but they are not well supported by Puppet and suffer from fragility since you cannot remove a bind mount while an executable is still running from it. They also need to be re-created when creating an OSTree hotfix. Symlinks suffer from no such issues, they just need to be created in a filesystem that is not managed by OSTree. NOTE: This also requires the following two changes to go in at the same time. All three must be in place for the symlinks to work properly. https://review.opendev.org/c/starlingx/stx-puppet/+/916338 https://review.opendev.org/c/starlingx/ansible-playbooks/+/916336 Story: 2011047 Task: 49915 TEST PLAN: PASS: Perform default install on AIO-SX, ensure no issues and K8s works as expected. PASS: Perform default install on Standard lab, ensure no issues and K8s works as expected. PASS: Install with K8s 1.24 on AIO-SX, do orchestrated upgrade covering multiple K8s versions. Ensure no issues and K8s works as expected. PASS: Install with K8s 1.24 on Standard lab, do manual K8s upgrade, ensure no issues and K8s works as expected. Change-Id: Iffc4ed57c64c8cffd648345d7e03c7d9448ea891 Signed-off-by: Chris Friesen --- .../deb_folder/kubernetes-unversioned.dirs | 3 +-- .../deb_folder/kubernetes-unversioned.links | 12 +++++------ .../debian/deb_folder/rules | 20 +++++++++---------- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/kubernetes/kubernetes-unversioned/debian/deb_folder/kubernetes-unversioned.dirs b/kubernetes/kubernetes-unversioned/debian/deb_folder/kubernetes-unversioned.dirs index 09e988773..341031a01 100644 --- a/kubernetes/kubernetes-unversioned/debian/deb_folder/kubernetes-unversioned.dirs +++ b/kubernetes/kubernetes-unversioned/debian/deb_folder/kubernetes-unversioned.dirs @@ -1,6 +1,5 @@ etc/systemd/system/kubelet.service.d usr/share/bash-completion/completions -usr/local/kubernetes/current/stage1 -usr/local/kubernetes/current/stage2 var/lib/kubelet +var/lib/kubernetes run/kubernetes diff --git a/kubernetes/kubernetes-unversioned/debian/deb_folder/kubernetes-unversioned.links b/kubernetes/kubernetes-unversioned/debian/deb_folder/kubernetes-unversioned.links index 305bb84fa..ee2eb9367 100644 --- a/kubernetes/kubernetes-unversioned/debian/deb_folder/kubernetes-unversioned.links +++ b/kubernetes/kubernetes-unversioned/debian/deb_folder/kubernetes-unversioned.links @@ -1,6 +1,6 @@ -/usr/local/kubernetes/current/stage1/usr/bin/kubeadm /usr/bin/kubeadm -/usr/local/kubernetes/current/stage2/usr/bin/kubelet /usr/bin/kubelet -/usr/local/kubernetes/current/stage2/usr/bin/kubelet-cgroup-setup.sh /usr/bin/kubelet-cgroup-setup.sh -/usr/local/kubernetes/current/stage2/usr/bin/kubectl /usr/bin/kubectl -/usr/local/kubernetes/current/stage2/etc/systemd/system/kubelet.service.d/kubeadm.conf /etc/systemd/system/kubelet.service.d/kubeadm.conf -/usr/local/kubernetes/current/stage2/usr/share/bash-completion/completions/kubectl /usr/share/bash-completion/completions/kubectl +/var/lib/kubernetes/stage1/usr/bin/kubeadm /usr/bin/kubeadm +/var/lib/kubernetes/stage2/usr/bin/kubelet /usr/bin/kubelet +/var/lib/kubernetes/stage2/usr/bin/kubelet-cgroup-setup.sh /usr/bin/kubelet-cgroup-setup.sh +/var/lib/kubernetes/stage2/usr/bin/kubectl /usr/bin/kubectl +/var/lib/kubernetes/stage2/etc/systemd/system/kubelet.service.d/kubeadm.conf /etc/systemd/system/kubelet.service.d/kubeadm.conf +/var/lib/kubernetes/stage2/usr/share/bash-completion/completions/kubectl /usr/share/bash-completion/completions/kubectl diff --git a/kubernetes/kubernetes-unversioned/debian/deb_folder/rules b/kubernetes/kubernetes-unversioned/debian/deb_folder/rules index d6ad1eb12..f133ae1bd 100755 --- a/kubernetes/kubernetes-unversioned/debian/deb_folder/rules +++ b/kubernetes/kubernetes-unversioned/debian/deb_folder/rules @@ -6,8 +6,7 @@ _k8s_name := kubernetes _bindir := /usr/bin _local_sbindir := /usr/local/sbin -_curr_stage1 := /usr/local/kubernetes/current/stage1 -_curr_stage2 := /usr/local/kubernetes/current/stage2 +_symlinkdir := /var/lib/kubernetes DEBIAN_DESTDIR := $(CURDIR)/debian/tmp @@ -22,20 +21,19 @@ override_dh_auto_build: cp -rv init contrib override_dh_install: - # Current staged directories - install -v -m 755 -d ${DEBIAN_DESTDIR}${_curr_stage1} - install -v -m 755 -d ${DEBIAN_DESTDIR}${_curr_stage2} + # location for stage1 and state2 version symlinks + install -v -m 755 -d ${DEBIAN_DESTDIR}${_symlinkdir} # Symlink targets install -v -m 755 -d ${DEBIAN_DESTDIR}${_bindir} install -v -m 755 -d ${DEBIAN_DESTDIR}/etc/systemd/system/kubelet.service.d install -v -m 755 -d ${DEBIAN_DESTDIR}/usr/share/bash-completion/completions - $(call stage_link,${_curr_stage1},${_bindir},kubeadm) - $(call stage_link,${_curr_stage2},/etc/systemd/system/kubelet.service.d,kubeadm.conf) - $(call stage_link,${_curr_stage2},/usr/share/bash-completion/completions,kubectl) - $(call stage_link,${_curr_stage2},${_bindir},kubelet-cgroup-setup.sh) - $(call stage_link,${_curr_stage2},${_bindir},kubelet) - $(call stage_link,${_curr_stage2},${_bindir},kubectl) + $(call stage_link,${_symlinkdir}/stage1,${_bindir},kubeadm) + $(call stage_link,${_symlinkdir}/stage2,/etc/systemd/system/kubelet.service.d,kubeadm.conf) + $(call stage_link,${_symlinkdir}/stage2,/usr/share/bash-completion/completions,kubectl) + $(call stage_link,${_symlinkdir}/stage2,${_bindir},kubelet-cgroup-setup.sh) + $(call stage_link,${_symlinkdir}/stage2,${_bindir},kubelet) + $(call stage_link,${_symlinkdir}/stage2,${_bindir},kubectl) # install environment files install -v -d -m 0755 ${DEBIAN_DESTDIR}/etc/${_k8s_name}