165 lines
5.0 KiB
Bash
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 ===="
|