diff --git a/deployment/crs-architecture.sh b/deployment/crs-architecture.sh index 8d47d5da..ad553433 100755 --- a/deployment/crs-architecture.sh +++ b/deployment/crs-architecture.sh @@ -87,7 +87,46 @@ up() { ;; *) echo -e "${BLU}Deploying minikube cluster${NC}" - minikube status | grep -q "Running" || minikube start --force --extra-config=kubeadm.skip-phases=preflight --cpus=8 --memory=32g --disk-size=80g --driver=docker --kubernetes-version=stable + + # Detect Docker-available resources and adjust minikube parameters + echo -e "${BLU}Getting Docker system information...${NC}" + if ! docker system info > /dev/null 2>&1; then + echo -e "${RED}Error: Docker is not running or not accessible${NC}" + echo -e "${RED}Please ensure Docker is installed and running${NC}" + exit 1 + fi + + DOCKER_INFO=$(docker system info --format "{{.NCPU}},{{.MemTotal}}") + AVAILABLE_CPUS=$(echo "$DOCKER_INFO" | cut -d',' -f1) + AVAILABLE_MEMORY_BYTES=$(echo "$DOCKER_INFO" | cut -d',' -f2) + AVAILABLE_MEMORY_MB=$((AVAILABLE_MEMORY_BYTES / 1024 / 1024)) + + # Calculate safe limits (leave 25% for system) + MINIKUBE_CPUS=$((AVAILABLE_CPUS > 7 ? 8 : AVAILABLE_CPUS > 4 ? AVAILABLE_CPUS - 1 : AVAILABLE_CPUS)) + MINIKUBE_MEMORY_MB=$((AVAILABLE_MEMORY_MB * 75 / 100)) + + # Check if system meets minimum requirements + if [ "$AVAILABLE_CPUS" -lt 5 ]; then + echo -e "${RED}Error: System has only ${AVAILABLE_CPUS} CPU(s), but Buttercup requires at least 5 CPUs${NC}" + echo -e "${RED}Please use a machine with more CPU cores${NC}" + exit 1 + fi + + AVAILABLE_MEMORY_GB=$((AVAILABLE_MEMORY_MB / 1024)) + if [ "$AVAILABLE_MEMORY_MB" -lt 10240 ]; then # Need 10GB dedicated to k8s cluster for Buttercup components + echo -e "${RED}Error: System has only ${AVAILABLE_MEMORY_GB}GB RAM, but Buttercup requires at least 10GB${NC}" + echo -e "${RED}Please use a machine with more memory${NC}" + exit 1 + fi + + + MINIKUBE_MEMORY_GB=$((MINIKUBE_MEMORY_MB / 1024)) + + echo -e "${GRN}Docker-available resources: ${AVAILABLE_CPUS} CPUs, ${AVAILABLE_MEMORY_GB}GB RAM${NC}" + echo -e "${GRN}Minikube will use: ${MINIKUBE_CPUS} CPUs, ${MINIKUBE_MEMORY_GB}GB RAM${NC}" + echo -e "${BLU}Note: Recommended minimum is at least 5 CPUs and 10GB RAM${NC}" + + minikube status | grep -q "Running" || minikube start --force --extra-config=kubeadm.skip-phases=preflight --cpus=${MINIKUBE_CPUS} --memory=${MINIKUBE_MEMORY_MB}mb --disk-size=80g --driver=docker --kubernetes-version=stable echo -e "${GRN}Minikube cluster status:${NC}" minikube status