iT邦幫忙

2025 iThome 鐵人賽

DAY 27
0
佛心分享-我的私藏工具箱

開發環境設定指南及工具分享系列 第 27

Day27-[Hand-on]建立第一個K8s cluster

  • 分享至 

  • xImage
  •  

從零開始:用 Kind 打造你的第一個 K8s 叢集

這篇文章的目標很明確:帶你成功建立第一個本地的 Kubernetes (K8s) 叢集。我們先專注於「建立」,讓服務成功運行起來,至於複雜的 K8s 指令,我們可以在實際操作中慢慢熟悉。

為了達成這個目標,我準備了一個簡單而完整的範例專案,讓你一窺現代雲原生應用的基本樣貌。

這個專案包含了什麼?

  • 叢集基礎 (Kind):我們將使用 Kind (Kubernetes in Docker) 來模擬 K8s 環境。它非常巧妙地將每個 K8s 節點(Node)都打包成一個 Docker 容器,讓你在本機就能輕鬆擁有一個多節點的叢集。

  • 一個前端服務:一個簡單的 Web 介面。

  • 一個後端服務:一個提供 API 的 HTTP 伺服器。

  • 流量入口 (Nginx Ingress):在 Port 80/443 上部署一個 Nginx Ingress Controller,它就像是整個叢集的交通警察,負責將外部流量導向到正確的服務。

  • 域名服務 (sslip.io):透過 sslip.io 這個免費的公開 DNS 服務,讓我們能用一個漂亮的網址(而不是 localhost:8080 這種形式)來訪問我們的應用。

專案連結https://github.com/kevinyay945/learn-devops-iac-kind

動手實作:一步步建立你的本地王國

第一步:事前準備與環境確認

在魔法開始之前,請確保你的開發環境已經安裝好必要的工具。

  1. 安裝 Kind:請參考 Kind 官網 的指引,將 Kind 這個核心工具安裝好。

  2. 安裝 Docker:Kind 的一切都運行在 Docker 之上,請確保 Docker Desktop 正在你的電腦上運行。

  3. 安裝 kubectl:這是與 K8s 叢集溝通的官方命令列工具,後續所有操作都會依賴它。

首先,從 GitHub 下載範例專案,並進入專案目錄。

git clone https://github.com/kevinyay945/learn-devops-iac-kind.git
cd learn-devops-iac-kind

接著,驗證 Kind 是否安裝成功。這是一個很好的除錯起點。

kind version

如果你看到類似 kind v0.20.0 的版本資訊,代表工具已準備就緒。

第二步:建立 Kubernetes 叢集

這是最關鍵的一步。我們將使用 Kind,根據預先定義好的設定檔來建立叢集。

kind create cluster --config ./component/kind/kind-config.yaml

洞見:這個指令的靈魂在於 --config 所指向的 kind-config.yaml 檔案。這個檔案定義了叢集的拓撲結構,其中最關鍵的設定是 extraPortMappings,它負責將你電腦的 Port 80 和 443 映射到 Kind 叢集內部的對應 Port。若沒有這個設定,外部世界的所有請求都將被擋在叢集之外,我們部署的任何服務都將無法訪問。

第三步:安裝 Ingress Controller

叢集本身只提供了運行的基礎設施,但它還不知道如何處理來自外部的 HTTP/HTTPS 請求。這時,我們需要一個「交通指揮官」的角色,也就是 Ingress Controller。

pushd ./component/ingress/scripts
./ingress-for-kind.sh
popd

這個腳本會自動幫我們安裝社群推薦的 Nginx Ingress Controller。安裝完成後,我們可以檢查它是否正常運行。

kubectl get pods -n ingress-nginx -o wide

你應該會看到一個 ingress-nginx-controller-... 的 Pod,且其 STATUS 為 Running。這表示我們的交通指揮官已經上崗了。

第四步:部署我們的應用程式

萬事俱備,現在我們可以將範例專案中的前端和後端服務部署到叢集裡了。

kubectl apply -k .

洞見:這裡 -k . 參數的威力在於它啟用了 Kustomize。kubectl 會讀取當前目錄下的 kustomization.yaml 檔案,並根據其定義,一次性地建立所有相關的 K8s 資源,包括前端的 Deployment、後端的 Deployment、對應的 Service 以及最重要的 Ingress 規則。這是一種比單獨 apply 每一個 yaml 檔更現代、更具擴展性的管理方式。

第五步:見證奇蹟的時刻

所有服務都已部署並運行。現在,打開你的瀏覽器,訪問以下兩個網址:

懶人包:一鍵啟動腳本

如果你已經熟悉了前面的步驟,或者只是想快速啟動環境,可以直接執行以下整合腳本,它會自動完成叢集建立、Ingress安裝和應用部署的所有工作。

kind create cluster --config ./component/kind/kind-config.yaml
pushd ./component/ingress/scripts
./ingress-for-kind.sh
popd
kubectl apply -k .

它是如何運作的?

當你在瀏覽器輸入網址時,一趟奇妙的旅程就此展開:

  1. DNS 解析sslip.io 服務會自動將 127.0.0.1.sslip.io 這個域名解析回 127.0.0.1,也就是你的本機 IP。

  2. 端口映射:請求到達你電腦的 80 Port,並被 Docker 轉發到 Kind 容器內部的 80 Port (歸功於第二步的設定)。

  3. Ingress 路由:Kind 容器內的 Nginx Ingress Controller 接收到請求,並根據請求的 Hostname (frontend...或 backend...),查詢它所管理的 Ingress 規則。

  4. 服務轉發:Ingress 找到對應的規則,將請求精準地轉發到叢集內部的前端或後端服務 (Pod)。

  5. 成功響應:你的瀏覽器最終收到了來自 K8s 叢集內部服務的回應,並成功渲染頁面。

恭喜!你已經成功在本地端建立並運行了一個功能完整的 Kubernetes 應用。從這裡開始,你便有了一個可以隨意實驗、不怕玩壞的 K8s 沙盒環境。

清理戰場:刪除叢集

當你實驗完畢,想要釋放電腦資源時,只需要一行指令就可以將 Kind 建立的整個叢集(包含裡面所有的應用)完整刪除,不會留下任何殘餘。

kind delete cluster

這個指令會刪除預設名稱為 kind 的叢集。如果你的叢集在建立時有透過 --name 參數自訂名稱,刪除時也需要用同樣的名稱來指定。


上一篇
Day26-K8s是怎麼組成跟互動的呢
系列文
開發環境設定指南及工具分享27
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言