新手搭K8s集群这件事,说难也难,说容易也容易。先说结论:如果你只是想在家里用几台虚拟机或者物理机跑起来一套能学习、能验证的Kubernetes集群,用kubeadm官方引导工具,一个周末完全够用。如果你一上来就非要搞二进制方式逐文件部署,那大概率会在证书、服务配置这些细节里迷失方向,多半两三天都折腾不完。
这篇文章就是把“新手搭建K8s集群”这件事彻底拆开讲,从环境规划、组件选型到一步步实操命令,再到踩坑排错,全程照着抄基本就能跑通。适合刚接触容器编排、准备搭建自己第一套集群的开发者,也适合那些之前“照着某篇文章敲了一半卡住”的朋友,看完应该能把原理和步骤一起打通。
1. 搭建前先想清楚:你要装哪种K8s
很多人上来就是“我要装一套K8s”,但K8s的安装方式其实分好几种,不同方式适合不同场景,选择不对,后面会非常痛苦。
1.1 常见搭建方式的横向对比
目前社区主流的有三条路:kubeadm方式、二进制方式、Rancher等图形化平台方式。这三者各有侧重,我分别说说他们的特点。
kubeadm是Kubernetes官方的集群引导工具,也是目前生产环境用的最多的一种方式。它把etcd、API Server、Controller-Manager、Scheduler这些核心组件全部容器化,通过镜像拉取、静态Pod配置文件来启动。对于新手来说最大的好处是步骤标准化,kubeadm init一把就把控制平面的骨架拉起来了,后续加节点只需要一条join命令。坏处是底层细节被藏起来了一部分,排错时如果不懂组件工作流程,容易抓瞎。
二进制方式就是去官方下载各个组件的二进制文件,手动配置证书、配置文件,再用systemd托管进程。这种方式对理解内部机制帮助最大,但部署工作量也最大。个人建议新手暂时不要碰,除非你已经用kubeadm成功搭过一两套集群,对组件交互有了帧底认知。
Rancher这类图形化平台是把K8s作为基础设施对外提供,你可以像操作一个软件一样去创建集群。好处是门槛低,Web界面点点点,但坏处是它帮你屏蔽了太多细节,如果哪天Rancher出了问题,你可能完全不知道底层到底是怎么回事。
综合来看,新手我强烈建议从kubeadm入手。原因很简单:它是官方工具,社区文档最多,出问题搜解决方案最容易搜到,而且学会之后对集群的理解也比用Rancher要深入得多。
注意:这里说的是用kubeadm搭建物理机/虚拟机集群,不是用minikube或kind。minikube和kind是单机模拟,适合本地快速验证,但和真正的多节点集群在架构上还是有差距。
1.2 数据面、控制面和etcd,先分清角色再动手
在动手敲命令之前,你必须搞清楚K8s集群里有哪些角色。这就好比你搭一个公司组织架构,先分清谁是管理岗、谁是执行岗,后面安排工作才不会乱。
控制平面(Control Plane)就是集群的大脑,由API Server、Scheduler、Controller-Manager和etcd组成。API Server是所有请求的入口,你执行kubectl命令实际上都是在和它通信;Scheduler负责决定Pod应该调度到哪个节点;Controller-Manager负责维持集群的期望状态,比如某个Deployment副本数是3,它会不停检查当前是不是3,不是就创建副本;etcd是集群的数据库,所有状态都存放在这里。
数据面(Worker Node)就是干活的节点,主要跑kubelet、kube-proxy和容器运行时。kubelet负责管理Pod的生命周期,kube-proxy负责实现服务的负载均衡和流量转发,容器运行时一般用containerd或Docker来真正创建容器。
新手容易犯的一个错误是认为控制平面和工作节点必须物理分开。其实小集群完全可以在同一台机器上装控制平面加工作节点,这样一台机器就能当主节点使用。我建议你至少准备三个节点:一个做主控,两个做工作节点,这样你可以体验到真实的调度过程。如果资源紧张,两个节点(一个主、一个工作)也能跑,但多节点调度的重要性就体现不出来了。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 动手前的环境准备与核心组件选型
这一步决定了你后面是顺风顺水还是处处碰壁。很多新手集群建不起来,不是命令敲错了,而是前置条件没满足,环境不过关。
2.1 节点规格与系统版本推荐
K8s对节点的CPU和内存要求不算高,但也不能太寒碜。官方建议控制平面至少2核2G,实际经验是2核4G会更舒服,因为API Server和etcd在集群启动初期很吃内存。工作节点也是2核2G起步,这个配置跑一些简单的业务Pod绰绰有余。
操作系统这块,CentOS 7和Ubuntu 20.04/22.04是社区里被踩坑踩得最多的两个选择。个人更推荐Ubuntu 22.04,因为内核版本较新,对containerd和各种网络插件兼容性更好。如果你只能用CentOS 7,注意内核版本最好升级到3.10以上,默认的3.10在跑某些新版本K8s时会有兼容性问题。
主机名规划也要提前想好。建议统一格式,比如:
- master01(控制平面)
- work01(工作节点)
- work02(工作节点)
同时要把/etc/hosts写好,确保三个节点能通过主机名互相解析IP。这一步看似简单,实际中我见过无数人因为hosts没配好,导致kubelet启动时报错连不上API Server。
2.2 容器运行时选型:containerd还是Docker?
这是新手最容易懵的一个问题。Kubernetes从1.24版本开始移除了对Docker的直接支持,改用CRI(容器运行时接口)来对接容器运行时。现在主流的运行时是containerd,因为在kubeadm引导的集群里,containerd
