iT邦幫忙

2026 iThome 鐵人賽

DAY 7
0
Kubernetes

從零開始的雲端實戰:30 天 Kubernetes 核心觀念與部署指南系列 第 7

【Day 07】第一個 Declarative 部署:撰寫 Pod YAML 檔並部署 Nginx

  • 分享至 

  • xImage
  •  

今日目標

  • 理解宣告式管理(Declarative Management)與 Infrastructure as Code(IaC)的核心精神。
  • 掌握 Kubernetes YAML 設定檔的四大通用基礎欄位。
  • 親手撰寫第一個 Pod 定義檔(nginx-pod.yaml)並透過 kubectl apply 成功部署與存取。

為什麼要用 YAML?宣告式(Declarative)的核心精神

在 Day 05 中,我們使用了 kubectl run 這種指令式(Imperative)操作快速建立了 Pod。但在實際生產環境與團隊協作中,我們幾乎 100% 都會使用**宣告式(Declarative)**配置。

指令式 vs. 宣告式

  • 指令式(How to do):「請幫我開一個名為 nginx 的容器,映像檔用 nginx:latest,監聽 80 port。」
  • 宣告式(What you want):「這是一份設定檔,我期望系統中存在一個具備這些特徵的 Pod,請幫我維持這個最終狀態。」

宣告式配置的優勢

  1. 版本控制(Version Control):所有設定檔都可以納入 Git 進行版控與 Code Review。
  2. 可重複性與一致性:無論在哪個集群或環境執行相同的 YAML,產出的結果都完全一致。
  3. 支援 GitOps:現代自動化持續部署(CD)流程的基礎。

Kubernetes YAML 的四大核心要素

所有的 Kubernetes 資源物件定義檔,頂層都由以下四個欄位組成:

apiVersion: v1
kind: Pod
metadata:
  name: my-first-pod
spec:
  containers:
    - name: my-container
      image: nginx:latest
  1. apiVersion:定義該資源所屬的 API 版本與群組(例如核心物件 Pod 是 v1,之後學到的 Deployment 則是 apps/v1)。
  2. kind:指定要建立的資源物件類型(如 Pod, Deployment, Service)。
  3. metadata:資源的元資料,包含用來唯一識別的 name,以及用於分組檢索的 labelsannotations
  4. spec(Specification):最核心的區塊,詳細描述該資源的期望狀態與詳細規格(例如要跑什麼容器、映像檔版本、Port 設定、資源限制等)。

實戰演練:撰寫與部署第一個 Pod

步驟 1:建立 nginx-pod.yaml

在本地工作目錄建立一個名為 nginx-pod.yaml 的檔案,內容如下:

apiVersion: v1
kind: Pod
metadata:
  name: my-nginx-pod
  labels:
    app: web
    env: dev
spec:
  containers:
    - name: nginx-web
      image: nginx:1.25
      ports:
        - containerPort: 80

步驟 2:使用 kubectl apply 套用配置

打開終端機,執行以下指令將配置套用到 Minikube 集群中:

kubectl apply -f nginx-pod.yaml

輸出預期:

pod/my-nginx-pod created

小提醒:kubectl apply 具備冪等性(Idempotency),如果檔案內容沒變,重複執行只會顯示 unchanged;若修改了內容再執行,則會自動進行更新。

步驟 3:檢查 Pod 狀態與標籤

確認 Pod 是否成功跑起來:

kubectl get pods --show-labels

若看到 STATUSRunning,代表容器已經在背景順利運作。

步驟 4:本機端口轉發(Port Forwarding)測試

由於 Pod 預設只分配到集群內部 IP,我們的電腦本機瀏覽器無法直接連線。可以使用 kubectl port-forward 指令將本機的 Port 與 Pod 的 Port 建立通道:

kubectl port-forward pod/my-nginx-pod 8080:80

保持該終端機視窗開啟,打開瀏覽器訪問 http://localhost:8080,即可看到經典的 "Welcome to nginx!" 歡迎畫面!


踩坑紀錄:YAML 常見語法雷區

  1. 嚴格的縮排(Indentation):YAML 只能使用空格,嚴禁使用 Tab 鍵。層級縮排不一致會直接導致 API Server 解析失敗報錯 error: error parsing ...
  2. 大小寫敏感(Case-Sensitive):YAML 屬性名稱(如 containerPort)大小寫不可寫錯。

本日小結

恭喜完成第一週的最後一天!

回顧前 7 天,我們從架構觀念、Minikube 環境建置、kubectl 操作,一路推進到真正用宣告式 YAML 部署出自己的第一個應用程式。

然而,單純建立獨立的 Pod 在生產環境是非常脆弱的(Pod 若故障並不會自動重建)。
明天進入第二週 Day 08,我們將學習能夠保障高可用與自我修復的關鍵元件:「自癒與多副本:Deployment 與 ReplicaSet 如何確保 Pod 不掛掉?」


上一篇
【Day 06】最小運算單位:Pod 是什麼?為什麼不直接跑 Container?
系列文
從零開始的雲端實戰:30 天 Kubernetes 核心觀念與部署指南7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言