嗯...今天要來聊聊一個最近很多人在問我的問題。就是啊,一堆朋友想學 DevOps,但看來看去,教學都叫你直接開 AWS、GCP 或 Azure 來玩。這就很尷尬,你知道嗎?
很多人,呃,我們就叫他小明好了,小明他就是這樣。理論課看了一堆,Docker、Kubernetes 這些名詞都會背了,但真的要動手,就卡住了。因為那些「免費方案」說真的,跟陷阱沒兩樣。誰知道哪天忘記關掉哪個服務,下個月帳單寄來就直接破產。真的很可怕。
他就問我:「難道沒有一個方法,可以在自己的筆電上,搞一個不用錢、不怕玩壞、甚至不用網路也能練習的環境嗎?」
嘿,當然有。
重點一句話
你可以用 Docker、Minikube/Kind、Vagrant 這些免費工具,在你的 Windows、Mac 或 Linux 筆電上,打造一個功能完整的個人 DevOps 實驗室,完全零成本,而且離線也能玩。
為什麼要在自己筆電上搞一個實驗室?
我自己是覺得,這樣做的好處真的太多了。首先,最爽的一點就是...完全免費!對,你沒聽錯,一毛錢都不用花。不用再提心吊膽怕收到雲端服務的驚喜帳單。
再來,它可以離線運作。你在高鐵上、在咖啡廳,網路訊號爛到爆?沒差,照樣練習。而且,因為所有東西都在你自己的電腦裡,所以根本不用擔心什麼資安問題,你可以隨便亂搞、盡情地把它玩壞。說真的,把東西玩壞再自己修好,才是學最快的方法,對吧?
還有啊,那個反應速度真的沒話說。在本機上啟動一個容器或虛擬機,就是幾秒鐘的事。不像在雲端,有時候光等一個資源跑起來,咖啡都涼了。
怎麼做?一步一步來
在開始之前,先確認一下你的裝備。你的筆電記憶體至少要個 8GB 吧,但說真的,16GB 跑起來會順很多啦。然後硬碟空間嘛...大概空出個 20GB 應該就夠了。不管你是用 Windows、macOS 還是 Linux 都行,但重點是你需要有管理員權限來安裝這些軟體。
第一步:打好地基,安裝 Docker
Docker 是整個實驗室的基礎。你可以把它想像成一個個標準化的「貨櫃」,把你的應用程式跟它需要的所有東西(程式碼、函式庫、設定檔)全部打包在一起。這樣不管你把這個貨櫃搬到哪台電腦上,它跑起來的樣子都會一模一樣。這就是所謂的「容器化」。
安裝過程其實蠻無腦的,基本上就是去官網下載、然後下一步下一步。
- Windows 使用者:直接去 Docker 官網下載 Docker Desktop。安裝時它會問你要不要啟用 WSL 2 (Windows Subsystem for Linux),選「要」,這很重要。裝完重開機後,等右下角那個鯨魚圖示不動了,就代表好了。
- Mac 使用者:一樣,去官網抓 Docker Desktop for Mac 的 .dmg 檔,拖到應用程式資料夾,打開,輸入密碼,等上面狀態列的鯨魚圖示不動,收工。
- Linux 使用者:嗯... 你們應該很熟指令了,我就直接貼上來,照著跑一遍就行。主要是更新套件、加入 Docker 的 GPG 金鑰跟 repository,然後安裝。
# 這邊以 Ubuntu / Debian 為例
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce
# 記得把自己加到 docker 群組,不然每次都要 sudo 很煩
sudo usermod -aG docker $USER
# 執行完要重新登入才會生效喔!
裝好之後,打開你的終端機(Windows 上叫命令提示字元或 PowerShell),打下面這行指令測試一下:
docker run hello-world
如果你看到螢幕上印出「Hello from Docker!」之類的訊息,恭喜你,第一步完成了!
第二步:你需要一個總指揮 - Kubernetes (K8s)
有了 Docker 貨櫃之後,如果數量一多,管理起來就很頭大。哪個貨櫃掛了要重啟?貨櫃之間怎麼溝通?這時候就需要 Kubernetes,大家習慣叫它 K8s。它就是管理成千上百個 Docker 貨櫃的總指揮官,一個容器的「交響樂團指揮」。
在筆電上跑 K8s,我們有兩個主流的選擇:Minikube 和 Kind。這兩個都很好用,但場景有點不一樣。
來聊聊 Kubernetes:該選 Minikube 還是 Kind?
這個問題...嗯...真的沒有標準答案,看你的需求。Minikube 比較像一個功能齊全的「迷你單機版」K8s,而 Kind 更輕量,它直接把 K8s 跑在 Docker 容器裡面。我自己是覺得,新手可以從 Minikube 開始,感覺比較直覺。我整理了一個簡單的比較表,讓你比較好決定。
| 比較項目 | Minikube | Kind (Kubernetes in Docker) |
|---|---|---|
| 核心概念 | 它會在你的筆電裡開一個小小的虛擬機(VM),然後在那個 VM 裡面跑一個完整的 K8s 節點。比較像真實環境的縮小版。 | 超酷的想法!它直接用 Docker 容器來當作 K8s 的節點。所以你的 K8s 叢集,其實是跑在 Docker 裡的一堆容器。 |
| 適合誰 | 剛入門的新手。它的指令很直覺,還有內建的 Dashboard (儀表板),點幾下就能看到叢集狀態,很有成就感。 | 已經有點經驗,或是需要快速建立、銷毀多個測試叢集的開發者。特別適合用來測試 CI/CD 流程。 |
| 資源消耗 | 因為多了一層 VM,所以會稍微吃資源一點。不過現在可以用 docker driver,效能好很多。 | 相對輕量。啟動跟刪除都飛快,畢竟就只是在操作 Docker 容器而已。 |
| 一句話總結 | 功能完整的學習套件,適合想好好體驗 K8s 的人。 | 又快又輕的測試工具,適合把 K8s 當日常工具的人。 |
決定好了嗎?安裝其實也都很簡單。
如果你選 Minikube:
最簡單的方式就是用你系統的套件管理器,Mac 就用 brew install minikube。裝好之後,用下面這個指令啟動它,記得喔,我們指定用剛剛裝好的 Docker 來當驅動,這樣效能比較好。
minikube start --driver=docker
然後可以跑 minikube dashboard,它會自動用瀏覽器打開一個超酷的儀表板!
如果你選 Kind:
一樣,Mac 用 brew install kind。裝好後,一行指令建立你的叢集:
kind create cluster --name my-local-lab
搞定。就是這麼快。
第三步:跟 K8s 溝通的遙控器 - kubectl
不管你用 Minikube 還是 Kind,你都需要一個跟 K8s 叢集溝通的工具,那就是 kubectl。你可以把它想像成電視遙控器,用來對 K8s 下指令。
這個安裝也超簡單,Mac 一樣是 brew install kubectl。Windows 和 Linux 可以去 K8s 官網下載執行檔,放到系統路徑底下就好。
裝好後,測試一下,看看能不能抓到你叢集裡所有的 Pod(Pod 是 K8s 裡最基本的部署單位):
kubectl get pods --all-namespaces
如果你看到一堆跟 kube-system 有關的 Pod 列表,而且狀態是 Running,那就對了!
第四步:虛擬機管理大師 Vagrant + 自動化助手 Ansible
嗯,我知道你會問,既然都有 Docker 了,為什麼還要 Vagrant?Vagrant 是用來管理「虛擬機 (VM)」的。有時候,你會想模擬一個更真實的環境,比如「一台 Web 伺服器 + 一台資料庫伺服器」,這種多機器的場景,用 Vagrant 就很方便。它可以讓你用一個簡單的設定檔(叫 Vagrantfile)就定義好你需要的所有虛擬機。
Ansible 則是自動化設定的好幫手。當你用 Vagrant 把虛擬機開起來之後,總不能一台一台手動登入進去安裝軟體吧?太遜了。這時候就用 Ansible 寫一個劇本 (Playbook),讓它自動幫你在所有機器上裝好 Nginx、資料庫等等。
這兩個通常會一起用。安裝方法:
- 先去 VirtualBox 官網安裝 VirtualBox,這是 Vagrant 預設用來建立虛擬機的後端。
- 再去 Vagrant 官網安裝 Vagrant。
- Ansible 的安裝,Mac 上是
brew install ansible。Windows 的話比較麻煩,你得在之前裝的 WSL (Ubuntu) 裡面去安裝它。
這兩個工具的組合玩法很多,可以讓你很輕鬆就模擬出一個小型的伺服器叢集。
第五步:基礎設施的藍圖 - Terraform
最後,來談談 Terraform。這東西就是所謂的「基礎設施即代碼 (Infrastructure as Code, IaC)」。什麼意思呢?
想像一下,你前面做的所有事情:建立 Vagrant 虛擬機、寫 Ansible 劇本、定義 K8s 要部署什麼...這些步驟,你都可以用 Terraform 的程式碼把它們「描述」出來。然後只要執行 terraform apply,Terraform 就會像個魔法師一樣,自動去呼叫 Vagrant、Ansible、Kubernetes... 把你描述的整個環境全部變出來!
當你玩膩了,想全部砍掉重來,也只要一行 terraform destroy,所有東西就乾乾淨淨消失。這對於管理複雜的環境來說,真的超級無敵重要。
Terraform 的安裝也是去官網下載對應的執行檔就好。Mac 也可以用 brew install terraform。
對了,順便提一下,Terraform 是 HashiCorp 公司的產品,他們家還有 Vagrant,都是 DevOps 界響噹噹的工具。而 Kubernetes 最早是 Google 開源出來的,現在由 CNCF (雲原生運算基金會) 維護。了解這些背景也蠻有趣的,你會發現這些工具之間其實都有一些淵源。
不過,這套方法有極限嗎?
當然有。在筆電上搞這一套,說穿了就是個「練習場」,它跟真實世界的雲端環境還是有差的。
最大的限制就是你筆電的硬體。你的 CPU、記憶體、硬碟空間就這麼多,你不可能模擬出那種幾百台伺服器的大規模擴展情境。跑個三五台虛擬機或十幾個容器大概就是極限了,再多你的筆電風扇可能會像要起飛一樣。
還有,很多雲端平台專屬的服務,比如 AWS Lambda、Google Cloud Functions 這種 Serverless 的東西,或像是 AWS S3、GCS 這種物件儲存服務,你在本機上就沒有一模一樣的對應品。雖然有社群開發的替代方案,但終究不是原廠的。
所以,我會這樣建議:把本地實驗室當作你理解核心概念、練習工具操作、測試自動化腳本的地方。當你對這些工具都滾瓜爛熟之後,再把同樣的邏輯套用到雲端環境上,到時候你會發現一切都變得非常簡單,因為底層的原理都是相通的。
那接下來可以玩什麼?
當你把這個遊樂場蓋好之後,天空才是你的極限!這裡有幾個點子給你參考:
- 架設一個完整的 CI/CD 流程:可以試著在本機跑一個 Jenkins 或 GitLab Runner,設定一個自動化流程:當你把程式碼推送到 Git,它就自動打包成 Docker 映像檔,然後部署到你的本地 K8s 叢集。
- 打造微服務架構:寫幾個簡單的小服務(比如一個處理使用者、一個處理訂單),用 Docker 包起來,然後用 K8s 管理它們,讓它們互相溝通。
- 練習監控與告警:部署 Prometheus 和 Grafana(這兩個也都可以跑在 K8s 裡),學習如何監控你的應用程式,設定儀表板,甚至搞一個告警通知。
- 災難復原演練:這超好玩!故意手動把 K8s 裡的某個 Pod 刪掉,看看系統會不會自動把它救回來。或者把資料庫的容器關掉,看看你的應用程式會發生什麼事,然後練習怎麼修復它。
DevOps 的精髓不是背誦理論,而是動手實踐。老實說,光是看文章看影片,永遠學不會游泳。你的筆電就是你最安全、最便宜的游泳池。
所以,別再猶豫了。動手吧!你的 DevOps 遊樂場正在等著你,而且,它一毛錢都不會跟你收。
那你呢?你第一個想在你的本地實驗室跑什麼專案?是想挑戰 CI/CD,還是先從簡單的微服務開始?在下面留言分享一下你的想法吧!
