You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

75 lines
2.4 KiB

  1. #!/bin/bash
  2. set -e
  3. # 1. 關閉 swap
  4. sudo swapoff -a
  5. sudo sed -i '/ swap / s/^/#/' /etc/fstab
  6. # 2. 啟用橋接網路所需 kernel module + ip forward
  7. cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
  8. overlay
  9. br_netfilter
  10. EOF
  11. sudo modprobe overlay
  12. sudo modprobe br_netfilter
  13. cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
  14. net.bridge.bridge-nf-call-iptables = 1
  15. net.bridge.bridge-nf-call-ip6tables = 1
  16. net.ipv4.ip_forward = 1
  17. EOF
  18. sudo sysctl --system
  19. # 3. 安裝 containerd
  20. sudo apt-get update
  21. sudo apt-get install -y containerd
  22. sudo mkdir -p /etc/containerd
  23. sudo containerd config default | sudo tee /etc/containerd/config.toml
  24. sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
  25. sudo systemctl restart containerd
  26. sudo systemctl enable containerd
  27. # 4. 安裝 kubeadm, kubelet, kubectl
  28. sudo apt-get update
  29. sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
  30. sudo mkdir -p /etc/apt/keyrings
  31. curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
  32. echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | \
  33. sudo tee /etc/apt/sources.list.d/kubernetes.list
  34. sudo apt-get update
  35. sudo apt-get install -y kubelet kubeadm kubectl
  36. sudo apt-mark hold kubelet kubeadm kubectl
  37. sudo systemctl enable kubelet
  38. # 取得本機 IP (排除 localhost / lo / IPv6) - 你可能需要根據網卡名稱調整
  39. MY_IP=$(ip addr show | grep -E 'inet [0-9]' | grep -v '127.0.0.1' | grep -v 'inet6' | awk '{print $2}' | cut -d/ -f1 | head -n1)
  40. echo "Detected local IP: $MY_IP"
  41. # 5. master 初始化 (只在 master node 執行)
  42. sudo kubeadm init \
  43. --control-plane-endpoint "10.10.0.83:6444" \
  44. --apiserver-advertise-address=${MY_IP} \
  45. --upload-certs \
  46. --pod-network-cidr=10.244.0.0/16
  47. # 6. 設定 kubeconfig(使 kubectl 可用)
  48. mkdir -p $HOME/.kube
  49. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  50. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  51. # 7. 等待 kube-apiserver + core components 啟動 (簡單 polling)
  52. echo "等待 kube-apiserver 啟動..."
  53. until kubectl get componentstatuses > /dev/null 2>&1; do
  54. echo " 尚未 ready,等待 5 秒..."
  55. sleep 5
  56. done
  57. # 8. 安裝 Flannel CNI (Pod network)
  58. kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  59. echo "=== 安裝 containerd + kubeadm/kubelet/kubectl + 初始化 master + 安裝 Flannel 完成 ==="