Merge "Revert "clean up feature gates on k8s upgrade""
This commit is contained in:
commit
269d346cba
@ -8,4 +8,3 @@ etc/systemd/system.conf.d/kubernetes-accounting.conf
|
|||||||
usr/lib/tmpfiles.d/kubernetes.conf
|
usr/lib/tmpfiles.d/kubernetes.conf
|
||||||
usr/local/sbin/sanitize_kubelet_reserved_cpus.sh
|
usr/local/sbin/sanitize_kubelet_reserved_cpus.sh
|
||||||
usr/local/sbin/upgrade_k8s_config.sh
|
usr/local/sbin/upgrade_k8s_config.sh
|
||||||
usr/local/sbin/sanitize_feature_gates.py
|
|
||||||
|
@ -66,7 +66,6 @@ override_dh_install:
|
|||||||
install -v -m 0700 -d ${DEBIAN_DESTDIR}${_local_sbindir}
|
install -v -m 0700 -d ${DEBIAN_DESTDIR}${_local_sbindir}
|
||||||
install -v -m 0700 -t ${DEBIAN_DESTDIR}${_local_sbindir} debian/sanitize_kubelet_reserved_cpus.sh
|
install -v -m 0700 -t ${DEBIAN_DESTDIR}${_local_sbindir} debian/sanitize_kubelet_reserved_cpus.sh
|
||||||
install -v -m 0700 -t ${DEBIAN_DESTDIR}${_local_sbindir} debian/upgrade_k8s_config.sh
|
install -v -m 0700 -t ${DEBIAN_DESTDIR}${_local_sbindir} debian/upgrade_k8s_config.sh
|
||||||
install -v -m 0700 -t ${DEBIAN_DESTDIR}${_local_sbindir} debian/sanitize_feature_gates.py
|
|
||||||
|
|
||||||
dh_install
|
dh_install
|
||||||
|
|
||||||
|
@ -1,83 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
'''Removes the "RemoveSelfLink=false" kube-apiserver feature gate
|
|
||||||
|
|
||||||
Usage:
|
|
||||||
./sanitize_feature_gates.py
|
|
||||||
|
|
||||||
This script is just to remove the "RemoveSelfLink=false" kube-apiserver
|
|
||||||
feature gate from the last_kube_extra_config_bootstrap.yaml file when
|
|
||||||
doing an upgrade from K8s 1.23 to 1.24.
|
|
||||||
Once we no longer need to worry about upgrading from 1.23 we can remove this.
|
|
||||||
|
|
||||||
Copyright (c) 2022 Wind River Systems, Inc.
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at:
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
Unless required by applicable law or agreed to in writing, software distributed
|
|
||||||
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
|
|
||||||
OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
'''
|
|
||||||
|
|
||||||
import syslog
|
|
||||||
import yaml
|
|
||||||
|
|
||||||
FILENAME = "/opt/platform/config/22.12/last_kube_extra_config_bootstrap.yaml"
|
|
||||||
|
|
||||||
# The above file contains information that is used during backup and restore.
|
|
||||||
# We want to remove the "RemoveSelfLink=false" kube-apiserver feature gate
|
|
||||||
# if it's present so that if we do a backup and restore after the upgrade
|
|
||||||
# to K8s 1.24 we won't try to use this feature gate any more. Any other feature
|
|
||||||
# gates should be left alone, and if there aren't any other feature gates
|
|
||||||
# we want to delete the entire "feature-gates" entry.
|
|
||||||
|
|
||||||
# Logs will go to /var/log/daemon.log
|
|
||||||
syslog.openlog(logoption=syslog.LOG_PID, facility=syslog.LOG_DAEMON)
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(FILENAME, "r") as stream:
|
|
||||||
info = yaml.safe_load(stream)
|
|
||||||
except Exception as exc:
|
|
||||||
syslog.syslog(syslog.LOG_ERR, "Problem reading from {}".format(FILENAME))
|
|
||||||
syslog.syslog(syslog.LOG_ERR, str(exc))
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
try:
|
|
||||||
feature_gates = info['apiserver_extra_args']['feature-gates']
|
|
||||||
except KeyError:
|
|
||||||
# No apiserver feature gates, nothing to do
|
|
||||||
syslog.syslog('No kube-apiserver feature gates, nothing to do.')
|
|
||||||
exit(0)
|
|
||||||
|
|
||||||
if "RemoveSelfLink=false" not in feature_gates:
|
|
||||||
# Nothing to do
|
|
||||||
syslog.syslog('No changes needed in kube-apiserver feature gates.')
|
|
||||||
exit(0)
|
|
||||||
|
|
||||||
# Remove "RemoveSelfLink=false" from the feature gates
|
|
||||||
# we need to handle the case where it could be at the beginning of the string
|
|
||||||
# with other entries after it, or at the end of the string with other entries
|
|
||||||
# before it, in the middle of the string, or by itself.
|
|
||||||
feature_gates = feature_gates.replace('RemoveSelfLink=false,', '')
|
|
||||||
feature_gates = feature_gates.replace(',RemoveSelfLink=false', '')
|
|
||||||
feature_gates = feature_gates.replace('RemoveSelfLink=false', '')
|
|
||||||
|
|
||||||
if not feature_gates:
|
|
||||||
# No feature gates left, so delete the entry
|
|
||||||
syslog.syslog('Deleting kube-apiserver feature gates.')
|
|
||||||
info['apiserver_extra_args'].pop('feature-gates', None)
|
|
||||||
else:
|
|
||||||
# Update the feature gates with the new value
|
|
||||||
syslog.syslog('Modifying kube-apiserver feature gates.')
|
|
||||||
info['apiserver_extra_args']['feature-gates'] = feature_gates
|
|
||||||
|
|
||||||
# Write out the new file.
|
|
||||||
try:
|
|
||||||
with open(FILENAME, 'w') as outfile:
|
|
||||||
yaml.safe_dump(info, outfile, default_flow_style=False, sort_keys=False)
|
|
||||||
except Exception as exc:
|
|
||||||
syslog.syslog(syslog.LOG_ERR, "Problem writing to {}".format(FILENAME))
|
|
||||||
syslog.syslog(syslog.LOG_ERR, str(exc))
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
syslog.syslog('Successfully wrote file with RemoveSelfLink=false removed.')
|
|
@ -67,75 +67,6 @@ function get_kubeadm_configmap {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Remove the "RemoveSelfLink=false" kube-apiserver feature gate from the service parameters.
|
|
||||||
# This is needed to ensure that a backup taken after the upgrade to K8s 1.24 will be
|
|
||||||
# properly restored without this feature gate. (K8s 1.24 no longer supports this feature gate.)
|
|
||||||
function update_feature_gates_service_param_v1_24 {
|
|
||||||
|
|
||||||
# Enable authentication.
|
|
||||||
source /etc/platform/openrc
|
|
||||||
|
|
||||||
# Check if any kube-apiserver feature gates are specified in the service parameters.
|
|
||||||
TMP=`system service-parameter-list|grep kube_apiserver|grep feature-gates`
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
# no feature-gates specified, nothing to do
|
|
||||||
LOG "No kube-apiserver feature-gates service param specified, nothing to do."
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Get the actual feature gates.
|
|
||||||
# The xargs call here strips any whitespace.
|
|
||||||
FEATURE_GATES=`echo ${TMP}|cut -d'|' -f6|xargs`
|
|
||||||
if [ -z "${FEATURE_GATES}" ]; then
|
|
||||||
# No feature-gates, nothing to do. Really shouldn't hit this, just being paranoid.
|
|
||||||
LOG "No kube-apiserver feature-gates specified, nothing to do."
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check if the specific feature gate we care about is specified.
|
|
||||||
echo ${FEATURE_GATES}|grep -q "RemoveSelfLink=false"
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
# RemoveSelfLink=false is not specified, nothing to do
|
|
||||||
LOG "RemoveSelfLink=false kube-apiserver feature gate not specified, nothing to do."
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Remove "RemoveSelfLink=false" from the feature gates.
|
|
||||||
# We need to handle the case where it could be at the beginning of the string
|
|
||||||
# with other entries after it, or at the end of the string with other entries
|
|
||||||
# before it, in the middle of the string, or by itself.
|
|
||||||
NEW_FEATURE_GATES=${FEATURE_GATES//'RemoveSelfLink=false,'/}
|
|
||||||
NEW_FEATURE_GATES=${NEW_FEATURE_GATES//',RemoveSelfLink=false'/}
|
|
||||||
NEW_FEATURE_GATES=${NEW_FEATURE_GATES//'RemoveSelfLink=false'/}
|
|
||||||
|
|
||||||
if [ -z "${NEW_FEATURE_GATES}" ]; then
|
|
||||||
# no other feature gates, so delete the service parameter rather than modify it
|
|
||||||
UUID=`echo ${TMP}|cut -d'|' -f2`
|
|
||||||
system service-parameter-delete ${UUID}
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
LOG "Successfully deleted RemoveSelfLink=false feature gate service parameter ${UUID}"
|
|
||||||
else
|
|
||||||
LOG "Failed to delete RemoveSelfLink=false feature gate service parameter ${UUID}"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# need to modify the service parameter with the new feature gates
|
|
||||||
system service-parameter-modify kubernetes kube_apiserver feature-gates=${NEW_FEATURE_GATES}
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
LOG "Successfully modified kube-apiserver feature gate service parameter."
|
|
||||||
else
|
|
||||||
LOG "Failed to modify kube-apiserver feature gate service parameter."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# This needs to edit a yaml file, so we call out to a python helper.
|
|
||||||
function update_kube_extra_config_bootstrap_v1_24 {
|
|
||||||
/usr/local/sbin/sanitize_feature_gates.py
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
LOG "Problem running sanitize_feature_gates.py, may cause problems with backup/restore."
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Update feature gates for version 1.24
|
# Update feature gates for version 1.24
|
||||||
function update_feature_gates_v1_24 {
|
function update_feature_gates_v1_24 {
|
||||||
|
|
||||||
@ -225,8 +156,6 @@ until [ ${counter} -gt ${RETRIES} ]; do
|
|||||||
if [[ "${K8S_VERSION}" == "v1.21.8" ]]; then
|
if [[ "${K8S_VERSION}" == "v1.21.8" ]]; then
|
||||||
update_feature_gates_v1_22
|
update_feature_gates_v1_22
|
||||||
elif [[ "${K8S_VERSION}" == "v1.23.1" ]]; then
|
elif [[ "${K8S_VERSION}" == "v1.23.1" ]]; then
|
||||||
update_feature_gates_service_param_v1_24
|
|
||||||
update_kube_extra_config_bootstrap_v1_24
|
|
||||||
update_feature_gates_v1_24
|
update_feature_gates_v1_24
|
||||||
else
|
else
|
||||||
LOG "No update required for kubeadm configmap"
|
LOG "No update required for kubeadm configmap"
|
||||||
|
Loading…
Reference in New Issue
Block a user