More kmods for kubelet
This commit is contained in:
@@ -46,5 +46,12 @@ mkdir -p /etc/kubernetes/manifests
|
||||
mkdir -p /run/crun
|
||||
mkdir -p /run/runc
|
||||
|
||||
# Kubernetes legacy things that need to exists but have no use for us
|
||||
mkdir -p /usr/libexec/kubernetes/kubelet-plugins/volume/exec
|
||||
chmod 0755 /usr/libexec/kubernetes \
|
||||
/usr/libexec/kubernetes/kubelet-plugins \
|
||||
/usr/libexec/kubernetes/kubelet-plugins/volume \
|
||||
/usr/libexec/kubernetes/kubelet-plugins/volume/exec
|
||||
|
||||
touch /var/log/crio/crio.log
|
||||
touch /var/log/crio/kubelet.log
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 $?
|
||||
}
|
||||
|
||||
@@ -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
0
alpine/rootfs-extra/opt/scripts/apply-node-config.sh
Normal file → Executable 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
|
||||
|
||||
Reference in New Issue
Block a user