返回
Featured image of post k8s - Workloads

k8s - Workloads

k8s - Workloads: Deployment&ReplicaSet / StatefulSet / DaemonSet / Job&CronJob

Workloads

會將應用服務部署於每一個Pod,Pod有其生命週期,由K8s內置的幾種方式(Deployment&ReplicaSet / StatefulSet / DaemonSet / Job&CronJob)運行於正確運行於其中。


Pod 生命週期

在建立一個pod可以檢查有沒有建立成功,最主要還是要看他的生命週期,來檢查Pod的建立是否有錯誤。

Value描述
PendingPod 已被 Kubernetes 系統接受,但有一個或者多個container尚未創建亦未運行。此階段包括等待 Pod 被調度的時間和通過網絡下載鏡像的時間
RunningPod 已綁定到了某個Node,Pod 中所有的container都已被創建。至少有一個容器仍在運行,或者正處於啟動或重啟狀態。
SucceededPod 中的所有container都已成功終止,並且不會再重啟。
FailedPod 中的所有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 : 運行一個或者多個以某種方式 監控 應用狀態的 Pods
  • DaemonSet : 每次你向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 們底下,之後會在整理幾篇。

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus