Workloads
會將應用服務部署於每一個Pod,Pod有其生命週期,由K8s內置的幾種方式(Deployment&ReplicaSet / StatefulSet / DaemonSet / Job&CronJob)運行於正確運行於其中。
Pod 生命週期
在建立一個pod可以檢查有沒有建立成功,最主要還是要看他的生命週期,來檢查Pod的建立是否有錯誤。
Value | 描述 |
---|---|
Pending | Pod 已被 Kubernetes 系統接受,但有一個或者多個container尚未創建亦未運行。此階段包括等待 Pod 被調度的時間和通過網絡下載鏡像的時間 |
Running | Pod 已綁定到了某個Node,Pod 中所有的container都已被創建。至少有一個容器仍在運行,或者正處於啟動或重啟狀態。 |
Succeeded | Pod 中的所有container都已成功終止,並且不會再重啟。 |
Failed | Pod 中的所有container都已終止,並且至少有一個container是因為失敗終止。也就是說,容器以非 0 狀態退出或者被系統終止。 |
Unknown | 因為某些原因無法取得 Pod 的狀態。這種情況通常是因為與 Pod 所在主機通信失敗。 |
範例:
kubectl config set-context --current --namespace=<namespace>
kubectl create deploy nginx --image=nginx
kubectl get pod
kubectl describe pod/<pod-name>
... pod其他相關資訊
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 58m default-scheduler Successfully assigned default/nginx-6799fc88d8-kkk46 to docker-desktop
Normal Pulling 58m kubelet Pulling image "nginx"
Normal Pulled 58m kubelet Successfully pulled image "nginx" in 29.1586262s
Normal Created 58m kubelet Created container nginx
Normal Started 58m kubelet Started container nginx
Deployment
&ReplicaSet
: 替換原來的資源ReplicationController
,Deployment 很適合用來管理你的 cluster 上的無狀態應用,Deployment 中的所有 Pod 都是相互等價的,並且在需要的時候被換掉StatefulSet
: 運行一個或者多個以某種方式 監控 應用狀態的 PodsDaemonSet
: 每次你向cluster 中添加一個新 Node 時,如果該節點與某 DaemonSet 的規約匹配,則控制面會為該 DaemonSet 調度一個 Pod 到該新節點上運行。Job
&CronJob
: 執行一次(Job) Pod 或是 定期執行一次(CronJob) Pod
常用情境
- Deployment : 運行的 web Server
- StatefulSet : 監控插件 EX: Prometheus
- DaemonSet : 每個 Node 都必須要有的 Server
- Job / CronJob : 更新資料庫的 Query 可以走 Job,定期要執行的工作走 CronJob
結語:
在撰寫.yaml
時,我的習慣是把Pod相關設定寫進 Workloads 們底下,之後會在整理幾篇。