iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 2
0
DevOps

從k8s 到service mesh 微服務管理從0開始系列 第 2

1) 了解k8s 與開始佈署

傳統上架構一個系統會把服務與應用架在同一台機器上

若是不堪負荷,

可以透過多架幾台機器,

再透過 ngnix 做反向代理

讓服務請求傳送到不同主機上。

但這樣做一來造成資源的浪費

二來增加節點時佈署耗時

所以這時我們可以運用k8s(kubernates) 來管理我們的服務跟應用

而k8s 能做什麼呢? 這個可以查閱官網

簡單的來說,k8s可以做到快速應用程式的創建及佈署,比傳統開vm 架環境方便很多,同時使保資源隔離,程式的運行空間彼此不互相影響,有佈署java 或python的人就知道,若佈署在同一個web 容器中要小心不讓套件互相衝突,但k8s 藉由docker 很輕易的就做到了這一點;同時也達到了資源的高利用率,傳統一台應用開一台vm 可能開了2台,但是其中cpu 利用率可能很差,k8s 集中控管資源分配可以大大省下硬體上的配置。而基於這些優點在其上又開發了很多軟體套件使得系統更加健全,待後續慢慢來介紹。

k8s Component

參考官網

https://ithelp.ithome.com.tw/upload/images/20190918/201105795SsDxw6qFJ.png

開箱啦 可以拆開第1層包裝

發現裡面有

  • Master
  • node
  • node process

Master 顧名思議
是系統的主節點
而node 就是讓應用程式真正執行於其中的節點
那主節點幹啥呢?
主要是負責資源的分配調度

node 中裡面可以有很多個pod ,以k8s 中最小的單位就是pod

也就是k8s 起動的單位就是一整個 pod

而pod 裡面有啥呢?? 由圖可見裡面可以有很多個container app

什麼是container app? 可以把他想像成一個應用程式,可能是你寫的python 程式 也可能是你寫的golang web service 也可能是一個小型db ,借由docker 把運型環境打包起來 ,並且加以運行的一個docker instance

相信這麼多專有名詞
第一次看的人已經快吐血了
不過還好我們的血還有很多
就繼續接著往下!
那這麼多組件,他們怎麼進行溝通呢?
外面的請求怎麼藉由Master Node 送給這些pod 裡的container ?
如果我同一個服務在3個不同的pod建立副本呢,怎麼又怎麼做load balance呢
噢…我這個問題寶寶

這邊先介紹 k8s 的service

service

官網介紹


由第1張圖可以看到 可以看到 有一個綠色的虛線框住的 被稱做Service
而下面有個 deployment
第2張圖就把deployment 解開,可以看到有新的名詞-- Label Selector
這啥意思呢?

可以看到

佈署了3個pod (綠色圓圈) 到2個node(六邊形) 中

而每個pod 有不同的ip 分別是
10.10.10.2
10.10.10.3
10.10.10.4

而service 10.10.9.2 將會接受來源請求,將任務分配到 這3個pod 中
那下面那個Label Selector 是做什麼呢?

如果我們有很多Service ,我們要怎麼管理呢
所以這邊可以幫我們做取名的動作,上例將 上面那個有3個POD的Service 取名為B
而左下的service 取名為a

由此對Service 有了初步認識

而Service 還負責pod的 update 與 roll back

官網

上面這個連結有官網做的4張圖

可以觀察得知k8s 的rolling update 怎麼做的

簡單的說就是會先創建一個新版的pod 然後再把舊的關掉,一個一個做,直到所有的pod 都被更新。

K8s整體架構


以下先對此圖的一些組件做說明

  • CONTROLLER MANAGER: 主要是維護整個叢集的狀態(如剛提到的rolling update )
  • SCHEDULER:負責資源調度,把POD 調度到NODE 上
  • ETCD:可以看到他是資料庫的圖案,事實上他也就是做儲存一些一致性存儲,保存一些狀態
  • KUBE-PROXY:負責SERVICE 提供內部的服務發現及LOAD BALANCE
  • KUBELET:每個NODE 都有,負責整個網路管理
  • API SERVER : 負責外部RESTFUL API 接口,可以透過 API SERVER 操作 ECTD

k8s 佈署

光說不練,睏到想睡

所以先來建立自已的K8s 再說

官方github

儘管官方或第三方出了一些佈署套件

但還是希望能手動佈署一次

才能對整個叢集佈署比較有感覺一點

預計先從souce code 佈署一次後

再用套件佈署一次

今天先到這邊,明天開始佈署!


上一篇
前言及本文架構介紹
下一篇
用kubeadm 開始佈署 k8s (1)
系列文
從k8s 到service mesh 微服務管理從0開始4
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言