87 lines
2.7 KiB
Django/Jinja
87 lines
2.7 KiB
Django/Jinja
#!/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"
|