1. 程式人生 > 其它 >Kubernetes Pod概念

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

服務發現

https://www.cnblogs.com/linuxk/p/9605901.html
在這裡插入圖片描述