【01】Kubernets:捋一捋概念性東西

寫在前面的話docker

 

docker 先告一段,如今開始進入 Kubernets(K8S) 的學習階段,在學習過程當中,可結合以前學的 docker swarm 比對着理解。數據庫

 

 

關於 K8Sapi

 

先來看一下兩個 logo:架構

docker 是 「碼頭工人」,K8S 是 「舵手」,簡單且直接。負載均衡

那 K8S 究竟是啥?這得從編排工具提及,以前學過 docker 自帶的 docker swarm。elasticsearch

對於編排工具,網上是這樣說的:分佈式

編排工具是能擴展管理容器,實現跨主機通訊,指定容器運行關係,實現複雜程序簡單運行的工具。工具

截至目前,有幾款比較出名的須要知道一下:oop

1. docker 自己的 docker machine + swarm + compose。性能

2. mesos + marathon:系統資源調度,可以調度 hadoop 或者容器,並不算專業的容器編排工具。

3. Kubernets(K8S):將容器歸類,以 Pod 管理(市場核心)。

和 docker 同樣,K8S 也是 Go 語言開發,由谷歌根據本身內部容器調度系統 Borg 重寫。咱們彷佛看到了 Go 語言的將來。

 

選擇 K8S 的理由:

1. 自動裝箱,自動部署,保證服務可用性。

2. 自我修復,在某個容器 down 掉之後會自動啓動新的。

3. 自動水平擴展,服務發現,負載均衡。

4. 自動發佈,回滾。

5. 支持密鑰和配置管理,能將服務的配置經過服務來加載,而不用本地配置,保證了配置的一致性。

6. 存儲編排和任務批處理。

其實這些東西單純的寫出來,很乾澀,也很懵逼,因此只有個印象就行,後面會慢慢經過實踐來理解。

 

 

K8S 集羣

 

既然上了 K8S,就別再想單機怎麼工做了。

在 K8S 集羣中有兩種角色:Master / Node,和 docker swarm 相似,Master 和 Worker,叫法不一樣而已。

Master 做爲集羣中樞,意味着集羣的操做都須要在它上面執行,因此儘量多節點高可用,咱們測試資源有限就單節點了。

Node 做爲幹活的節點,沒啥數量限制,大於 1 就行。用於運行 Pod。

 

這裏引入了一個概念,Pod。那啥是 Pod?

首先咱們要記住一點:

K8S 能調度的最小單位是 Pod,不是 docker 容器。

Pod 和容器的區別在於:Pod 是將一個或多個關係很是密切的容器打包在一塊兒造成的集合。

咱們能夠經過 Master 節點發出指令來管理 Pod 怎麼運行,運行多少,使用多少資源等。

舉個例子:假如要搭建一個 LAMP 環境,雖然幾者看似有很大關係,但實際關係又不緊密,對於這種服務,通常將其拆爲單獨 Pod 運行。

 

K8S 集羣部署很難,有個很直接的難點就在於 K8S 光內部通訊一共就須要 5 套證書:

1. etcd 內部通訊須要一套證書。

2. etcd 與外部通訊須要一套證書。

3. APIServer 間通信須要一套證書。

4. APIServer 與 Node 通訊須要一套證書。

5. Node 與 Node 間通訊須要一套證書。

值得慶幸的是,這些證書,咱們已經能夠實現自動生成。

 

這裏能夠簡單談談本身對於 K8S 的見解,該見解只表明我本身:

K8S 真的很香,但這並不意味着它適用於我全部的服務,爲了便於維護和故障排除,更爲了下降風險,對於數據庫這一類有狀態且很重要的服務,我仍是建議單獨運行。

 

 

關於 Master 和 Node

 

通用集羣架構圖:

Master 和 Node 細化:

Master 有三個重要組件:

1. APIServer:請求入口,負責解析,處理請求,即網關。

2. Scheduler:調度器,請求到達後,計算 Node 的資源狀況,將服務調度到適合的 Node,而後該節點的 Kubelet 啓動和操做 Pod。

3. Controller-manager:控制管理器,統一管控資源,監控 Master 節點的健康狀態,給 Master 節點作高可用。

 

Master 節點其餘組件:

etcd:分佈式高性能鍵值存儲數據庫,保存集羣對象狀態信息。apiserver 的全部操做都保存在這裏,因而可知其重要性。

在前面 docker 跨節點通訊的時候咱們也用到了它,忘了的能夠回頭捋一捋。

 

Node 節點有三個重要組件:

1. Kubelet:至關於 K8S 的 agent,有點像 Zabbix 的 agent。檢測當前節點的健康狀態,和 apiserver 交互。

2. Kube-proxy:爲當前節點 Pod 生成 iptables 或者 ipvs 規則,實現將請求調度到 Pod。和 apiserver 進行通訊,及時更新規則。

3. Container engine:不僅是 docker,K8S 並不是只能編排 docker,還有 RKT 這些。

擴展:關於 Pod 調度實現,在 1.1 版本之前是 userspace,1.11 版本之前是 iptables,以後都是 ipvs。提升調度性能。

 

除了以上須要運行的核心組件之外,K8S  還推薦使用一些附件(add-ons):

1. kube-dns:負責給 K8S 提供 DNS 服務。

2. Igress Controller:爲服務提供外網入口。

3. Heapster:提供資源監控。

4. Dashboard:提供 GUI 界面。

5. Federation:提供跨可用區集羣。

6. Fluentd-elasticsearch:提供集羣日誌採集,只存不查。

 

 

小結

 

關於 K8S 集羣一些概念性的東西就說到這裏,後續咱們會通常使用一邊進行更詳細的學習,本章節的內容儘量心底有個底。

相關文章
相關標籤/搜索