socktop-webterm/kubernetes/setup-kubectl.sh

223 lines
6.6 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${GREEN}=== kubectl Configuration Setup for k3s ===${NC}"
echo ""
echo "This script will help you configure kubectl to connect to your k3s cluster."
echo ""
# Check if kubectl is installed
if ! command -v kubectl &> /dev/null; then
echo -e "${RED}Error: kubectl is not installed${NC}"
echo ""
echo "Install kubectl first:"
echo " https://kubernetes.io/docs/tasks/tools/"
exit 1
fi
echo -e "${GREEN}✓ kubectl is installed${NC}"
echo ""
# Ask for k3s server details
echo -e "${YELLOW}Step 1: k3s Server Information${NC}"
echo ""
read -p "Enter k3s server IP address: " K3S_SERVER_IP
if [ -z "$K3S_SERVER_IP" ]; then
echo -e "${RED}Error: Server IP cannot be empty${NC}"
exit 1
fi
read -p "Enter SSH username for k3s server (default: ubuntu): " SSH_USER
SSH_USER=${SSH_USER:-ubuntu}
echo ""
echo -e "${YELLOW}Step 2: Retrieving kubeconfig from k3s server${NC}"
echo ""
# Check if we can SSH to the server
if ! ssh -q -o ConnectTimeout=5 -o BatchMode=yes ${SSH_USER}@${K3S_SERVER_IP} exit 2>/dev/null; then
echo -e "${YELLOW}⚠ Cannot SSH with key-based auth to ${SSH_USER}@${K3S_SERVER_IP}${NC}"
echo -e "${YELLOW} You may need to enter password...${NC}"
echo ""
fi
# Get the kubeconfig from k3s server
echo "Fetching kubeconfig from k3s server..."
KUBECONFIG_CONTENT=$(ssh ${SSH_USER}@${K3S_SERVER_IP} "sudo cat /etc/rancher/k3s/k3s.yaml" 2>/dev/null)
if [ $? -ne 0 ]; then
echo -e "${RED}✗ Failed to retrieve kubeconfig from server${NC}"
echo ""
echo "Please check:"
echo " - SSH access to ${K3S_SERVER_IP}"
echo " - k3s is installed on the server"
echo " - You have sudo access"
exit 1
fi
echo -e "${GREEN}✓ Retrieved kubeconfig from server${NC}"
echo ""
# Modify the server IP in the kubeconfig
echo "Modifying server IP from 127.0.0.1 to ${K3S_SERVER_IP}..."
MODIFIED_KUBECONFIG=$(echo "$KUBECONFIG_CONTENT" | sed "s|server: https://127.0.0.1:6443|server: https://${K3S_SERVER_IP}:6443|g")
echo -e "${GREEN}✓ Server IP updated${NC}"
echo ""
# Ask where to save the config
echo -e "${YELLOW}Step 3: Save Configuration${NC}"
echo ""
echo "Choose how to save the kubeconfig:"
echo " 1) Replace ~/.kube/config (WARNING: This will overwrite existing config!)"
echo " 2) Save as ~/.kube/config-k3s (separate file, safer)"
echo " 3) Merge with existing ~/.kube/config (recommended if you have other clusters)"
echo ""
read -p "Enter choice (1/2/3, default: 2): " SAVE_CHOICE
SAVE_CHOICE=${SAVE_CHOICE:-2}
case $SAVE_CHOICE in
1)
# Replace existing config
mkdir -p ~/.kube
# Backup existing config if it exists
if [ -f ~/.kube/config ]; then
BACKUP_FILE=~/.kube/config.backup.$(date +%Y%m%d-%H%M%S)
echo "Backing up existing config to $BACKUP_FILE"
cp ~/.kube/config "$BACKUP_FILE"
fi
echo "$MODIFIED_KUBECONFIG" > ~/.kube/config
chmod 600 ~/.kube/config
echo -e "${GREEN}✓ Saved to ~/.kube/config${NC}"
KUBECONFIG_PATH="~/.kube/config"
;;
2)
# Save as separate file
mkdir -p ~/.kube
echo "$MODIFIED_KUBECONFIG" > ~/.kube/config-k3s
chmod 600 ~/.kube/config-k3s
echo -e "${GREEN}✓ Saved to ~/.kube/config-k3s${NC}"
echo ""
echo "To use this config, run:"
echo -e " ${YELLOW}export KUBECONFIG=~/.kube/config-k3s${NC}"
echo ""
echo "Or add to your shell profile (~/.bashrc, ~/.zshrc, ~/.config/fish/config.fish):"
echo -e " ${YELLOW}export KUBECONFIG=~/.kube/config-k3s${NC}"
KUBECONFIG_PATH="~/.kube/config-k3s"
export KUBECONFIG=~/.kube/config-k3s
;;
3)
# Merge with existing config
mkdir -p ~/.kube
if [ ! -f ~/.kube/config ]; then
echo "No existing config found, creating new one..."
echo "$MODIFIED_KUBECONFIG" > ~/.kube/config
chmod 600 ~/.kube/config
echo -e "${GREEN}✓ Saved to ~/.kube/config${NC}"
else
echo "Merging with existing config..."
# Save k3s config to temp file
echo "$MODIFIED_KUBECONFIG" > /tmp/k3s-config.yaml
# Backup existing config
BACKUP_FILE=~/.kube/config.backup.$(date +%Y%m%d-%H%M%S)
echo "Backing up existing config to $BACKUP_FILE"
cp ~/.kube/config "$BACKUP_FILE"
# Merge configs
KUBECONFIG=~/.kube/config:/tmp/k3s-config.yaml kubectl config view --flatten > /tmp/config-merged.yaml
# Replace original config
mv /tmp/config-merged.yaml ~/.kube/config
chmod 600 ~/.kube/config
# Clean up
rm /tmp/k3s-config.yaml
echo -e "${GREEN}✓ Merged and saved to ~/.kube/config${NC}"
fi
KUBECONFIG_PATH="~/.kube/config"
;;
*)
echo -e "${RED}Invalid choice${NC}"
exit 1
;;
esac
echo ""
echo -e "${YELLOW}Step 4: Testing Connection${NC}"
echo ""
# Test the connection
if kubectl cluster-info &> /dev/null; then
echo -e "${GREEN}✓ Successfully connected to k3s cluster!${NC}"
echo ""
# Show cluster info
echo -e "${BLUE}Cluster Information:${NC}"
kubectl cluster-info
echo ""
# Show nodes
echo -e "${BLUE}Nodes:${NC}"
kubectl get nodes
echo ""
# Show contexts
echo -e "${BLUE}Available Contexts:${NC}"
kubectl config get-contexts
echo ""
else
echo -e "${RED}✗ Failed to connect to k3s cluster${NC}"
echo ""
echo "Troubleshooting:"
echo " - Verify k3s server IP: ${K3S_SERVER_IP}"
echo " - Check if port 6443 is accessible"
echo " - Test with: nc -zv ${K3S_SERVER_IP} 6443"
exit 1
fi
echo -e "${GREEN}=== Setup Complete! ===${NC}"
echo ""
echo "Your kubectl is now configured to connect to k3s at ${K3S_SERVER_IP}"
echo ""
echo "Useful commands:"
echo -e " ${BLUE}kubectl get nodes${NC} - List cluster nodes"
echo -e " ${BLUE}kubectl get pods --all-namespaces${NC} - List all pods"
echo -e " ${BLUE}kubectl config get-contexts${NC} - View available contexts"
echo -e " ${BLUE}kubectl config current-context${NC} - View current context"
echo ""
if [ "$SAVE_CHOICE" = "2" ]; then
echo "Remember to set KUBECONFIG environment variable:"
echo -e " ${YELLOW}export KUBECONFIG=~/.kube/config-k3s${NC}"
echo ""
fi
echo "Next steps:"
echo " 1. Run: cd kubernetes"
echo " 2. Run: ./setup-registry.sh (configure registry on all nodes)"
echo " 3. Run: ./deploy.sh (deploy Socktop WebTerm)"
echo ""
echo -e "${GREEN}Done!${NC}"