mirror of
https://github.com/sailor-sh/CK-X.git
synced 2026-05-23 17:02:53 +00:00
123 lines
4.2 KiB
Bash
Executable File
123 lines
4.2 KiB
Bash
Executable File
#!/bin/sh
|
|
exec >> /proc/1/fd/1 2>&1
|
|
# ===============================================================================
|
|
# K3D Cluster Creation
|
|
# this script access the parametter i.e num of nodes i.e NUM_WORKERS
|
|
# example command to run this script ./setup.sh 3 cluster1
|
|
# ===============================================================================
|
|
|
|
NUM_WORKERS=${1:-0} # Default to 1 worker if not provided
|
|
CLUSTER_NAME=${2:-cluster}
|
|
|
|
# Check if k3d is installed, if not install it
|
|
if ! command -v k3d &> /dev/null; then
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') | k3d not found. Attempting installation..."
|
|
|
|
# Retry k3d installation up to 5 times
|
|
INSTALL_ATTEMPTS=0
|
|
while [ $INSTALL_ATTEMPTS -lt 99999 ]; do
|
|
INSTALL_ATTEMPTS=$((INSTALL_ATTEMPTS+1))
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') | Installation attempt $INSTALL_ATTEMPTS"
|
|
|
|
# Use the same installation method as in entrypoint.sh
|
|
TAG=v5.8.3 bash /usr/local/bin/k3d-install.sh
|
|
|
|
# Check if installation was successful
|
|
if command -v k3d &> /dev/null; then
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') | k3d successfully installed"
|
|
break
|
|
else
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') | k3d installation failed. Retrying in 10 seconds..."
|
|
sleep 10
|
|
fi
|
|
done
|
|
|
|
# If k3d still not installed after 5 attempts, exit with error
|
|
if ! command -v k3d &> /dev/null; then
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') | ERROR: Failed to install k3d after 5 attempts"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
|
|
# Delete cluster config if exists
|
|
if [ -f "k3d-config.yaml" ]; then
|
|
echo "k3d-config.yaml already exists, deleting it"
|
|
rm -f k3d-config.yaml
|
|
fi
|
|
|
|
# Generate K3d config
|
|
cat <<EOF > /tmp/k3d-config.yaml
|
|
apiVersion: k3d.io/v1alpha5
|
|
kind: Simple
|
|
metadata:
|
|
name: $CLUSTER_NAME
|
|
servers: 1
|
|
agents: $NUM_WORKERS
|
|
kubeAPI:
|
|
host: "127.0.0.1"
|
|
hostPort: "6443"
|
|
options:
|
|
k3s:
|
|
extraArgs:
|
|
- arg: "--tls-san=k8s-api-server"
|
|
nodeFilters:
|
|
- server:*
|
|
- arg: "--tls-san=127.0.0.1"
|
|
nodeFilters:
|
|
- server:*
|
|
- arg: "--tls-san=localhost"
|
|
nodeFilters:
|
|
- server:*
|
|
EOF
|
|
|
|
echo "Cluster config with $NUM_WORKERS worker nodes generated: /tmp/k3d-config.yaml"
|
|
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') | Creating K3d cluster with configuration..."
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') | ├── Name: $CLUSTER_NAME"
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') | ├── Config: /tmp/k3d-config.yaml"
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') | └── Number of nodes: $((NUM_WORKERS + 1)) (1 server + $NUM_WORKERS agents)"
|
|
|
|
# Create k3d cluster
|
|
k3d cluster create --config /tmp/k3d-config.yaml
|
|
|
|
# ===============================================================================
|
|
# Cluster Readiness Check
|
|
# ===============================================================================
|
|
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') | Verifying cluster status..."
|
|
CLUSTER_CHECK_COUNT=0
|
|
|
|
# Wait for k3d cluster to be ready
|
|
while ! k3d cluster list | grep -q "$CLUSTER_NAME"; do
|
|
CLUSTER_CHECK_COUNT=$((CLUSTER_CHECK_COUNT+1))
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') | [WAITING] K3d cluster '$CLUSTER_NAME' not ready yet... (attempt $CLUSTER_CHECK_COUNT)"
|
|
sleep 5
|
|
done
|
|
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') | ✅ K3d cluster '$CLUSTER_NAME' is up and running!"
|
|
|
|
# ===============================================================================
|
|
# Setup Complete
|
|
# ===============================================================================
|
|
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') | Docker and KIND environment is ready for use"
|
|
|
|
k3d kubeconfig get $CLUSTER_NAME > /home/candidate/.kube/kubeconfig
|
|
echo "Kubeconfig file created: /home/candidate/.kube/kubeconfig"
|
|
|
|
# Save kubeconfig and set API server address
|
|
sed -i 's|server: https://127\.0\.0\.1:\([0-9]*\)|server: https://k8s-api-server:\1|' /home/candidate/.kube/kubeconfig
|
|
|
|
echo "Kubeconfig file content:"
|
|
cat /home/candidate/.kube/kubeconfig
|
|
|
|
export KUBECONFIG=/home/candidate/.kube/kubeconfig
|
|
|
|
#info on config file setup done
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') | Config file setup done"
|
|
|
|
#info on cluster setup done
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') | Cluster setup done"
|
|
|
|
exit 0 |