Label worker nodes before Prometheus migration
Homelab Main / deploy (push) Successful in 1m30s
Details
Homelab Main / deploy (push) Successful in 1m30s
Details
This commit is contained in:
parent
b0a2c44bbb
commit
89fa756305
|
|
@ -210,6 +210,8 @@ duplicate those PV manifests when you want storage on another node.
|
||||||
|
|
||||||
`bootstrap/cluster` labels nodes with homelab placement metadata:
|
`bootstrap/cluster` labels nodes with homelab placement metadata:
|
||||||
|
|
||||||
|
- `node-role.kubernetes.io/worker=worker` on every worker so `kubectl get nodes`
|
||||||
|
shows `worker` instead of `<none>` in the ROLES column
|
||||||
- `homelab.dev/node-role=control-plane` and `homelab.dev/storage=local` on the
|
- `homelab.dev/node-role=control-plane` and `homelab.dev/storage=local` on the
|
||||||
Debian control plane
|
Debian control plane
|
||||||
- `homelab.dev/node-role=edge-app` and `homelab.dev/storage=local` on the
|
- `homelab.dev/node-role=edge-app` and `homelab.dev/storage=local` on the
|
||||||
|
|
@ -230,9 +232,9 @@ default `prometheus_stack_node_selector` (`homelab.dev/node-role=app` and
|
||||||
`homelab.dev/storage=nvme`). Because the Prometheus, Alertmanager, and Grafana
|
`homelab.dev/storage=nvme`). Because the Prometheus, Alertmanager, and Grafana
|
||||||
PVCs use retained local OpenEBS volumes, moving an existing install off the
|
PVCs use retained local OpenEBS volumes, moving an existing install off the
|
||||||
Debian control plane requires discarding those PVCs. Run
|
Debian control plane requires discarding those PVCs. Run
|
||||||
`./lab.sh move-prometheus-stack-workers` from the Debian host to destroy only
|
`./lab.sh move-prometheus-stack-workers` from the Debian host to label existing
|
||||||
the existing `prometheus-stack` Helm release, delete its retained PVC/PV objects,
|
worker nodes, destroy only the existing `prometheus-stack` Helm release, delete
|
||||||
and recreate the stack on the worker selector.
|
its retained PVC/PV objects, and recreate the stack on the worker selector.
|
||||||
|
|
||||||
The website and demos NodePorts are reachable from the OCI jump box through the
|
The website and demos NodePorts are reachable from the OCI jump box through the
|
||||||
Raspberry Pi Tailscale interface. `bootstrap/cluster` installs a persistent
|
Raspberry Pi Tailscale interface. `bootstrap/cluster` installs a persistent
|
||||||
|
|
|
||||||
48
lab.sh
48
lab.sh
|
|
@ -174,6 +174,49 @@ adopt_apps_existing_resources() {
|
||||||
"demos-static"
|
"demos-static"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ensure_homelab_node_labels() {
|
||||||
|
local control_plane_node="${LAB_CONTROL_PLANE_NODE_NAME:-debian}"
|
||||||
|
local raspberry_node="${LAB_RASPBERRY_NODE_NAME:-raspberry}"
|
||||||
|
local prometheus_selector="homelab.dev/node-role=app,homelab.dev/storage=nvme"
|
||||||
|
local node
|
||||||
|
local target_nodes
|
||||||
|
|
||||||
|
echo "Applying homelab labels to existing Kubernetes nodes..."
|
||||||
|
while IFS= read -r node; do
|
||||||
|
[[ -n "${node}" ]] || continue
|
||||||
|
|
||||||
|
if [[ "${node}" == "${control_plane_node}" ]]; then
|
||||||
|
kubectl --kubeconfig "${KUBECONFIG_PATH}" label node "${node}" \
|
||||||
|
homelab.dev/node-role=control-plane \
|
||||||
|
homelab.dev/storage=local \
|
||||||
|
--overwrite
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
kubectl --kubeconfig "${KUBECONFIG_PATH}" label node "${node}" \
|
||||||
|
node-role.kubernetes.io/worker=worker \
|
||||||
|
--overwrite
|
||||||
|
|
||||||
|
if [[ "${node}" == pimox-worker-* ]]; then
|
||||||
|
kubectl --kubeconfig "${KUBECONFIG_PATH}" label node "${node}" \
|
||||||
|
homelab.dev/node-role=app \
|
||||||
|
homelab.dev/storage=nvme \
|
||||||
|
--overwrite
|
||||||
|
elif [[ "${node}" == "${raspberry_node}" ]]; then
|
||||||
|
kubectl --kubeconfig "${KUBECONFIG_PATH}" label node "${node}" \
|
||||||
|
homelab.dev/node-role=edge-app \
|
||||||
|
homelab.dev/storage=local \
|
||||||
|
--overwrite
|
||||||
|
fi
|
||||||
|
done < <(kubectl --kubeconfig "${KUBECONFIG_PATH}" get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}')
|
||||||
|
|
||||||
|
target_nodes="$(kubectl --kubeconfig "${KUBECONFIG_PATH}" get nodes -l "${prometheus_selector}" -o name)"
|
||||||
|
if [[ -z "${target_nodes}" ]]; then
|
||||||
|
echo "No nodes match ${prometheus_selector}; refusing to move prometheus-stack." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
delete_prometheus_stack_storage() {
|
delete_prometheus_stack_storage() {
|
||||||
local namespace="${1:-monitoring}"
|
local namespace="${1:-monitoring}"
|
||||||
local pattern='(^|-)prometheus-stack-(prometheus|alertmanager|grafana)(-|$)|^prometheus-prometheus-stack|^alertmanager-prometheus-stack|^storage-prometheus-stack-grafana'
|
local pattern='(^|-)prometheus-stack-(prometheus|alertmanager|grafana)(-|$)|^prometheus-prometheus-stack|^alertmanager-prometheus-stack|^storage-prometheus-stack-grafana'
|
||||||
|
|
@ -227,6 +270,7 @@ move_prometheus_stack_workers() {
|
||||||
export KUBECONFIG="${TF_VAR_kubeconfig_path}"
|
export KUBECONFIG="${TF_VAR_kubeconfig_path}"
|
||||||
|
|
||||||
echo "Moving prometheus-stack off the control plane. Existing prometheus-stack PVC data will be deleted."
|
echo "Moving prometheus-stack off the control plane. Existing prometheus-stack PVC data will be deleted."
|
||||||
|
ensure_homelab_node_labels
|
||||||
tofu -chdir="${REPO_ROOT}/${stack}" init
|
tofu -chdir="${REPO_ROOT}/${stack}" init
|
||||||
adopt_platform_existing_resources
|
adopt_platform_existing_resources
|
||||||
tofu -chdir="${REPO_ROOT}/${stack}" destroy -target=helm_release.prometheus_stack -auto-approve
|
tofu -chdir="${REPO_ROOT}/${stack}" destroy -target=helm_release.prometheus_stack -auto-approve
|
||||||
|
|
@ -647,8 +691,8 @@ write_cluster_worker_var_file() {
|
||||||
LAB_RASPBERRY_USER="${LAB_RASPBERRY_USER:-jv}" \
|
LAB_RASPBERRY_USER="${LAB_RASPBERRY_USER:-jv}" \
|
||||||
LAB_RASPBERRY_NODE_NAME="${LAB_RASPBERRY_NODE_NAME:-raspberry}" \
|
LAB_RASPBERRY_NODE_NAME="${LAB_RASPBERRY_NODE_NAME:-raspberry}" \
|
||||||
LAB_RASPBERRY_SSH_KEY_PATH="${LAB_RASPBERRY_SSH_KEY_PATH:-/home/jv/.ssh/id_ed25519}" \
|
LAB_RASPBERRY_SSH_KEY_PATH="${LAB_RASPBERRY_SSH_KEY_PATH:-/home/jv/.ssh/id_ed25519}" \
|
||||||
LAB_RASPBERRY_NODE_LABELS_JSON="${LAB_RASPBERRY_NODE_LABELS_JSON:-{\"homelab.dev/node-role\":\"edge-app\",\"homelab.dev/storage\":\"local\"}}" \
|
LAB_RASPBERRY_NODE_LABELS_JSON="${LAB_RASPBERRY_NODE_LABELS_JSON:-{\"node-role.kubernetes.io/worker\":\"worker\",\"homelab.dev/node-role\":\"edge-app\",\"homelab.dev/storage\":\"local\"}}" \
|
||||||
LAB_PIMOX_WORKER_NODE_LABELS_JSON="${LAB_PIMOX_WORKER_NODE_LABELS_JSON:-{\"homelab.dev/node-role\":\"app\",\"homelab.dev/storage\":\"nvme\"}}" \
|
LAB_PIMOX_WORKER_NODE_LABELS_JSON="${LAB_PIMOX_WORKER_NODE_LABELS_JSON:-{\"node-role.kubernetes.io/worker\":\"worker\",\"homelab.dev/node-role\":\"app\",\"homelab.dev/storage\":\"nvme\"}}" \
|
||||||
python3 - "${spec_file}" "${var_file}" <<'PY'
|
python3 - "${spec_file}" "${var_file}" <<'PY'
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue