More kmods for kubelet

This commit is contained in:
2026-03-26 19:33:15 +08:00
parent 25e17a14a4
commit 7d20a2e920
8 changed files with 255 additions and 46 deletions

View File

@@ -5,3 +5,6 @@ PARTLABEL=data /data ext4 rw,noatime,nodiratime
tmpfs /run tmpfs defaults,nosuid,nodev,mode=0755 0 0
tmpfs /tmp tmpfs defaults,nosuid,nodev,noexec,mode=1777 0 0
# Do this on Prodution
# tmpfs /var/log tmpfs defaults,nosuid,nodev,noexec,mode=0755 0 0

View File

@@ -5,12 +5,19 @@ export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
name="Apply node config"
description="Apply node configurations using node.env from /opt/monok8s/config"
command="/opt/monok8s/scripts/apply-node-config.sh"
command_background="no"
command="/opt/scripts/apply-node-config.sh"
output_log="/var/log/monok8s/apply-node-config.log"
error_log="/var/log/monok8s/apply-node-config.err"
LOG_DIR="/var/log/monok8s"
LOG_FILE="$LOG_DIR/apply-node-config.log"
depend() {
need localmount
}
start() {
checkpath --directory "$LOG_DIR"
ebegin "Applying node config"
"$command" >>"$LOG_FILE" 2>&1
eend $?
}

View File

@@ -3,15 +3,22 @@
export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
name="Bootstrap cluster"
description="Apply node configurations using node.env from /opt/monok8s/config"
description="Apply cluster configurations using node.env from /opt/monok8s/config"
command="/opt/monok8s/scripts/bootstrap-cluster.sh"
command_background="no"
command="/opt/scripts/bootstrap-cluster.sh"
output_log="/var/log/monok8s/bootstrap.log"
error_log="/var/log/monok8s/bootstrap.err"
LOG_DIR="/var/log/monok8s"
LOG_FILE="$LOG_DIR/bootstrap.log"
depend() {
need apply-node-config
use net
}
start() {
checkpath --directory "$LOG_DIR"
ebegin "Applying cluster config"
"$command" >>"$LOG_FILE" 2>&1 &
eend $?
}

0
alpine/rootfs-extra/opt/scripts/apply-node-config.sh Normal file → Executable file
View File

View File

