1. 程式人生 > >Docker系列(十一):kubernetes叢集叢集部署實踐

Docker系列(十一):kubernetes叢集叢集部署實踐

Kubernetes分散式叢集架構

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
服務註冊和服務發現問題怎麼解決的?
分散式通訊的核心就是ip加埠
每個服務分配一個不變的虛擬IP+埠
系統env環境變數裡有每個服務的服務名稱到IP的對映
如下:
在這裡插入圖片描述

client = new redis\Client([
'scheme' => 'tcp',
'host' => getenv('REDIS_MASTER_SERVICE_HOST') , 
'port' => $read_port,
]);

對程式沒有任何的入侵

服務的負載均衡問題怎麼解決的?
每個節點上都有一個軟體實現的服務代理來實現負載均衡
在這裡插入圖片描述


kube-proxy每個node上都會部署,一個任務是代理,一個任務是負載均衡。
kube-proxy如上圖所示,既可以轉發給本地的po的,也可以轉發給其他的node中pod

服務的規模部署問題怎麼解決的?
在這裡插入圖片描述
服務運維問題如何解決的?
自動監控、自我修復
在這裡插入圖片描述
在這裡插入圖片描述

Kubernetes 叢集架構例子

在這裡插入圖片描述
在這裡插入圖片描述

1.建立redis-master Pod和服務

redis-master-controller.yaml,下面給出了該檔案的完整內容
在這裡插入圖片描述
在這裡插入圖片描述

2. 建立redis-slave Pod和服務

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

3. 建立php frontend Pod和服務

在這裡插入圖片描述
在這裡插入圖片描述
注意:type:nodeport每一個node上開一個埠,訪問任何一個node的30001就可以到容器裡面的80,相當於docker中的埠對映,就是講容器中的埠對映到主機上的埠,為了讓叢集之外的能訪問容器的port,應為容器是屬於內部的,叢集之外的是訪問不了的。
在這裡插入圖片描述


根據是讀操作還是寫操作來判斷走哪個
在這裡插入圖片描述
注意:訪問的地址是node節點的ip而不是master加點的ip

叢集運維常見問題

資源隔離與排程問題

怎麼把某些服務排程到特定的節點上去?
在這裡插入圖片描述
給node加入lable
rc上面設定nodeselector

擴容與升級問題

在這裡插入圖片描述
擴容:kubectl scale。。。。中的replicas引數
滾動升級:加入A中有二十個用例,在升級的過程中是會終端的,希望是不間斷的服務,先減一個pod,更新一個pod加進去,再減去一個pod。。。。。。用法升級版本號
image:v2

資源配額問題

在這裡插入圖片描述
如果用到資源配額,需要增加外掛 如上圖右上角的命令LimitRanger,ResourceQuota
kubernetes權威指南:
當Kubernetes啟動一個容器時,會將CPU配額值乘以1024並轉為整數傳遞給docker run的–cpu-shares引數,之所以乘以1024是因為Docker的cpu-shares引數是以1024 為基數計算CPU時間的。另外,Docker官方文件裡解釋說cpu-shares是一個相對權 重值 (relative weight),因此Kubernetes官方文件裡解釋cpu: 0.5表示該容器佔用0.5 個CPU計算時間的說法其實是不準確的。僅當該節點是單核心CPU而且只執行兩個 容器,每個容器的CPU配額設定為0.5時,上述說法才成立。假如一個節點上同時運 行了3個容器A,B,C,其中A容器的CPU配額設定為1,B與C設定為0.5。那麼,當 系統的CPU利用率達到100%時,A容器只佔用了1X100/(1+0.5+0.5)=50%的CPU時 間,而B與C分別佔用25%的CPU時間。如果此時我們加入一個新的容器D,它的 CPU配額也設定為1,則通過計算我們得到A此時只佔據33%的CPU時間。對於目前 主流的多核CPU,容器的CPU配額會在多核心上進行承擔。因此在多核CPU上,即 使某個容器宣告CPU<1,它也可能會佔滿多個CPU核。例如2個設定cpu=0.5的容器 執行在4核的CPU上,每個容器可能會用光4*0.5/(0.5+0.5)=2個CPU核。
在這裡插入圖片描述