背景
玩具 Terraform
很早就尝试过 Terraform,虽然我也一直信奉"一切皆代码"的基础设施即代码(IaC)理念,但在实际生产中始终没有大规模落地。国内的云厂商------腾讯云、阿里云、华为云------其实都对 Terraform 做了相当不错的适配和支持,官方 Provider 更新也很及时(你信吗?反正我不信。我尝试使用过腾讯与华为云的 Provider)。这么多年过去了,Terraform 虽然在国外很火,但在国内依然处于一种"不温不火"的状态,很多团队还是在用传统的脚本、控制台操作甚至自研工具来管理云资源。
Terraform 对我来说更像是一个玩具------偶尔拿出来摆弄一下,证明自己"还在学习新技术",但从未真正在生产环境中应用。这次,我决定改变这个状态。
Terraform 与 OpenTofu
时间到了 2023 年 8 月 10 日,HashiCorp 宣布将 Terraform 的许可证从 Mozilla Public License (MPL) v2.0 变更为 Business Source License (BSL) v1.1。这一举动在开源社区内激起了不小的波澜,很多人担心这会影响工具的开放性和生态发展。也正是在这个时间节点,OpenTofu 应运而生------它作为 Terraform 的一个分支,致力于保持完全开源。两者的核心区别与详细对比,可以参考这份比较全面的分析:OpenTofu vs Terraform。
或许这正是基础设施即代码演进的一个缩影:技术本身在进步,生态在分化,而作为使用者的我们,则需要在工具的选择中,平衡好开放、可控与可持续。对于我来说,Terraform 与 OpenTofu 我觉得都可以尝试一下!
为什么是 Proxmox?
我承认有个人主观因素:我个人比较喜欢 Proxmox。
2014 年,当很多人还在追逐 VMware vSphere/ESXi 或 Microsoft Hyper-V 时,我就已经开始接触并使用 Proxmox 了(有小伙伴提了一嘴 Proxmox,我就记住了)。当然,那时候更多是停留在安装、创建虚拟机的初步使用层面,并未深入其存储、集群或网络高级特性。当前也未对这些进行深究,我主要考虑的还是:快速部署、高可用与 IaC 的层面。
选择 Proxmox 的理由很简单:
-
完全开源免费:不用担心许可证问题
-
轻量且强大:基于 Debian,资源占用少但功能不弱
-
天生支持容器:除了 KVM 虚拟机,还原生支持 LXC
-
Web 界面友好:虽然命令行也很强,但界面确实方便
-
社区活跃:基本能找到各种问题的解决方案
VMware 被博通收购后,大家都在考虑可替代方案;Microsoft Hyper-V 依赖于 Windows 这点我肯定是不会选择的。Proxmox 成为了我的首选。
关于 Kubernetes
个人还是一个 K8s 爱好者。准确来说,2017-2018 年就开始将生产环境逐步迁移到了腾讯云 TKE 的环境下(也算是 TKE 的骨灰级用户了,提交过很多用户体验反馈),也各种折腾过二进制安装 Kubernetes 集群(早期的 1.10 版本之前,安装得很崩溃),用 kubeadm 搭建过高可用的 1.14 集群,然后逐步升级到 1.24 版本。腾讯云、华为云、AWS 还有阿里云几大云平台的 K8s 版本也都深入使用过。
说起 SkyDNS 与 CoreOS(现已并入 Red Hat,是其 OpenShift Kubernetes 容器控制系统的基础),现在应该都没有多少人记得了吧......
虽然现在 K8s 的热度被 AI 的风头所盖过,但是 K8s 还是值得学习的。它不仅是容器编排的事实标准,更是云原生架构的基石。
我的想法
当前,我想实际操作一下我的 Proxmox 集群,使用 IaC 的思路管理这台 Proxmox 主机(当然了,我还有一台 64 核心 128G 的台式机,差生文具多系列。后面也会安装一下 Proxmox 组一下集群......),其实就是使用 Terraform 创建一个我喜欢的 Kubernetes 集群,并且把这个过程整理成可重复、可版本化的代码。
我把这个目标拆解成几个小步骤,既当学习,也当记录:
准备阶段
Proxmox 主机是之前早已经搭好的,同一网络环境内还需要一台能跑 Terraform/OpenTofu 的主机(我特意将其与 Proxmox 主机分开,保持管理平面和数据平面的分离)。
第一步:用 Terraform 创建一台 VM 实例
对照 Proxmox 控制台的手动创建流程,写出第一份 .tf 文件,感受从"点击"到"代码"的转变。这一步看似简单,但能让我们理解 Terraform 的基本语法、Provider 的配置方式,以及如何将声明式的配置转化为实际的资源。
第二步:用 Terraform 创建多台 VM 实例
从简单启动多台 VM 实例,到引入模板(Clone Template)和 Cloud-Init,实现批量、一致性的虚拟机部署。这个变化看似微小,但却是从"手工作坊"到"工业化生产"的质变,也为后面的集群搭建打下坚实基础。
第三步:用 Terraform 搭建一个 Kubernetes 集群
在那些 VM 上运行 Kubeadm 或类似工具,自动化完成集群初始化。这里肯定会遇到很多"好玩"的问题:节点互信、网络规划、负载均衡、证书管理,还有后期扩容、高可用方案等等。这些挑战恰恰是学习的最好机会。
第四步:部署工作中常用的软件与 CI/CD 流水线
集群起来了,就可以在上面跑 Helm Chart、部署可观测性方案(Prometheus + Grafana)、CI/CD 工具(比如 Jenkins/ArgoCD/GitLab Runner/Harbor),甚至搭建一套完整的开发测试环境。让这个本地集群成为一个真正可用的生产力工具。
拓展尝试:集成 Dify、N8N 等工具
如果还有余力,可以试试搭建 Dify(LLM 应用平台)和 N8N(工作流自动化),让这个本地集群也能玩点 AI 和自动化集成的东西。毕竟,技术的乐趣就在于不断探索新的可能性。
其他的思考
在这个过程中,肯定还会涉及到一些 Linux 基础的东西和随时遇到的各种问题。这些"坑"和"意外",往往是最好的学习素材。我会把它们都记录下来,形成一个完整的实践路径。
之前写的一些零散笔记
之前断断续续写了一些blog,基本收录在csdn与语雀中:
csdn : blog.csdn.net/saynaihe
语雀 :www.yuque.com/duiniwukena...
写在最后
这个过程,纯粹是出于兴趣与个人的自娱自乐。如果有同样在摸索的朋友,欢迎交流;如果我只是在自言自语,那也是一段不错的技术日记。
毕竟,运维的本质不只是维护系统,更是保持对技术的好奇与动手的温度。希望我们都能一直保持这一份热爱。
如果你也对这样的实践感兴趣,我们可以一起聊聊;如果你已经走过这条路,也请不吝赐教。无业的日子,也可以是重新发现热爱的日子。
本文是一个系列文章的开篇,后续我会持续更新实践过程中的每一个步骤、遇到的问题以及解决方案。敬请期待!
欢迎大家关注我的微信公众号:
