Files
italiadatacenter/add-on/install_edgenode.sh
alessandro 20d506407a primo
2026-07-17 09:42:52 +02:00

165 lines
5.0 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
# Configurazione (override con variabili d'ambiente prima di eseguire lo script)
KUBEEDGE_VERSION="${KUBEEDGE_VERSION:-v1.22.0}"
CLOUD_MASTER_IP="${CLOUD_MASTER_IP:-89.105.78.161}"
EDGE_NODE_NAME="${EDGE_NODE_NAME:-edge-node-02}"
KUBEEDGE_TOKEN="${KUBEEDGE_TOKEN:-26477f03e3d0209870acdf724478f1d875e1328f8ea3408d74f3d7d109ad02be.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NzQ5OTI1NzB9.YxfikSixBrX7bvQxgxXYpbwLJHg0SAQ9mQ7kblBWQrk}"
CONTAINERD_VERSION="1.6.14"
RUNC_VERSION="1.1.3"
CNI_VERSION="1.1.1"
echo "==== EDGE NODE INSTALL START ===="
echo "KUBEEDGE_VERSION=${KUBEEDGE_VERSION}"
echo "CLOUD_MASTER_IP=${CLOUD_MASTER_IP}"
echo "EDGE_NODE_NAME=${EDGE_NODE_NAME}"
echo "KUBEEDGE_TOKEN=${KUBEEDGE_TOKEN}"
if ! command -v sudo >/dev/null 2>&1; then
echo "Errore: sudo non trovato"
exit 1
fi
TMP_DIR="$(mktemp -d)"
trap 'rm -rf "${TMP_DIR}"' EXIT
echo "[1/8] Download e installazione containerd ${CONTAINERD_VERSION}"
cd "${TMP_DIR}"
wget -q "https://github.com/containerd/containerd/releases/download/v${CONTAINERD_VERSION}/containerd-${CONTAINERD_VERSION}-linux-amd64.tar.gz"
sudo tar Cxzvf /usr/local "containerd-${CONTAINERD_VERSION}-linux-amd64.tar.gz"
echo "[2/8] Download e installazione runc ${RUNC_VERSION}"
wget -q "https://github.com/opencontainers/runc/releases/download/v${RUNC_VERSION}/runc.amd64"
sudo install -m 755 runc.amd64 /usr/local/sbin/runc
echo "[3/8] Download e installazione CNI plugins ${CNI_VERSION}"
wget -q "https://github.com/containernetworking/plugins/releases/download/v${CNI_VERSION}/cni-plugins-linux-amd64-v${CNI_VERSION}.tgz"
sudo mkdir -p /opt/cni/bin
sudo tar Cxzvf /opt/cni/bin "cni-plugins-linux-amd64-v${CNI_VERSION}.tgz"
echo "[4/8] Configurazione containerd"
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null
sudo sed -i '/SystemdCgroup = true/d' /etc/containerd/config.toml
sudo curl -fsSL https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -o /etc/systemd/system/containerd.service
echo "[5/8] Configurazione rete CNI"
sudo mkdir -p /etc/cni/net.d
cat <<'EOF' | sudo tee /etc/cni/net.d/10-containerd-net.conflist >/dev/null
{
"cniVersion": "1.0.0",
"name": "containerd-net",
"plugins": [
{
"type": "bridge",
"bridge": "cni0",
"isGateway": true,
"ipMasq": true,
"promiscMode": true,
"ipam": {
"type": "host-local",
"ranges": [
[{
"subnet": "10.88.0.0/16"
}],
[{
"subnet": "2001:db8:4860::/64"
}]
],
"routes": [
{ "dst": "0.0.0.0/0" },
{ "dst": "::/0" }
]
}
},
{
"type": "portmap",
"capabilities": {"portMappings": true}
}
]
}
EOF
echo "[6/8] Avvio e abilitazione containerd"
sudo systemctl daemon-reload
sudo systemctl enable --now containerd
echo "[7/8] Installazione keadm ${KUBEEDGE_VERSION}"
cd "${TMP_DIR}"
curl -fsSL "https://github.com/kubeedge/kubeedge/releases/download/${KUBEEDGE_VERSION}/keadm-${KUBEEDGE_VERSION}-linux-amd64.tar.gz" | tar -xz
sudo mv "keadm-${KUBEEDGE_VERSION}-linux-amd64/keadm/keadm" /usr/local/bin/
echo "[8/8] Join edge node al cloud master"
sudo keadm join \
--cloudcore-ipport="${CLOUD_MASTER_IP}:10000" \
--edgenode-name="${EDGE_NODE_NAME}" \
--token="${KUBEEDGE_TOKEN}" \
--kubeedge-version="${KUBEEDGE_VERSION}"
echo "Creazione script di cleanup edge"
cat <<'EOF' | sudo tee /usr/local/bin/edge-cleanup.sh >/dev/null
#!/usr/bin/env bash
set -euo pipefail
echo "==== EDGE NODE CLEANUP START ===="
echo "Timestamp: $(date)"
echo "[1] Checking orphan processes..."
ORPHANS=$(ps -eo pid,ppid,cmd | awk '$2 == 1 {print $1}')
for PID in ${ORPHANS}; do
if [ "${PID}" != "1" ]; then
echo "Killing orphan PID: ${PID}"
kill -9 "${PID}" 2>/dev/null || true
fi
done
echo "[2] Cleaning containerd..."
if command -v crictl >/dev/null 2>&1; then
crictl ps -a --state Exited -q | xargs -r crictl rm || true
crictl pods --state NotReady -q | xargs -r crictl rmp || true
crictl rmi --prune || true
else
echo "crictl not found, skipping..."
fi
echo "[3] Restarting containerd..."
systemctl restart containerd || true
echo "[4] Cleaning kubelet state (soft)..."
find /var/lib/kubelet/pods -mindepth 1 -maxdepth 1 -type d -mtime +1 -exec rm -rf {} + || true
echo "[5] Restarting kubelet + edgecore..."
systemctl restart kubelet || true
systemctl restart edgecore || true
echo "[6] Checking MQTT port..."
ss -tulnp | grep 1883 || echo "WARNING: Mosquitto not listening"
echo "==== EDGE NODE CLEANUP DONE ===="
EOF
sudo chmod +x /usr/local/bin/edge-cleanup.sh
echo "Creazione service systemd edge-cleanup"
cat <<'EOF' | sudo tee /etc/systemd/system/edge-cleanup.service >/dev/null
[Unit]
Description=Edge Node Cleanup
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/edge-cleanup.sh
RemainAfterExit=true
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable edge-cleanup
echo "==== EDGE NODE INSTALL DONE ===="