全自动部署k8s集群脚本:k8s-full-auto.sh
·
#!/bin/bash
set -e
# =============================================
# Ubuntu 24.04 + containerd + kubeadm v1.29
# 自动初始化 Master + 多 Node 加入 + Flannel + 等待 Ready
# =============================================
if [ "$EUID" -ne 0 ]; then
echo "请使用 root 用户运行脚本"
exit 1
fi
echo "==== Step 0: 输入集群信息 ===="
read -p "请输入 Master IP: " MASTER_IP
read -p "请输入 Node IP 列表(用空格分隔,自己排除 Master IP): " NODE_IPS
echo "==== Step 1: 关闭 swap ===="
swapoff -a
sed -i '/ swap / s/^/#/' /etc/fstab
echo "==== Step 2: 配置内核参数 ===="
modprobe overlay
modprobe br_netfilter
cat <<EOF >/etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sysctl --system
echo "==== Step 3: 安装 containerd ===="
apt update
apt install -y containerd curl apt-transport-https gnupg lsb-release
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sed -i 's#registry.k8s.io/pause:3.8#registry.aliyuncs.com/google_containers/pause:3.9#' /etc/containerd/config.toml
systemctl restart containerd
systemctl enable containerd
echo "==== Step 4: 安装 kubeadm/kubelet/kubectl ===="
mkdir -p /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/deb/Release.key \
| gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/deb/ /" \
| tee /etc/apt/sources.list.d/kubernetes.list
apt update
apt install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
echo "==== Step 5: 重置旧集群 ===="
kubeadm reset -f
rm -rf /etc/kubernetes /var/lib/etcd
echo "==== Step 6: 初始化 Master ===="
kubeadm init \
--apiserver-advertise-address=${MASTER_IP} \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.29.0 \
--pod-network-cidr=10.244.0.0/16
echo "==== Step 7: 配置 kubectl ===="
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
echo "==== Step 8: 拉 Flannel 镜像及其他镜像(加速 Node 启动) ===="
IMAGES=(kube-apiserver kube-controller-manager kube-scheduler kube-proxy pause etcd coredns flannel)
for img in "${IMAGES[@]}"; do
echo "拉取镜像: registry.aliyuncs.com/google_containers/$img:v1.29.0"
ctr image pull registry.aliyuncs.com/google_containers/$img:v1.29.0 || true
done
# 拉 Flannel 镜像
ctr image pull quay.io/coreos/flannel:v0.25.3 || true
echo "==== Step 9: 安装 Flannel 网络插件 ===="
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
echo "==== Step 10: 等待 kube-system Pod Running ===="
while true; do
NOTREADY=$(kubectl get pods -n kube-system --field-selector=status.phase!=Running 2>/dev/null | wc -l)
if [ "$NOTREADY" -eq 0 ]; then
echo "所有 kube-system Pod 已 Running"
break
else
echo "等待 Pod 启动中..."
sleep 5
fi
done
echo "==== Step 11: Node 自动加入 Master ===="
for NODE_IP in $NODE_IPS; do
echo "==== 处理 Node: $NODE_IP ===="
ssh root@$NODE_IP "bash -s" <<EOF
set -e
swapoff -a
sed -i '/ swap / s/^/#/' /etc/fstab
modprobe overlay
modprobe br_netfilter
cat <<EOC >/etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOC
sysctl --system
apt update
apt install -y containerd curl apt-transport-https gnupg lsb-release
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sed -i 's#registry.k8s.io/pause:3.8#registry.aliyuncs.com/google_containers/pause:3.9#' /etc/containerd/config.toml
systemctl restart containerd
systemctl enable containerd
mkdir -p /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list
apt update
apt install -y kubelet kubeadm
apt-mark hold kubelet kubeadm
kubeadm join $MASTER_IP:6443 --token $(kubeadm token create) --discovery-token-ca-cert-hash sha256:$(openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | sha256sum | awk '{print $1}')
EOF
done
echo "==== Step 12: 等待 Node Ready ===="
while true; do
NOTREADY=$(kubectl get nodes | grep -v Ready | grep -v NAME | wc -l)
if [ "$NOTREADY" -eq 0 ]; then
echo "所有 Node 已 Ready"
break
else
echo "等待 Node 启动中..."
sleep 5
fi
done
echo "==== Step 13: 集群部署完成 ===="
kubectl get nodes
kubectl get pods -A
更多推荐


所有评论(0)