Add K3s agent setup with NVMe-backed persistent storage
Bind-mount K3s agent data, node identity, and kubelet dirs from NVMe so container image cache and node registration survive reboots on the diskless netboot nodes. Includes K3s binary download, agent systemd service, DHCP hostname resolution, and open-iscsi for Longhorn iSCSI support.
This commit is contained in:
@@ -69,12 +69,50 @@ mount_storage() {
|
||||
}
|
||||
fi
|
||||
|
||||
# K3s persistence: bind mount agent data and node identity from NVMe
|
||||
# This allows the node to survive reboots without re-registering
|
||||
setup_k3s_persistence
|
||||
|
||||
log "Storage mounted:"
|
||||
log " $CONTAINERD_MOUNT: $(df -h "$CONTAINERD_MOUNT" | tail -1 | awk '{print $2}')"
|
||||
log " $LONGHORN_MOUNT: $(df -h "$LONGHORN_MOUNT" | tail -1 | awk '{print $2}')"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Setup K3s persistence directories
|
||||
# Bind mounts NVMe directories to k3s paths so node identity survives reboots
|
||||
setup_k3s_persistence() {
|
||||
# K3s agent data (containerd, kubelet certs, etc.)
|
||||
# Uses overlayfs internally, so must be on real filesystem, not overlay
|
||||
K3S_AGENT="/var/lib/rancher/k3s/agent"
|
||||
K3S_AGENT_DATA="$CONTAINERD_MOUNT/k3s-agent"
|
||||
mkdir -p "$K3S_AGENT_DATA" "$K3S_AGENT"
|
||||
if ! mountpoint -q "$K3S_AGENT"; then
|
||||
mount --bind "$K3S_AGENT_DATA" "$K3S_AGENT"
|
||||
log " $K3S_AGENT: bind mount to NVMe"
|
||||
fi
|
||||
|
||||
# K3s node identity (password file)
|
||||
# Must persist across reboots or node will be rejected
|
||||
K3S_NODE="/etc/rancher/node"
|
||||
K3S_NODE_DATA="$CONTAINERD_MOUNT/k3s-node"
|
||||
mkdir -p "$K3S_NODE_DATA" "$K3S_NODE"
|
||||
if ! mountpoint -q "$K3S_NODE"; then
|
||||
mount --bind "$K3S_NODE_DATA" "$K3S_NODE"
|
||||
log " $K3S_NODE: bind mount to NVMe"
|
||||
fi
|
||||
|
||||
# Kubelet data (pod volumes, projected tokens, etc.)
|
||||
# Must be on NVMe so kubelet reports real disk capacity, not the 2G tmpfs overlay
|
||||
KUBELET_DIR="/var/lib/kubelet"
|
||||
KUBELET_DATA="$CONTAINERD_MOUNT/kubelet"
|
||||
mkdir -p "$KUBELET_DATA" "$KUBELET_DIR"
|
||||
if ! mountpoint -q "$KUBELET_DIR"; then
|
||||
mount --bind "$KUBELET_DATA" "$KUBELET_DIR"
|
||||
log " $KUBELET_DIR: bind mount to NVMe"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to format the drive
|
||||
format_storage() {
|
||||
log "Partitioning $DEVICE..."
|
||||
@@ -116,6 +154,9 @@ device=$DEVICE
|
||||
EOF
|
||||
done
|
||||
|
||||
# K3s persistence: bind mount agent data and node identity from NVMe
|
||||
setup_k3s_persistence
|
||||
|
||||
log "Storage formatted and mounted successfully"
|
||||
log " $CONTAINERD_MOUNT: $(df -h "$CONTAINERD_MOUNT" | tail -1 | awk '{print $2}')"
|
||||
log " $LONGHORN_MOUNT: $(df -h "$LONGHORN_MOUNT" | tail -1 | awk '{print $2}')"
|
||||
|
||||
Reference in New Issue
Block a user