首页 / Kubernetes (k8s) 入门教程 / kubeadm 搭建生产集群

Kubernetes (k8s) 入门教程

kubeadm 搭建生产集群

本教程共 65 篇 · 第 59 篇 · 更新于 2026-08-14 · 约 14 分钟阅读

Kuberneteskubeadm生产集群CNI控制平面

本节目标:掌握用 kubeadm 从零搭一个可用集群的主流程——初始化控制平面、装网络插件、加入节点,并了解生产环境额外要注意的高可用与备份。

上一章说了 kubeadm 是官方推荐的自建工具。这一章把它跑起来。注意:我们只讲原理和关键命令,不展开每一步踩坑的实战。真正动手前,务必对照官方文档核对命令版本。

59-1 准备工作

每台机器要满足:

  • 运行兼容 deb/rpm 的 Linux,如 Ubuntu 或 CentOS。
  • 控制平面节点至少 2 个 CPU,每台机器 2 GiB 以上内存。
  • 集群内所有机器网络互通,可用公网也可用内网。
  • 安装的 kubeadm 版本,要能部署你想要的 Kubernetes 版本。

所有节点先装好容器运行时(containerd 或 CRI-O)和 kubeadm、kubelet、kubectl。kubelet 装好后可能会短暂 crashloop,那是它在等 kubeadm 下令,属正常现象,别慌。

59-2 初始化控制平面

在控制平面节点上执行:

kubeadm init <args>

kubeadm init 会先做一系列预检,确保机器就绪,然后下载并安装控制平面组件。这步可能要几分钟。成功后你会看到一段提示,包含两件事:怎么配置 kubectl,以及怎么把节点加进来。

配置 kubectl(普通用户):

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

如果是 root,直接:

export KUBECONFIG=/etc/kubernetes/admin.conf
Warning

admin.conf 里是 cluster-admin 级别的证书,权限极高,千万别随便发给别人。kubeadm init 还会生成 super-admin.conf,它是能绕过 RBAC 的紧急账户,更要锁好。正式环境应为普通用户单独发最小权限凭证。

59-3 几个关键参数

初始化时常用这些参数:

  • --control-plane-endpoint:给所有控制平面节点设一个共享端点(负载均衡器的 DNS 或 IP)。如果你打算以后扩成高可用,一开始就带上它。
  • --pod-network-cidr:指定 Pod 网络段。选了某个 CNI 插件,往往要填它要求的值。
  • --cri-socket:节点上装了多个运行时时,指明用哪个。
Note

没有带 --control-plane-endpoint 的单控制平面集群,kubeadm 不支持原地升级成高可用。想留后路,一开始就规划好。

59-4 安装 Pod 网络插件

这一步不能省。你必须装一个基于 CNI 的 Pod 网络插件,Pod 之间才能通信。在装网络之前,CoreDNS 都不会启动。

kubectl apply -f <add-on.yaml>

注意几个坑:

  • Pod 网络不能和任何主机网络重叠,否则会出诡异问题。冲突了就在 init 时换 --pod-network-cidr
  • kubeadm 默认开启并强制 RBAC,你的网络插件得支持它。
  • 一个集群只能装一个 Pod 网络。

装完后,用这条命令确认 CoreDNS 变成 Running,才算网络通了:

kubectl get pods --all-namespaces

59-5 加入工作节点

控制平面初始化时,会打印一条 kubeadm join 命令,长这样:

kubeadm join <control-plane-host>:<port> \
  --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash>

在每个工作节点上以 root 执行即可。这个 token 是控制平面和节点之间的双向认证凭据,泄露了就等于谁都能加节点,要保管好。token 可以用 kubeadm token 系列命令管理(kubeadm token create / kubeadm token list)。

默认情况下,控制平面节点上有污点,不会被调度普通 Pod。想单机全跑(学习用),可以去掉这个污点:

kubectl taint nodes --all node-role.kubernetes.io/control-plane-
Tip

生产环境别随便去掉控制平面的污点。把业务 Pod 调度到控制平面节点上,会和控制组件抢资源,影响稳定性。

59-6 生产环境的额外考量

单控制平面 + 单 etcd,一旦控制节点挂了,集群可能丢数据、要重搭。生产环境请务必考虑:

  • 高可用:多个控制平面节点 + 负载均衡,再配多副本 etcd。
  • etcd 备份:etcd 数据在控制节点的 /var/lib/etcd,定期备份。它是集群的”大脑”,丢了就真丢了。
  • 证书管理:kubeadm 生成的证书有期限,到期前要用 kubeadm certs renew 续期。
  • 版本策略:kubeadm 建议和控制的组件版本对齐;kubelet 可略旧,但有偏差上限。

59-7 收尾与清理

玩坏了想重来,先排空节点再重置:

kubectl drain <> --delete-emptydir-data --force --ignore-daemonsets
kubeadm reset
kubectl delete node <>

kubeadm reset 不会清 iptables 和 IPVS 规则,必要时手动清:

iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
Note

想验证集群装得正不正,可以跑 Sonobuoy 做一致性测试。它用一系列用例检查功能是否正常,是交付前的好帮手。

一句话:kubeadm 把”建集群”从几小时的手工活,压缩成几条命令。但命令只是开始,把集群稳稳养住才是真本事。