裸机 Kubernetes:规划生产环境集群
裸机 Kubernetes 是直接在物理服务器上运行集群,而不是置于虚拟机层内。这种方式可以提供较可预测的 CPU、内存、存储及网络资源,但机构也要自行负责硬件生命周期、节点故障及集群运营。
因此,生产环境集群不只是执行 kubeadm 命令或准备几台独立服务器。应把工作负载、故障模型、网络、存储、安全及恢复流程一并规划,确保首次部署后仍然容易支持。
部署前先界定生产环境目标
先列出集群要运行的服务,记录可用性目标、正常及高峰资源需求、有状态数据、维护时段、恢复目标、合规要求,以及负责日常运营的人员。
- 先从可用性开始。决定服务是否必须在节点、电力、网络或控制平面故障期间继续运行,再按要求设计冗余。
- 运营模式同样重要。应界定谁负责修补主机操作系统、管理 Kubernetes 版本、处理警报、更换硬件及批准变更。
小型开发集群或可接受单一控制平面节点。面向客户或承载重要业务的环境,通常需要独立的高可用性设计、应付维护的额外容量,以及经过测试的恢复路径。
提示:先写下故障情景,再选择服务器规格。集群应按某项组件不可用时仍能安全运行来规划,而不只是按正常流量计算。
设计控制平面及工作节点角色
除非工作负载明确适合精简集群,否则应把控制平面职责与应用程序容量分开。控制平面运行 API 服务器、调度器、控制器管理器,通常也包括 etcd 成员;工作节点则运行应用程序 Pod 及节点服务。
- 如需高可用性,应规划多个控制平面节点,并通过稳定的 API 端点连接。堆叠式 etcd 拓扑较简单;外置 etcd 可分开更多组件,但需要更多主机及运营工作。
- 工作节点应保留足够容量,即使失去一个节点,仍能符合应用程序请求、PodDisruptionBudget 及维护要求。应利用拓扑规则分散副本,不要只靠运气。
应为 Kubernetes API 服务器使用负载均衡器或虚拟 IP,并把机柜、电力馈线、交换机及站点列为故障域。只有当配套网络及电力设计也分开时,物理分隔才真正有价值。
按可分配容量规划硬件
应按可分配资源计算容量,而不是只看硬件规格。Kubelet、容器运行时、系统 DaemonSet、监控、日志、镜像存储及 Kubernetes 保留资源,均会占用每个节点的一部分容量。
- 裸机设计可适合资源需求较可预测或较高的服务;Dataplugs 关于扩展 SaaS 平台的相关指南,也说明基础设施选择应配合应用程序的资源及运营要求。
- 应为滚动部署、故障转移、镜像下载、缓存增长及短暂流量高峰预留空间,避免每个节点长期接近 CPU、内存或临时存储上限。 应规划 ECC 内存、可靠的 SSD 或 NVMe 存储、可行时使用冗余电源、合适的网卡容量、远程控制台,以及有记录的固件生命周期。这些都是运营依赖,不是可有可无的附加项目。
应记录服务真正关注的性能指标,包括 CPU 饱和、内存压力、磁盘延迟及 IOPS、网络吞吐量、数据包丢失及尾部延迟。测试时要涵盖整条应用程序路径,包括存储及入口流量。
选择集群构建方式及容器运行时
应使用目前受支持的 Kubernetes 小版本,并确保控制平面、kubelet、kube-proxy、附加组件及应用程序集成都符合受支持的兼容范围。应在自动化中固定版本,并规划升级,不要让软件包仓库替你决定版本。
以 kubeadm 建立集群,是希望保留主机配置控制权,同时采用受支持的引导及升级路径的实用基础。其配置应像应用程序基础设施一样保存及审核。
- 每个节点均应安装符合 Container Runtime Interface 的容器运行时,设置兼容的 kubelet 及运行时 cgroup,并在节点加入前验证内核、时间同步、DNS 及所需网络设置。
- 应通过可重复的镜像或配置流程建立主机,一致地套用基线软件包、访问控制、监控代理、磁盘配置及节点标签;再使用 Kubernetes 清单或 GitOps 流程管理集群附加组件及应用程序。 不要把单一节点上的手动修改当作生产流程。如果替换服务器不能按记录好的自动化流程重新建立,硬件故障便会变成依赖个人记忆的问题。
提示:应以受控文件记录集群配置、节点清单、证书、机密数据处理流程及恢复命令,并为每项内容指定负责人。
规划网络及流量路径
裸机环境不会自动提供云服务商的默认网络设置。部署前应设计物理网络、VLAN 或路由分段、Pod 及 Service CIDR、MTU、DNS、API 访问、入口、出口及负载均衡路径,并避免与企业网络及连接服务使用的范围重叠。
- 应选择符合路由、加密、可观测性及 NetworkPolicy 要求的 CNI 插件,确认它采用 Overlay、原生路由、BGP 或其他模式,并在实际交换机及防火墙上测试故障行为。
- 应定义外部流量如何到达 Service。MetalLB、设备、反向代理或其他负载均衡设计均可能适用,但必须记录地址分配及故障转移行为。
应测试东西向流量、DNS、入口、出口控制、节点替换,以及由管理网络访问 API。节点显示 Ready,不代表应用程序一定可连接,因为某条流量路径可能从未被测试。
把存储及备份视为两项独立设计
容器可以替换,但业务数据不能随意丢失。应决定哪些工作负载需要持久卷、需要什么性能及耐久性,以及存储是属于节点本地,还是由共享或复制系统提供。
- 如需要动态配置、快照、扩容或复制,应使用以 CSI 为基础的存储设计,并检查驱动程序的 Kubernetes 支持、升级路径、故障域及备份集成。
- 本地 NVMe 可以提供低延迟,但本地 PersistentVolume 仍然绑定到节点,本身不代表高可用性。选用本地存储时,应配合节点亲和性,以及应用程序层面的复制或恢复方案。
应定期备份 etcd,并通过存储系统或应用程序原生备份保护业务数据。要在隔离环境中测试恢复、记录恢复时间,并确认事故期间仍能取得证书、清单及外部依赖。
把安全及运营纳入集群设计
应一并加固主机操作系统及 Kubernetes API。限制管理访问,使用基于角色的访问控制及最小权限,保护 API 端点,轮换证书及凭据,并界定机密数据如何在静态存储时加密,以及如何在集群外处理。
- 应按工作负载采用 Pod Security Standards、NetworkPolicy、镜像扫描及来源验证、资源限制和准入控制。特权容器及主机挂载应只在有记录及合理的情况下使用。
- 应集中收集指标、日志及审计事件,并对 API Server 及 etcd 健康状况、节点压力、调度失败、证书到期、存储延迟、入口错误及容器反复重启设置警报。
对于有状态的企业平台,Dataplugs 的企业 ERP 独立服务器指南提供稳定资源、集成、身份及运营规划的相关背景;如果这些服务在 Kubernetes 上运行,同样需要这些管理原则。
及早规划升级及恢复
应建立暂存集群或具有代表性的测试环境,演练 Kubernetes 升级、CNI 及 CSI 变更、节点替换、证书轮换、备份恢复及应用程序回滚。在小版本升级前,应验证 API 及准入 Webhook 是否兼容。
可行时每次只排空一个节点,遵守 PodDisruptionBudget,确认替换容量,并在维护期间监测服务健康。控制平面变更应按所选部署工具的升级顺序进行,不要在没有支持路径的情况下跳过小版本。 可以问十个问题:集群会运行哪些服务及数据?需要承受什么故障?需要多少控制平面及工作节点?故障域在哪里?所选运行时、CNI、CSI、入口及负载均衡组件是否受支持?预留多少可分配容量?谁负责修补主机及 Kubernetes?备份存放在哪里?如何测试完整恢复?谁负责事故响应?
如果答案没有记录,集群便未准备好投入生产。独立服务器可以提供控制权及较可预测的物理资源,但韧性来自周边设计及持续的运营纪律。
总结
裸机 Kubernetes 可以成为需要直接控制硬件、较可预测性能或一致私有基础设施模式的工作负载的稳固基础。只有把节点角色、物理故障域、网络、存储、安全及生命周期管理视为同一系统设计,才能发挥其优势。
Dataplugs 独立服务器为机构评估 Kubernetes 工作负载提供物理基础。应由服务目标开始,建立可重复的节点,为故障及维护预留容量,并在集群成为关键业务前测试升级及恢复。
如需了解更多信息,请浏览 Dataplugs 网站或联系 sales@dataplugs.com。
