kubeadm初始化kubernetes集群核心为三步:环境准备→控制平面初始化→工作节点加入;需关闭swap、配置cgroup v2兼容模式、加载并持久化内核模块。

用 kubeadm 初始化 Kubernetes 集群,核心是标准化、可复现的三步:环境准备 → 控制平面初始化 → 工作节点加入。只要系统满足基础要求、网络和镜像可访问,10 分钟内即可跑起一个可用集群。
一、前置环境必须做对的几件事
这些不是“建议”,而是 kubeadm 启动失败最常见的原因:
-
关闭 swap:执行
sudo swapoff -a,并注释/etc/fstab中 swap 行,否则 kubeadm init 直接报错 -
配置 systemd 和 kubelet 使用 cgroup v2 兼容模式:在
/etc/default/grub中确保GRUB_CMDLINE_LINUX包含cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1,然后运行sudo update-grub && sudo reboot -
加载内核模块并持久化:
cat sudo modprobe overlay sudo modprobe br_netfilter<p>cat </p>
-
安装容器运行时(推荐 containerd):kubeadm 自 1.24 起不再内置 dockerd 支持,需提前装好 containerd 并配置
/etc/containerd/config.toml,关键项包括SystemdCgroup = true和禁用默认 sandbox 镜像拉取(因国内网络常超时)
二、初始化控制平面节点(master)
在主节点上执行:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 拉取所需镜像(推荐提前做,避免 init 时卡住):
kubeadm config images pull --kubernetes-version=v1.28.2(版本按需替换) - 生成初始化配置(更可控,不依赖默认参数):
kubeadm config print init-defaults > kubeadm-init.yaml
编辑该文件,重点修改:-
controlPlaneEndpoint: "cluster-endpoint:6443"(用于高可用,单节点可省略) -
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers(国内加速) -
networking.podSubnet: "10.244.0.0/16"(与后续 CNI 插件匹配,如 Flannel 默认用此网段)
-
- 执行初始化:
kubeadm init --config kubeadm-init.yaml --upload-certs
成功后会输出kubeadm join命令(含 token 和 ca cert hash),务必保存——24 小时后过期 - 配置本地 kubectl:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
三、部署 CNI 网络插件(Pod 网络必须)
初始化后 kubectl get nodes 显示 NotReady,因为没 CNI。以 Flannel 为例(适配 podSubnet=10.244.0.0/16):
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml- 稍等 30 秒,执行
kubectl get nodes应显示Ready - 验证网络:
kubectl apply -f https://k8s.io/examples/pods/pod-nginx.yaml,再kubectl exec -it nginx -- ping kubernetes.default测试 DNS 和连通性
四、加入工作节点(worker)
在每个 worker 节点上重复第一步中的环境准备(swap、内核模块、containerd),然后执行初始化时输出的 kubeadm join 命令,例如:
kubeadm join cluster-endpoint:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:123... \
--control-plane --certificate-key 456...
若只需普通 worker,去掉 --control-plane 和 --certificate-key 参数。加入后主节点执行 kubectl get nodes 即可见新节点状态变为 Ready。
整个流程不复杂但容易忽略细节,尤其 swap、cgroup、镜像源和 CNI 网段匹配这四点。跑通一次后,配合脚本或 Ansible 可快速复现多节点集群。










