78 lines
2.5 KiB
Bash
78 lines
2.5 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
# Kubernetes 网络插件安装脚本
|
|
# 功能: 在 Master 节点安装 Flannel 网络插件
|
|
|
|
echo "==== 安装 Flannel 网络插件 ===="
|
|
|
|
# 1. 下载 Flannel 配置文件
|
|
echo "下载 Flannel 配置文件..."
|
|
FLANNEL_VER="v0.27.4"
|
|
curl -fsSL https://raw.githubusercontent.com/flannel-io/flannel/${FLANNEL_VER}/Documentation/kube-flannel.yml -O
|
|
|
|
# 2. 修改 Flannel 配置
|
|
echo "修改 Flannel 配置..."
|
|
sed -i 's|"Network": "10.244.0.0/16"|"Network": "10.244.0.0/16"|g' kube-flannel.yml
|
|
|
|
echo "预拉取 Flannel 相关镜像(优先国内镜像域名,拉取后回标官方名)..."
|
|
DOCKER_MIRROR="docker.m.daocloud.io"
|
|
REGISTRY_K8S_MIRROR="registry-k8s-io.mirrors.sjtug.sjtu.edu.cn"
|
|
GHCR_MIRROR="ghcr.tencentcloudcr.com"
|
|
|
|
IMAGES=(
|
|
"registry.k8s.io/pause:3.8"
|
|
"ghcr.io/flannel-io/flannel:${FLANNEL_VER}"
|
|
)
|
|
|
|
pull_and_tag() {
|
|
local origin_ref="$1" # e.g. registry.k8s.io/pause:3.8
|
|
local mirror_ref="$2" # e.g. registry-k8s-io.mirrors.sjtug.sjtu.edu.cn/pause:3.8
|
|
echo "尝试从镜像 ${mirror_ref} 预拉取..."
|
|
for i in $(seq 1 5); do
|
|
if sudo ctr -n k8s.io images pull "${mirror_ref}"; then
|
|
echo "打官方标签: ${origin_ref} <- ${mirror_ref}"
|
|
sudo ctr -n k8s.io images tag "${mirror_ref}" "${origin_ref}" || true
|
|
return 0
|
|
fi
|
|
echo "pull 失败,重试 ${i}/5..."; sleep 2
|
|
done
|
|
return 1
|
|
}
|
|
|
|
# 预拉取 pause 镜像
|
|
echo "预拉取: registry.k8s.io/pause:3.8"
|
|
if pull_and_tag "registry.k8s.io/pause:3.8" "${REGISTRY_K8S_MIRROR}/pause:3.8"; then
|
|
echo "pause 镜像拉取成功"
|
|
else
|
|
echo "WARN: pause 镜像拉取失败,将由 kubelet 重试"
|
|
fi
|
|
|
|
# 预拉取 flannel 镜像
|
|
echo "预拉取: ghcr.io/flannel-io/flannel:${FLANNEL_VER}"
|
|
if pull_and_tag "ghcr.io/flannel-io/flannel:${FLANNEL_VER}" "${GHCR_MIRROR}/flannel-io/flannel:${FLANNEL_VER}"; then
|
|
echo "flannel 镜像拉取成功"
|
|
else
|
|
echo "WARN: flannel 镜像拉取失败,将由 kubelet 重试"
|
|
fi
|
|
|
|
# 3. 安装 Flannel
|
|
echo "安装 Flannel..."
|
|
kubectl apply -f kube-flannel.yml
|
|
|
|
# 4. 等待 Flannel 启动
|
|
echo "等待 Flannel 组件就绪..."
|
|
kubectl -n kube-flannel rollout status daemonset/kube-flannel-ds --timeout=600s || true
|
|
kubectl wait --for=condition=ready pod -l app=flannel -n kube-flannel --timeout=600s || true
|
|
|
|
echo "等待 CoreDNS 由 Pending 变为 Ready..."
|
|
kubectl -n kube-system rollout status deploy/coredns --timeout=600s || true
|
|
|
|
# 5. 验证网络插件
|
|
echo "==== 验证 Flannel 安装 ===="
|
|
kubectl get pods -n kube-flannel
|
|
kubectl get nodes
|
|
|
|
echo "==== Flannel 网络插件安装完成 ===="
|
|
|