傲視Kubernetes(三):Kubernetes中的Pod

從本文開始,將正式開始Kubernetes的核心內容學習。首先要了解的是Pod,總共大約分爲六篇左右,本篇是第一篇,相信學完以後,咱們會對Pod有一個總體的理解。linux

本文內容:docker

一、什麼是Pod網絡

二、Pod的特性oop

 

1、什麼是Pod學習

Pod是Kubernetes中最基本的調度、管理單元,其餘的Kubernetes對象好比各類controller、svc,都是對Pod的動態管理和使用。能夠說,Pod是Kubernetes中最核心的定義,沒有之一。spa

Kubernetes規定,每一個Pod必須運行在一個Node上。Node在Kubernetes中的概念相似於物理主機,而每一個Pod就是運行在物理主機上的虛擬機,這樣的對比雖然不那麼嚴謹,但有助於開始的理解。下面是它們的關係圖:操作系統

 

 上圖中每一個Pod中均可以有一個至多個容器,此處的容器指的就是docker中的容器(固然也支持其餘的容器化技術),容器中運行的就是咱們的代碼。能夠看出來,Kubernetes的設計者將容器與對容器的管理分開了,中間加了一層Pod來負責生命週期的管控,若是容器運行過程當中因爲環境異常致使Pod掛掉,則Kubernetes會建立新的Pod從新運行容器,經過分層達到更好的管控效果。設計

雖然一個Pod中能夠運行多個容器,但一般,仍是建議一個Pod同一時間只運行一個容器,分散部署能夠更好的利用Pod的擴縮容能力。對象

2、Pod的特性blog

既然上面說了Pod相似於運行在宿主機上的虛擬機,那麼Pod自己有什麼特性呢?它和虛擬機的區別點又是什麼?

先來看Pod與虛擬機的區別。在本系列的第二篇文章中,提到過docker容器與虛擬機的區別與聯繫,其實一個docker容器的體量是比虛擬機小的,相較而言,Pod更像虛擬機。它們都能運行多個容器,有獨立的網絡命名空間。最大的區別仍是虛擬機有本身的操做系統。

再來看Pod自己的特性。每一個Pod都有獨立的Linux命名空間和linux控制組(cgroup),前者可使每一個Pod有本身的系統視圖,包括文件、進程、主機名等,後者可使每一個Pod有本身的系統資源,好比CPU、內存、網絡帶寬等。Kubernetes會給每一個Pod分配一個獨立的虛擬IP,這個IP在當前Kubernetes集羣中是惟一的。

下面是幾個相關問題:

一、Pod中的多個容器問題及解決

對於普通的docker容器來講,每一個容器都有本身的PID linux命名空間,即容器內的進程系列號是獨立的,徹底可能與另外一個容器內的PID相同。並且每一個容器都有獨立的文件系統

但容器的上述特性,尤爲是獨立進程系列號的特性,會給一個Pod中的多個容器產生麻煩。Kubernetes是如何解決的?它經過配置docker來讓一個Pod內的全部容器共享相同的linux命名空間,因此它們就有了相同進程樹,而且都共享相同的主機名和網絡接口。第二個特性【每一個容器有獨立的文件系統】,Kubernetes提供了共享文件目錄來解決文件不共享的問題,共享文件在後面會進行學習。

此處還需注意,因爲同一Pod的多個容器共享同一個網絡命名空間,因此端口不能衝突。

二、Pod中的多容器之間以及Pod間的通信

同一Pod中的多容器具備相同的loopback網絡接口,因此能夠用localhost+端口進行通訊

Kubernetes的全部Pod處於同一個共享網絡地址空間中,因此Pod間能夠經過Pod的ip來進行訪問,它們之間沒有網絡地址轉換網關(NAT),能夠像局域網同樣通訊。

 

本篇就到這裏,下一篇將學習Pod的建立及使用。

相關文章
相關標籤/搜索