kubectl 的語法結構與運作機制。在 Day 03 中我們提到,Control Plane 的唯一對外窗口是 kube-apiserver。而 kubectl 就是 Kubernetes 官方提供的命令列工具(CLI),它的作用就是將我們的指令轉換為 REST API 請求,發送給 kube-apiserver 來操作集群資源。
大部分的 kubectl 指令都遵循非常直觀的語法規則:
kubectl [動作 verb] [資源類型 type] [資源名稱 name] [可選參數 flags]
常見的「動作」包含:
get:查看資源列表或摘要describe:查看資源的詳細規格與即時事件(Event)logs:輸出容器的執行日誌create / run:建立資源delete:刪除指定資源在 Kubernetes 中,操作資源有兩種主要模式:指令式(Imperative) 與 宣告式(Declarative)。
今天我們先用最直觀的「指令式操作」來跑一次完整的應用生命週期。
使用 kubectl run 快速建立一個名為 my-nginx 的 Pod:
kubectl run my-nginx --image=nginx:latest
查看當前 Namespace 下所有運行的 Pod:
kubectl get pods
加上 -o wide 參數,可以查看到更多資訊(例如 Pod 分配到的內部 IP 與運行的 Node):
kubectl get pods -o wide
當 Pod 出現問題或處於 Pending 狀態時,describe 是最重要的診斷工具:
kubectl describe pod my-nginx
滑到輸出最下方的 Events: 區塊,可以看到 Scheduler 排程、Image 拉取以及容器啟動的完整歷程。
讀取容器內部應用程式印出的 log:
kubectl logs my-nginx
如果想即時追蹤 log 輸出,可以加上 -f 參數:
kubectl logs -f my-nginx
類似於 docker exec,可以進入運行中的 Pod 進行互動式除錯:
kubectl exec -it my-nginx -- /bin/bash
輸入 exit 即可離開容器。
測試完畢後,將建立的 Pod 刪除:
kubectl delete pod my-nginx
~/.zshrc 或 ~/.bashrc)中加入:alias k="kubectl"
之後所有指令都可以簡寫為 k get pods。
2. 快速產生 YAML 範本(Dry-run):
指令式操作最厲害的地方,在於可以「只產生 YAML 結構而不真正建立資源」:
kubectl run test-pod --image=nginx --dry-run=client -o yaml
這在後續撰寫設定檔時能省下大量打字時間。
今天我們熟悉了 kubectl 的標準語法,並實際演練了從建立、查詢、查看日誌到刪除 Pod 的完整指令式操作流程。
雖然用單行指令建 Pod 很方便,但 Pod 到底是什麼?為什麼 K8s 不直接跑 Container 而是包一層 Pod?
明天 Day 06,我們將正式深入剖析:「最小運算單位:Pod 是什麼?為什麼不直接跑 Container?」!