?

k??ubernetes 已經(jīng)成為容器編排領(lǐng)域的關(guān)于(yu)王者,它是理定基于容器的集群編排引擎,具備擴展集群、關(guān)于滾動(dòng)升級回滾、理定彈性伸縮、關(guān)于自動(dòng)治愈、理定服務(wù)發(fā)現等多種特性能力。關(guān)于本文將帶著(zhù)大家快速了解 kubernetes ,理定了解我們談(╥_╥)論 kubernetes 都是關(guān)于在談?wù)撌裁础?/p>
ubernetes 架構從宏觀(guān)上來(lái)看(kan) kub(╯°□°)╯︵ ┻━┻ernetes 的理定整體??架構,包括 Master、關(guān)于(yu)Node 以及 Etcd。理定Master 即主節點(diǎn),關(guān)于負責控制整個(gè) kubernetes 集群。理定它包括 Api Serve???r、關(guān)于Sch( ?ω?)eduler、Controller 等組成部分。它們都需要和 Etcd( ?▽?) 進(jìn)行交互以存儲數據。- Api Server:主要提供資源操作的統一入口,這樣就屏蔽了與 Etcd 的直接交互。功能包括安全(quan)、注冊與發(fā)現等。- Scheduler:負責按照一定的??調度規則將 Pod 調度到 Node 上。- Controll??er:資源控制中心,確保資源處于預期的工作狀態(tài)。Node 即工作節點(diǎn),為整個(gè)(′_`)集群提供計算力,是??容???器真正運行的地方,包括運行容器( ?▽?)、kubelet、kubヾ(^-^)ノe-proxy。- kubelet:主要??工作包括管理容器的生命周期、結合ヽ(′▽?zhuān)?ノ cAdvisor 進(jìn)行監控、健康檢查以及定期上報節點(diǎn)狀態(tài)。- kube-proxy: 主要利用 service 提供集(′_ゝ`)群內部的服務(wù)發(fā)現和(he)負載均衡,同時(shí)監聽(tīng) service/endpoin??ts 變化并刷新負載均衡。
從創(chuàng )建 deployment 開(kāi)始deployment 是用于編排 pod 的一種控制器資源,我們會(huì )在后面做介紹。這里以 deployment 為例,來(lái)看看架構中的各組件在創(chuàng )建 deployment 資源的過(guò)程中都干了什么。- 首先是 kubectl 發(fā)起一個(gè)創(chuàng )建 deployment 的請(?⊿?)求- apiserver 接收到創(chuàng )建 deployment 請求,將相關(guān)資源寫(xiě)入 etcd;之(′ω`)后所有組件與 apiserver/etcd 的交互都是類(lèi)似的- deployment controller list/watch 資源變化并(bing)發(fā)起創(chuàng )建 replicaSet 請求- replicaSet controller list/wat(/ω\)ch 資源變化并發(fā)起創(chuàng )建 pod 請求- scheduler 檢測到未綁定的 pod 資源,通過(guò)一系列匹?配以及過(guò)濾選擇合適的 node 進(jìn)行綁定- kubele??t 發(fā)現自己 node 上需創(chuàng )建新 pod,負責 pod 的創(chuàng )建及后續生命周期管理- ku??be-proxy 負責初始化 service 相關(guān)的資源,包括服務(wù)發(fā)現、負載均衡等網(wǎng)絡(luò )規則至此,經(jīng)過(guò) kubenetes 各組件的分工協(xié)調,完成了從創(chuàng )建一個(gè) deployment 請求開(kāi)始到具體各 pod 正常運行的全過(guò)程。
Pod在 ku??bernetes 眾(zhong)多的 api 資源中,pod 是最重要和基礎的,是最小的部署單元。首先我們要考慮的問(wèn)題是,我(O_O)們?yōu)槭裁葱枰?pod?pod 可以說(shuō)是一種容器設計模式,它為那些”超親密”關(guān)系的容器而設計,我們可以想象 servelet 容器部署(′ω`*) war 包、日志收集等場(chǎng)景,這些容器之間往往需要共享網(wǎng)絡(luò )、???共享存儲、共享配置,因此我們有了 pod 這個(gè)概念。對于 pod 來(lái)說(shuō),不同 container 之間通過(guò) infra?? container 的方式統一識別外部網(wǎng)絡(luò )空間,而通過(guò)掛載同一份 volume 就自然可以共享存??儲了,比如它對應宿主機上的一個(gè)目錄。&(╯‵□′)╯nbsp;
容(rong)器編排容器編排是 kuヽ(′▽?zhuān)?ノbernetes 的看(kan)家本領(lǐng)了ヽ(′▽?zhuān)?ノ,所以我們有必要了解一下。kubernetes 中有諸多編排相關(guān)的控制資源,例如編排無(wú)狀態(tài)應用的 deployment,編排有狀態(tài)應用的 stateヾ(^-^)ノfulset,編排守護進(jìn)程 daemonset 以及編排離線(xiàn)業(yè)務(wù)的 job/cronjob 等等(╬?益?)。我們還是以應用最廣泛的 deployment 為例。deployment、replicatset、pod 之間的關(guān)系是一種層層控制的關(guān)系。簡(jiǎn)單來(lái)說(shuō),replicaset 控制 pod 的數量,而 deployment 控制 repli??caset 的版本屬性。這種設計模式也為兩種最基本的編排動(dòng)作實(shí)現了基礎,即數量控制的水平擴縮容、版本屬性控制的更新/回滾。
水平擴縮??容水平擴縮容非常好理解,我們只需修改 replicaset 控制的 pod 副本數量即可,比如從 2 改到 3,那么就完成了水平(╯‵□′)╯擴容這個(gè)動(dòng)作,反之即水平收縮。&(╬?益?)nbsp;
更新/回滾更新/回滾則體現了 replicaset 這個(gè)對象的存在必要性。例如我們需要應用 3 個(gè)實(shí)例的版本從 v1 改到 v2??,那么 v1 版本 replicase??t 控制的 pod 副本數會(huì )逐漸從 3 變到 0,而 v2 版本 replicaset 控制的 pod 數會(huì )注解從 0 變到 3,當 deployment 下只存在 v2 版本的 replicaset 時(shí)變完成了更新?;貪L的動(dòng)作與(yu)之相反。
滾??動(dòng)更新可以(yi)發(fā)現,在上述例子中??,我們更(geng)新應用,pod 總是一個(gè)一個(gè)升級,并且最小有 2 個(gè) pod 處于可用狀態(tài),最多有 4 個(gè) pod 提供服務(wù)。這種”滾動(dòng)更新”的好處是顯而易見(jiàn)的,一旦新的版本有了 bug,那么剩??下的 2 個(gè) pod 仍然能??夠提供服務(wù),同時(shí)方便快速回滾。在實(shí)際應用中我們可以(yi)通過(guò)配置 Rol(′▽?zhuān)?lingUpdateStr(′ω`*)ategy 來(lái)控制滾動(dòng)更新策略,maxSurge 表示 deployment 控制器還可以創(chuàng )建多少個(gè)新 Pod;而 maxUnavailable 指的是,deployment 控制器可以刪除多少個(gè)舊 Pod。&??nbsp;
kubernetes 中的網(wǎng)絡(luò )我們了解了容器編排是怎么完成(???)的,那么容器間的又是怎么通信的呢?講到網(wǎng)絡(luò )通(tong)信,kubernetes 首先得有”三通”基礎:- node 到 pod 之間可??以通- node 的 po??d 之間可以通- 不同 node 之間的 pod 可以通簡(jiǎn)單來(lái)說(shuō),不同 pod 之間通過(guò) cni0/docker0 網(wǎng)橋實(shí)現了通信,node 訪(fǎng)問(wèn) pod 也是通過(guò) cni0/docker0 網(wǎng)橋通信即可。而不同 node 之間的 pod 通信有很多種實(shí)現方案,包括現在比較普遍的 flannel(′;ω;`) 的 vxlan/hostgw 模式等。flannel 通過(guò)?? etcd 獲知其他 node 的網(wǎng)絡(luò )信息(′▽?zhuān)?,并會(huì )為本 no??de 創(chuàng )建路由表,最終使得不同 node 間(jian)可以實(shí)現跨主機通信。
微服務(wù)—service在了解接下來(lái)的(?Д?)內(nei)容之前,我們得先了解一個(gè)很重要的資源對象:servic( ?▽?)e。我們?yōu)槭裁葱枰?service 呢?在微服務(wù)中,pod 可以對應實(shí)例,那么 servic???e 對應的就是一個(gè)微服務(wù)(′_`)。而在服務(wù)調用過(guò)程中,service 的出現解(T_T)決了兩個(gè)問(wèn)題:- pod 的 ip 不是固定的,利用非固定 ip 進(jìn)行網(wǎng)絡(luò )ヾ(′?`)?調用不現(xian)實(shí)- 服務(wù)調用需??要對不同 pod 進(jìn)行負載均衡service 通過(guò) label 選擇器選取合適的 pod,???構建出一個(gè) endpoints,即 pod(╬?益?) 負載均衡列表。實(shí)(shi)際運用中,一般我們會(huì )為同一個(gè)微服務(wù)的 pod 實(shí)例都打上類(lèi)似app=xxx的標簽,同時(shí)為該微服務(wù)創(chuàng )建一個(gè)標簽選擇器為app=xxx的 service。
kubernetes 中的服務(wù)發(fā)現與網(wǎng)絡(luò )調用在有了上述”三通”的網(wǎng)絡(luò )基礎后,我們可以開(kāi)始微服務(wù)架構中的網(wǎng)絡(luò )調用在 kubernetes 中是怎么實(shí)現的了。這部分內容其實(shí)在說(shuō)說(shuō) Kubernetes 是怎么實(shí)現服務(wù)發(fā)現的已經(jīng)講得比較清楚了,比較細節的地方可以參考上述文章,這里做一個(gè)(ge)簡(jiǎn)單的介紹。&n(′?_?`)bsp;
友情鏈接:
樂(lè )山好迪網(wǎng)絡(luò )科技有限公司阿城賽京網(wǎng)絡(luò )科技有限公司樂(lè )平航彩網(wǎng)絡(luò )科技有限公司宿遷發(fā)特網(wǎng)絡(luò )科技有限公司南陽(yáng)帝諾網(wǎng)絡(luò )科技有限公司澄海邁理網(wǎng)絡(luò )科技有限公司天長(cháng)銀集網(wǎng)絡(luò )科技有限公司興化碼揚網(wǎng)絡(luò )科技有限公司
© 2013-2025.Company name All rights reserved.網(wǎng)站地圖 天津九安特機電工程有限公司-More Templates