|
- #!/bin/bash
- set -e
-
- # 1. 關閉 swap
- sudo swapoff -a
- sudo sed -i '/ swap / s/^/#/' /etc/fstab
-
- # 2. 啟用橋接網路所需 kernel module + ip forward
- cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
- overlay
- br_netfilter
- EOF
-
- sudo modprobe overlay
- sudo modprobe br_netfilter
-
- cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
- net.bridge.bridge-nf-call-iptables = 1
- net.bridge.bridge-nf-call-ip6tables = 1
- net.ipv4.ip_forward = 1
- EOF
-
- sudo sysctl --system
-
- # 3. 安裝 containerd
- sudo apt-get update
- sudo apt-get install -y containerd
-
- sudo mkdir -p /etc/containerd
- sudo containerd config default | sudo tee /etc/containerd/config.toml
- sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
- sudo systemctl restart containerd
- sudo systemctl enable containerd
-
- # 4. 安裝 kubeadm, kubelet, kubectl
- sudo apt-get update
- sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
- sudo mkdir -p /etc/apt/keyrings
- curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
-
- echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | \
- sudo tee /etc/apt/sources.list.d/kubernetes.list
-
- sudo apt-get update
- sudo apt-get install -y kubelet kubeadm kubectl
- sudo apt-mark hold kubelet kubeadm kubectl
- sudo systemctl enable kubelet
-
- # 取得本機 IP (排除 localhost / lo / IPv6) - 你可能需要根據網卡名稱調整
- 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)
- echo "Detected local IP: $MY_IP"
-
- # 5. master 初始化 (只在 master node 執行)
- sudo kubeadm init \
- --control-plane-endpoint "10.10.0.83:6444" \
- --apiserver-advertise-address=${MY_IP} \
- --upload-certs \
- --pod-network-cidr=10.244.0.0/16
-
- # 6. 設定 kubeconfig(使 kubectl 可用)
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
- # 7. 等待 kube-apiserver + core components 啟動 (簡單 polling)
- echo "等待 kube-apiserver 啟動..."
- until kubectl get componentstatuses > /dev/null 2>&1; do
- echo " 尚未 ready,等待 5 秒..."
- sleep 5
- done
-
- # 8. 安裝 Flannel CNI (Pod network)
- kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
-
- echo "=== 安裝 containerd + kubeadm/kubelet/kubectl + 初始化 master + 安裝 Flannel 完成 ==="
|