Files
CK-X/kind-cluster/scripts/env-setup
2025-12-02 08:38:16 +05:30

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