Kubernetes Pod概念
技術標籤:Kubernetes
Pod型別
- 自主式Pod:當Pod宕機不會重新開啟一個新的Pod
- 控制器管理的Pod:當Pod宕機,如果不滿足當前的期望值則會重新開啟一個Pod
Pod概念
https://blog.csdn.net/qq_33712668/article/details/107781653
注:1、同一個Pod中的多個容器可以共享Pod級別的儲存卷Volume,Volume可以定義為各種型別,多個容器各自進行掛載,將Pod的Volume掛載為容器內部需要的目錄。
2、同一Pod裡容器埠不能衝突
3、同一Pod網路地址是一樣的
4、舉例:如果同一Pod之間裡的容器需要互相通訊則寫localhost即可
Pod控制器型別
- ReplicationController & ReplicaSet & Deployment
- HPA(HorizontalPodAutoScale)
- StatefullSet
- DaemonSet
- Job,Cronjob
ReplicationController
ReplicationController 用來確保容器應用的副本數始終保持在使用者定義的副本數,即如果有容器異常退出,會自動建立新的Pod 來替代;而如果異常多出來的容器也會自動回收。在新版本的Kubernetes 中建議使用ReplicaSet 來取代ReplicationControlle
ReplicaSet
ReplicaSet 跟ReplicationController 沒有本質的不同,只是名字不一樣,並且ReplicaSet
支援集合式的selector
雖然ReplicaSet 可以獨立使用,但一般還是建議使用Deployment 來自動管理ReplicaSet ,這樣就無需擔心跟其他機制的不相容問題(比如ReplicaSet 不支援rolling-update 但Deployment 支援)
Deployment
Deployment 為Pod 和ReplicaSet 提供了一個宣告式定義(declarative) 方法,用來替代以前的ReplicationController 來方便的管理應用。典型的應用場景包括:
- 定義Deployment 來建立Pod 和ReplicaSet
- 滾動升級和回滾應用
- 擴容和縮容
- 暫停和繼續Deployment返回
HPA(HorizontalPodAutoScale)
Horizontal Pod Autoscaling 僅適用於Deployment 和ReplicaSet ,在V1 版本中僅支援根據Pod 的CPU 利用率擴所容,在v1alpha 版本中,支援根據記憶體和使用者自定義的metric 擴縮容
StatefullSet
StatefulSet是為了解決有狀態服務的問題(對應Deployments 和ReplicaSets是為無狀態服務而設計),其應用場景包括:
- 穩定的持久化儲存,即Pod 重新排程後還是能訪問到相同的持久化資料,基於PVC 來實現
- 穩定的網路標誌,即Pod 重新排程後其PodName和HostName不變,基於Headless Service (即沒有Cluster IP 的Service )來實現
- 有序部署,有序擴充套件,即Pod 是有順序的,在部署或者擴充套件的時候要依據定義的順序依次依次進行(即從0 到N-1,在下一個Pod 執行之前所有之前的Pod 必須都是Running 和Ready 狀態),基於init containers 來實現
- 有序收縮,有序刪除(即從N-1 到0)返回
DaemonSet
DaemonSet 確保全部(或者一些)Node 上執行一個Pod 的副本。當有Node 加入叢集時,也會為他們新增一個Pod 。當有Node 從叢集移除時,這些Pod 也會被回收。刪除DaemonSet 將會刪除它建立的所有Pod
使用DaemonSet 的一些典型用法:
- 執行叢集儲存daemon,例如在每個Node 上執行glusterd、ceph。
- 在每個Node 上執行日誌收集daemon,例如fluentd、logstash。
- 在每個Node 上執行監控daemon,例如Prometheus Node Exporter
Job,Cronjob
Job 負責批處理任務,即僅執行一次的任務,它保證批處理任務的一個或多個Pod 成功結束
Cron Job管理基於時間的Job,即:
- 在給定時間點只執行一次
- 週期性地在給定時間點執行
在上邊我們提到了Deployment支援rolling-update,接下來我們來學習一下Deployment的更新流程
deployment、replicaset、pod之間的關係
https://www.cnblogs.com/wangkun122/articles/12707216.html
+------------+
| deployment |
+-----+------+
|
|
|
|
+--------------------------------------------------+
| | |
| | |
| | |
| | |
| | |
| | |
+------v------+ +------v------+ +------v------+
|replicaset:v1| |replicaset:v2| |replicaset:v3|
+-------------+ +------+------+ +-------------+
|
|
+--------+---------+
| |
| |
+---v---+ +---v---+
|pod:v2 | |pod:v2 |
+-------+ +-------+
- deployment排程replicaset,pod由replicaset排程
- deployment管理多個replicaset版本,可用於回滾
- replicaset控制pod的行為,包括新增pod、刪除pod
注:如果我們需要更新Department他會先啟用一個新的Replicaset,然後在關閉老的Replicaset在新的Replicaset裡啟用Pod
注意事項:
- 新Replicaset在啟用的時候確保Pod已經正常Run的狀態才會關閉老Replicaset對應的Pod