5. 認識服務編排工具-Kubernetes

  1.  瞭解kubernetes

 

 

 

k8s首先也是需要一個集羣的,中間的七邊形是k8s的master節點,可以理解爲安裝了k8s核心組件的主機,周圍的3個六邊形稱爲node節點,在k8s中也就是工作節點,每個工作節點上運行了一個kubelet服務和一個docker服務,kubelet相當於當前節點運行時的主管,會管理當前node上運行的所有服務,master中的deployment表示一個部署,什麼叫部署呢,比如說運行nginx叫一次部署,然後把

nginx擴容到兩個實例,也叫一次部署,或者把nignx的端口從80改成8080也叫一次部署。周圍的containerized app表示在node上運行的各個容器化的應用, 這個過程可以理解爲master發起了一個deployment,然後選中3個node節點其中的一個,部署了新的應用,運行在容器中。上圖右上角圖中的圓圈表示pod,下面我們介紹一下什麼是pod

 

 pod是k8s概念中最小的單元,可以理解爲原子。pod裏面是容器,我們可以看到pod1,裏面運行了一個容器,pod1同時自己有獨立的ip地址10.10.10.1,pod2中運行了一個容器,還有一個掛載的磁盤,這個容器的ip地址是10.10.10.2,第三個pod裏面有兩個容器,但是隻有一個ip地址10.10.10.3,所以這兩個容器是可以共享網絡ip的,同時可以共享存儲,pod4中有多個容器,多個磁盤,說明一個pod中多個容器可以共享多個磁盤存儲。

pod裏面運行容器中,pod自己是運行在node上的。kubelet則負責調度pod,把pod運行起來,一個node上可以有任意多個pod,只要資源足夠的話。

 

pod知道後,我們進入下一個概念,叫做service,上圖中中間是master節點,其餘3個是worker節點,先看最下面的node節點,我們看到它上面運行一個pod,而pod的外面還有一層虛線,這層虛線就表示service,pod自己有一個ip 192.168.10.1,而service也有一個ip 192.168.9.1,爲什麼pod有而外面還要再包一層serviceip呢? 比如如果我們這個192.168.10.1的pod掛掉了,需要新的ip來替代,我們還是能通過service ip 192.168.9.1找到員選pod 的位置來替代它。

我們再看一下上面的兩個node,一共是運行了3個node,在多個應用的情況下,一般都是同一個應用的多個副本,對一個應用進行擴容,從一個實例擴成了3個實例,對外提供相同的服務。這個時候 Service的ip除了能定位到pod的地址外,還可以對多個pod的地址進行負載均衡。 

 

哪些pod可以定位成一個service呢,k8s使用的方式是Label Selector,當定義service的時候,可以給他指定一個標籤,比如app=B,這樣一個key value對屬於service B,那所有帶app=B 標籤的都是屬於service B,然後它搜索所有的pod,

將app=B標籤的pod歸爲seivice B,這讓pod和service之間的耦合變得特別松。

 

下面我們看一下使用deployment進行應用擴容的過程,首先從master節點發起一個Deployment,想給Service的pod擴容成4個實例,目前只有一個實例。擴容的目標對象就是pod

 

擴容完成,service自動包含新的pod,它是通過標籤知道新的pod的,多個pod就可以進行負載均衡。

 

 

 

 

 

 

 

下面我們看一下更新的過程,首先停掉了一個pod,又啓動了一個新的pod,此時pod新的版本和舊的版本都存在,然後又停掉下面一個,啓動一個新的。一直到

所有舊的停掉新的啓動,service的擴容就完成了。在這個過程中,service的ip是不變的。

 

 

下面我們看一下k8s的整體架構,首先從總體上看,上面是master節點,下面有兩塊,分別是兩個worker節點。

 

 

 

 

 

 

 

 

pod通訊有三種方式,一種是同一個pod之間的容器之間進行通信,這種方式使用localhost+端口就可以通訊,比較簡單

 

第二種是同一個Node不同節點之間的通信,他們之間可以通過網橋進行通訊,訪問方式通過pod ip直接訪問

 

第三種是不同Node不同pod之間的通信,前提條件是pod的ip不能相同,並且pod的ip和node所在的ip關聯起來,這樣pod之間就可以相互訪問。

 

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