pod控制器類型以及網絡通訊方式

pod控制器類型以及網絡通訊方式

pod概念:
自主式pod:一旦死亡 不會進行拉起
控制器管理的pod:死亡後 控制器進行拉起
pod:一個pod裏面可能有多個容器
運行pause(跑死),容器共用pause的網絡站,共用pause的存儲卷,進程不會進行隔離;
在同一個pod裏 不能端口衝突;

在這裏插入圖片描述

控制器:
1、replicationcontroller :用來保證容器應用的副本數始終保持在用戶定義的副本數,如果有容器異常退出,會創建新的pod來代替;如果異常多出來的容器也會被自動回收
在新版版的kubernetes中建議使用replicaset來代替replicationcontroller
**2、replicaset :**和replicationcontroller 沒有本質不同 只是名字不同並且relicaset支持集合式的selector;可以使用打標籤的方式進行指定集合
**3、deployment:**雖然一般replicaset 可以獨立使用,但是一般還是建議使用1deployment來自動管理replocaset 這樣無需擔心和其他機制不兼容的問題(比如replicaset不支持rolling-update,但是deployment支持)

deployment流程圖

在這裏插入圖片描述
deployment ---->創建rs------>創建pod
deployment不直接管理pod

4、horizon pod autoscaling 僅適用於deployment和RS 在v1版中僅支持根據pod的CPU利用率擴容,在vlapha版本中 支持根據內存和用戶自定義的metric擴容縮容

在這裏插入圖片描述

**5、statufulset:**是爲了解決有狀態服務的問題(對應deployment和replicaset是爲無狀態服務而設計),其應用場景包括:
1、穩定的持久化存儲,pod重新調度後還能訪問到相同的持久化數據,基於PVC實現
2、穩定的網絡標誌,pod重新調度後其podname和hostname不變,基於headless service實現(沒有cluster ip和service)
3、有序部署,有序擴展,pod是有順序的,在部署或者擴展時要依據定義的順序依次進行,基於init container來實現
4、有序收縮,有序刪除

6、daemonset:確保全部node節點上運行一個pod的副本。當有node加入集羣時,也會爲他們新增一個pod。當有node從集羣移除時,這些pod也會被回收,刪除daemonset將會1刪除1他們創建的所有的pod

使用daemonset的一些典型用戶:
1、運行集羣存儲daemon,例如在每個node上運行glusterd、ceph
2、在每個node上運行日誌收集daemon,例如fluentd、logstash
3、在每個node上運行監控daemon,例如Prometheus node exporter

7、job 負責批處理任務,僅執行一次的任務,他保證批處理任務的一個或者多個pod成功結束
cron job 管理基於時間的job :
1、在給定時間點只運行一次
2、週期性在給定時

服務發現 service:
service服務發現是通過標籤進行選擇的

在這裏插入圖片描述

網絡通訊模式
kubernetes的網絡模型假定了所有pod都在一個直接連通的扁平的網絡中,這在GCE裏面是現成的網絡模型,kubernetes假設這個網絡已經存在。
而在私有云裏搭建kubernetes集羣,就不能假定這個網絡已經存在了。我們需要自己實現這個網絡假設,將不同節點上的docker 容器之間的互相訪問先打通,然後運行kubernetes。

同一個pod的多個容器之間:lo
各個pod之間的通訊:overlay network
pod和service之間的通訊:各個節點的iptables規則

flannel網絡:

簡單來說,他的功能是讓集羣中的不同節點主機創建的docker容器都具有全集羣唯一的虛擬IP地址,而且他還能在這些IP地址之間建立一個覆蓋網絡(overlay network)通過這個覆蓋網絡,將數據包原封不動地傳遞到目標容器內

在這裏插入圖片描述

etcd的flannel提供說明:
1、存儲管理flannel可分配的IP地址段資源
2、監控etcd中每個pod的實際地址,並在內存中建立維護pod節點路由表

不同情況下網絡通訊方式
同一個pod內部通訊:
同一個pod共享同一個網絡命名空間 共享同一個linux協議棧
pod1至pod2:
1、pod1和pod2不在同一臺,pod的地址與docker0在同一個網段的,但是docker0網段與宿主機網卡是兩個完全不同的ip網段,並且不同node之間的通訊只能通過宿主機物理網卡進行。將pod的ip所在node的IP地址關聯起來,通過這個關聯讓pod可以相互訪問
2、pod1與pod2在同一臺機器,由docker0網橋直接轉發請求到pod2 不需要經過flannel

pod至service的網絡:
目前基於性能考慮,全部爲iptables維護和轉發

pod到外網:
pod向外網發送請求,查找路由表,轉發數據包到宿主機的網卡,宿主機網卡完成路由選擇後,iptables執行masquerade,把源ip更改爲宿主機網卡的ip,然後向外網服務器發送請求

外網訪問pod service

kubernetes中的網絡類型:
service網絡:虛擬網絡
pod網絡:虛擬網絡
節點網絡:只有節點網絡是真實的網絡

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章