223 lines
6.6 KiB
Bash
223 lines
6.6 KiB
Bash
|
|
#!/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}"
|