namespace 昨天開好了,今天要放東西進去,跑第一個 Pod
先講 Pod 是什麼。Kubernetes 不會讓你直接管 Container,它管的最小單位是 Pod,Container 是被包在 Pod 裡面的。一個 Pod 可以裝一個或多個 Container,同一個 Pod 裡的 Container 共用同一組網路跟儲存,可以用 localhost 互相溝通。不過大部分情況下一個 Pod 就只放一個 Container,今天也是這樣
最快的方式是 kubectl run,先不寫 YAML
kubectl run hello-pod -n ithome-lab --image=nginx:alpine
kubectl get pods -n ithome-lab

READY 那欄會顯示 1/1,意思是這個 Pod 裡的一個 Container 已經就緒
接著用昨天學的 describe 看細節
kubectl describe pod hello-pod -n ithome-lab

重點在最下面的 Events,它會照時間順序列出這個 Pod 發生過什麼事:被排到哪個 Node、開始拉 Image、拉完了、Container 被建立、啟動。昨天說 Events 之後排障會很重要,今天先看它正常的時候長什麼樣子,之後才知道哪裡不對勁
log 也可以直接看
kubectl logs hello-pod -n ithome-lab

Pod 現在是活著的,但我在瀏覽器連不到它。Pod 有自己的 IP,那個 IP 只在叢集內部有效,我的電腦其實在叢集外面。要暫時連進去可以用 port-forward
kubectl port-forward -n ithome-lab pod/hello-pod 8080:80
和 Day 2 的 docker run -p 8080:80 對照著看。docker 那個是啟動容器的時候就把 port 綁好,port-forward 則是事後臨時開一條路進去,關掉就沒了。它是除錯用的,不是正式讓外面連進來的方式
最後把它刪掉
kubectl delete pod hello-pod -n ithome-lab
kubectl get pods -n ithome-lab

明天見 :D

內文用 kubectl run 能快速起一個容器來驗證,真的很方便!
但實務上如果不用 YAML,直接透過命令列建立資源,常常會漏掉一些最佳實踐(例如 resources.limits/requests 的資源限制、readiness/liveness probe 健康檢查,或是 SecurityContext)。
想請教作者:在初期學習或快速 Debug 時,你會推薦先用 kubectl run ... --dry-run=client -o yaml > pod.yaml 生成基礎 Manifest 再補上這些設定,還是習慣直接從頭手寫/用 IDE 套版產生 YAML 呢?