iT邦幫忙

2026 iThome 鐵人賽

DAY 2
1
Kubernetes

不囉唆圖解 Kubernetes系列 第 2

Day 2:5分鐘登島,用 Kind 蓋出你的第一座雲之島 Cluster

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20260914/20124462e5N2wsEAyJ.png

Day 2:5分鐘登島,用 Kind 蓋出你的第一座雲之島 Cluster

痛點

你不想為了學 K8s 先去開一台雲主機、綁一張信用卡。
你只想在自己筆電上,五分鐘內看到東西跑起來。

故事開始
一座空盪盪的叢集島上,由燈塔村(Control Plane,指揮中心)坐鎮,裡面有負責接聽指令的燈塔櫃檯(API Server)。
島上長出第一棵樹(Node),樹枝上掛著一顆剛吹出來的泡泡(Pod),泡泡(Pod)裡有一隻小鳥(Container)。

Kind 是 Kubernetes IN Docker 的縮寫。
它把 Kubernetes 的節點塞進 Docker 容器裡,定義上,它是一個利用 Docker 容器來模擬 Kubernetes 叢集的本機開發與測試工具。

島是 Kind 蓋的,蓋壞了三十秒就能砍掉重來,可以大膽隨便動手,只負責蓋島跟拆島,蓋完就退到一邊;之後要跟島上做操作,通常是靠哨子(kubectl)聯絡櫃檯。

Kind 蓋完島會自動幫你把 kubectl 指到這座新島上,所以不用做任何連線設定,裝完就能用。

https://ithelp.ithome.com.tw/upload/images/20260914/20124462xLm56FO5al.png

哨子(kubectl)

哨子kubectl,我們對島上下的每一個指令都從它發出去。
哨聲吹出去,會直接送到燈塔櫃檯(API Server),定義上它是島上接收所有指令的單一對外窗口。

https://ithelp.ithome.com.tw/upload/images/20260914/20124462C94CdEDByN.png

動手 5 分鐘

今天從零開始,結束時你會有一座叢集和一個能在瀏覽器打開的 hello 服務。

先確認 Docker 有開,這是整篇的前提:

docker ps

有正常吐出表格就代表 Docker 活著。
如果看到 Cannot connect to the Docker daemon,去把 Docker Desktop 打開再回來。

裝 Kind 和 kubectl(macOS 用 Homebrew,其他平台看官方安裝頁):

brew install kind kubectl
kind version
kubectl version --client

兩個版本號都印出來就可以往下走。

蓋島:

kind create cluster --name hello

這行會跑一到兩分鐘,畫面上會一行行印出 Preparing nodes、Writing configuration、Starting control-plane。最後看到 Set kubectl context to "kind-hello",島就蓋好了。

看看島上有什麼樹:

kubectl get nodes

你會看到一列 hello-control-plane,STATUS 是 Ready
這就是圖上那棵巢樹(Node)。如果 STATUS 是 NotReady,等十秒再打一次,它還在開機。

吹出第一顆泡泡(Pod),跑起這 30 天都會用的 Nginx hello 服務:

kubectl run hello --image=nginx:alpine
kubectl get pods

第一次打 get pods 可能看到 ContainerCreating,是正在拉 image。過幾秒再打一次,STATUS 變成 Running 就成功了。

把它接到瀏覽器:

kubectl port-forward pod/hello 8080:80

畫面會停在 Forwarding from 127.0.0.1:8080 -> 80 不動,這是正常的,別關掉它。打開瀏覽器輸入 http://localhost:8080,你會看到 Nginx 的 Welcome 頁。

https://ithelp.ithome.com.tw/upload/images/20260914/20124462bOpfOU9JVn.png

這頁長得很陽春,但它是從你剛蓋好的叢集裡送出來的,島上第一顆泡泡(Pod)開始工作了。

如果它說 address already in use,代表 8080 被別的程式佔了,把指令改成 8081:80,網址也跟著改成 8081。前面那個數字是你電腦上的埠、後面那個是泡泡(Pod)裡的埠,改前面不會影響服務本身。

另外兩個常見狀況先寫在這裡,省得你自己撞:Pod 一直停在 ContainerCreating 超過一分鐘,通常是網路太慢還在拉 image,先等;瀏覽器打不開但 port-forward 沒報錯,先確認網址打的是 http 不是 https,Nginx 這裡只開 80。

要收工的時候,Ctrl+C 停掉 port-forward。
叢集留著,明天還要用。
真的想砍掉重來就打 kind delete cluster --name hello

最後提醒一下,Kind 是拿來學和測試的,不是拿來上線的。

它的樹是 Docker 容器模擬的,整座島跑在一台筆電上,這台電腦關機島就沒了。
正式環境的叢集會有好幾棵真的機器當 Node,而且燈塔村本身也會開好幾份互相備援。

但這不影響你學:你這 30 天打的每一個指令、寫的每一份 YAML,搬到正式環境時,資源寫法大致相同,但儲存、網路、權限與叢集設定通常要調整。
差別主要在底下有幾棵樹、樹是什麼做的,以及環境相關設定,這也是 K8s 的好處。

另外,你電腦上可以同時有好幾座島,哨子(kubectl)靠 context 決定要對哪一座說話:

kubectl config get-contexts

前面有星號的那一行,就是哨子(kubectl)現在對著的島。
之後你如果同時開了公司的叢集和自己的 Kind,記得先看這行再打指令。

帶走一句話

島是 Kind 蓋的,之後都靠哨子(kubectl)說話。

參考資源


上一篇
Day 1:一台機器管不動了,為什麼會有 K8s?
下一篇
Day 3:雲之島全景圖, 一張圖說完 Cluster、Node、Pod
系列文
不囉唆圖解 Kubernetes6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言