博客 / 詳情

返回

從“玩具”到生產力:用Terraform在Proxmox上構建K8s集羣的探索之旅

背景

玩具 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 版本也都深入使用過。

説起 SkyDNSCoreOS(現已併入 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: https://blog.csdn.net/saynaihe

語雀:https://www.yuque.com/duiniwukenaihe

寫在最後

這個過程,純粹是出於興趣與個人的自娛自樂。如果有同樣在摸索的朋友,歡迎交流;如果我只是在自言自語,那也是一段不錯的技術日記。

畢竟,運維的本質不只是維護系統,更是保持對技術的好奇與動手的温度。希望我們都能一直保持這一份熱愛。

如果你也對這樣的實踐感興趣,我們可以一起聊聊;如果你已經走過這條路,也請不吝賜教。無業的日子,也可以是重新發現熱愛的日子。

    • *

本文是一個系列文章的開篇,後續我會持續更新實踐過程中的每一個步驟、遇到的問題以及解決方案。敬請期待!

歡迎大家關注我的微信公眾號:

qrcode_for_gh_c9bd2c9d1331_258.jpg

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.