寫在前面的話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 集羣一些概念性的東西就說到這裏,後續咱們會通常使用一邊進行更詳細的學習,本章節的內容儘量心底有個底。