2025-11-24 16:07:11 +08:00

87 lines
2.7 KiB
Django/Jinja
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
source ./common.sh
echo "[INFO] === 初始化 Master 节点 ==="
cat <<CFG > kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v{{ cluster.kubernetes_version }}
controlPlaneEndpoint: "{{ cluster.api_server_ip }}:6443"
networking:
podSubnet: "{{ cluster.pod_cidr }}"
serviceSubnet: "{{ cluster.service_cidr }}"
imageRepository: {{ registry.ip }}:{{ registry.port }}
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
CFG
# 预先检查
kubeadm init phase preflight --config kubeadm-config.yaml --ignore-preflight-errors=all
# 正式初始化
# 注意:因为我们已经手动导入了镜像,不需要 kubeadm pull
kubeadm init --config kubeadm-config.yaml --upload-certs | tee kubeadm-init.log
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
echo "[INFO] 部署网络插件 (Calico)..."
kubectl apply -f "$BUNDLE_ROOT/manifests/calico.yaml"
echo "[INFO] 部署本地 Registry 容器..."
# 启动 registry 容器 (假设 registry:2 镜像已导入)
# 如果机器上没有 docker 命令,使用 nerdctl 或 ctr 比较麻烦
# 这里假设用户在 common.sh 步骤中通过 apt 安装了 containerd.io (含 docker CLI 吗? 不一定)
# 修正:直接使用静态 Pod 或 nerdctl。为简单起见这里假设 containerd 环境下使用 nerdctl 或者 kubectl 部署
# 我们使用 kubectl 部署一个简单的 registry 到本节点
kubectl apply -f - <<REG_YAML
apiVersion: v1
kind: Pod
metadata:
name: local-registry
namespace: kube-system
labels:
app: registry
spec:
hostNetwork: true
containers:
- name: registry
image: registry:2
ports:
- containerPort: 5000
volumeMounts:
- mountPath: /var/lib/registry
name: registry-data
volumes:
- name: registry-data
hostPath:
path: /var/lib/registry
type: DirectoryOrCreate
REG_YAML
echo "[INFO] 部署 Storage & Virtualization..."
# 安装 Helm
cp "$BUNDLE_ROOT/bin/helm" /usr/local/bin/
# NFS
"$BUNDLE_ROOT/bin/helm" install nfs-subdir-provisioner "$BUNDLE_ROOT/charts/nfs-subdir-external-provisioner" \
--set nfs.server={{ storage.nfs_server }} \
--set nfs.path={{ storage.nfs_path }} \
--set storageClass.defaultClass=true
# KubeVirt
kubectl apply -f "$BUNDLE_ROOT/manifests/kubevirt-operator.yaml"
kubectl apply -f "$BUNDLE_ROOT/manifests/kubevirt-cr.yaml"
# Multus
kubectl apply -f "$BUNDLE_ROOT/manifests/multus-daemonset.yaml"
echo "[INFO] 生成 Worker 加入脚本..."
kubeadm token create --print-join-command > ../../output/join_cluster.sh
chmod +x ../../output/join_cluster.sh
echo "Master 部署完成!请检查 kubectl get nodes"