#!/bin/bash source ./common.sh echo "[INFO] === 初始化 Master 节点 ===" cat < 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 - < ../../output/join_cluster.sh chmod +x ../../output/join_cluster.sh echo "Master 部署完成!请检查 kubectl get nodes"