@@ -78,6 +78,151 @@ validate_config() {
esac
}
normalize_version() {
# strip leading "v"
echo "${1#v}"
}
version_major_minor() {
normalize_version "$1" | awk -F. '{ print $1 "." $2 }'
}
version_eq() {
[ "$(normalize_version "$1")" = "$(normalize_version "$2")" ]
}
version_lt() {
[ "$(printf '%s\n%s\n' "$(normalize_version "$1")" "$(normalize_version "$2")" | sort -V | head -n1)" != "$(normalize_version "$2")" ]
}
version_gt() {
[ "$(printf '%s\n%s\n' "$(normalize_version "$1")" "$(normalize_version "$2")" | sort -V | tail -n1)" = "$(normalize_version "$1")" ] \
&& ! version_eq "$1" "$2"
}
minor_diff() {
a="$(version_major_minor "$1")"
b="$(version_major_minor "$2")"
a_major="${a%.*}"
a_minor="${a#*.}"
b_major="${b%.*}"
b_minor="${b#*.}"
[ "$a_major" = "$b_major" ] || fail "major version change unsupported here: $1 -> $2"
echo $((b_minor - a_minor))
}
get_kubeadm_binary_version() {
kubeadm version -o short
}
get_cluster_server_version() {
kubectl --kubeconfig /etc/kubernetes/admin.conf version -o yaml \
| awk '
$1 == "serverVersion:" { in_server=1; next }
in_server && $1 == "gitVersion:" { print $2; exit }
'
}
get_api_server_version_from_kubelet_kubeconfig() {
kubectl --kubeconfig /etc/kubernetes/kubelet.conf version -o yaml \
| awk '
$1 == "serverVersion:" { in_server=1; next }
in_server && $1 == "gitVersion:" { print $2; exit }
'
}
validate_target_matches_local_binaries() {
kubeadm_ver="$(get_kubeadm_binary_version)"
if ! version_eq "$kubeadm_ver" "$KUBERNETES_VERSION"; then
fail "kubeadm binary version ($kubeadm_ver) does not match target KUBERNETES_VERSION ($KUBERNETES_VERSION)"
fi
}
decide_bootstrap_action() {
case "$BOOTSTRAP_MODE" in
init)
if [ -f /etc/kubernetes/admin.conf ]; then
BOOTSTRAP_ACTION="upgrade-control-plane"
else
BOOTSTRAP_ACTION="init"
fi
;;
join)
if [ -f /etc/kubernetes/kubelet.conf ]; then
BOOTSTRAP_ACTION="upgrade-node"
else
BOOTSTRAP_ACTION="join"
fi
;;
*)
fail "unsupported BOOTSTRAP_MODE: $BOOTSTRAP_MODE"
;;
esac
log "selected bootstrap action: $BOOTSTRAP_ACTION"
}
validate_upgrade_path() {
current="$1"
target="$2"
if version_eq "$current" "$target"; then
log "cluster is already at target version: $target"
return 0
fi
if version_gt "$current" "$target"; then
fail "downgrade is not supported: current=$current target=$target"
fi
diff="$(minor_diff "$current" "$target")"
case "$diff" in
0|1)
;;
*)
fail "unsupported upgrade path: current=$current target=$target (minor skip too large)"
;;
esac
}
check_upgrade_prereqs() {
validate_target_matches_local_binaries
}
run_kubeadm_upgrade_apply() {
current_version="$(get_cluster_server_version)"
log "current control-plane version: $current_version"
log "target control-plane version: $KUBERNETES_VERSION"
validate_upgrade_path "$current_version" "$KUBERNETES_VERSION"
if version_eq "$current_version" "$KUBERNETES_VERSION"; then
log "control-plane already at target version; skipping kubeadm upgrade apply"
return 0
fi
log "running kubeadm upgrade plan..."
kubeadm upgrade plan "$KUBERNETES_VERSION"
log "running kubeadm upgrade apply..."
kubeadm upgrade apply -y "$KUBERNETES_VERSION"
}
run_kubeadm_upgrade_node() {
cluster_version="$(get_api_server_version_from_kubelet_kubeconfig)"
log "cluster/control-plane version visible from this node: $cluster_version"
log "target node version: $KUBERNETES_VERSION"
if ! version_eq "$cluster_version" "$KUBERNETES_VERSION"; then
fail "control-plane version ($cluster_version) does not match target ($KUBERNETES_VERSION); upgrade control-plane first"
fi
log "running kubeadm upgrade node..."
kubeadm upgrade node
}
check_prereqs() {
need_cmd kubeadm
need_cmd kubelet
@@ -289,23 +434,6 @@ validate_network_requirements() {
esac
}
setup_local_kubectl() {
kube_dir="${KUBECONFIG_USER_HOME}/.kube"
log "setting up local kubectl config in ${kube_dir}/config..."
mkdir -p "$kube_dir"
cp /etc/kubernetes/admin.conf "${kube_dir}/config"
chmod 600 "${kube_dir}/config"
if [ "$KUBECONFIG_USER_HOME" = "/root" ]; then
mkdir -p /etc/profile.d
cat > /etc/profile.d/kubeconfig.sh <<'EOF'
export KUBECONFIG=/root/.kube/config
EOF
chmod 644 /etc/profile.d/kubeconfig.sh
fi
}
wait_for_node() {
log "waiting for node registration: $NODE_NAME"
@@ -409,25 +537,40 @@ main() {
check_prereqs
validate_network_requirements
check_not_already_bootstrapped
decide_bootstrap_action
install_cni_if_requested
start_crio
check_crio_running
case "$BOOTSTRAP_MODE" in
case "$BOOTSTRAP_ACTION" in
init)
check_required_images
generate_kubeadm_config
run_kubeadm_init
rc-service kubelet restart
setup_local_kubectl
apply_local_node_metadata_if_possible
allow_single_node_scheduling
;;
upgrade-control-plane)
check_upgrade_prereqs
check_required_images
run_kubeadm_upgrade_apply
rc-service kubelet restart
apply_local_node_metadata_if_possible
allow_single_node_scheduling
;;
join)
run_kubeadm_join
;;
upgrade-node)
check_upgrade_prereqs
run_kubeadm_upgrade_node
rc-service kubelet restart
;;
*)
fail "unsupported BOOTSTRAP_ACTION: $BOOTSTRAP_ACTION"
;;
esac
print_next_steps