掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
作者:佚名 2018-03-15 10:51:15
云計算 Kubernetes如今風(fēng)靡一時,所有主要的云服務(wù)提供商都將其作為部署云原生應(yīng)用的解決方案。Kubernetes有哪些顯著的特性和工具優(yōu)勢,讓企業(yè)開始接受它?本文作者給出了系統(tǒng)的梳理。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:申請域名、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、宜賓網(wǎng)站維護(hù)、網(wǎng)站推廣。
導(dǎo)讀:
Kubernetes如今風(fēng)靡一時,所有主要的云服務(wù)提供商都將其作為部署云原生應(yīng)用的解決方案。Kubernetes有哪些顯著的特性和工具優(yōu)勢,讓企業(yè)開始接受它?本文作者給出了系統(tǒng)的梳理。
“Action without orchestration is burn out; orchestration w/o action is management.”
沒有編排的行動是完蛋的,沒有行動的編排是管理,行動加上編排是領(lǐng)導(dǎo)。― Orrin Woodward”
它是一個由谷歌開始的開源項目,從Borg衍生而來,在谷歌內(nèi)部使用了好幾年,現(xiàn)在用于容器管理。目前由CNCF托管。
Kubernetes(縮寫為K8S)是一種抽象,它通過容器來優(yōu)化CPU和內(nèi)存等資源的利用率,從而可以跨多個節(jié)點高效地進(jìn)行應(yīng)用程序分發(fā)。K8S可以在裸金屬或任何云基礎(chǔ)設(shè)施提供商的任何地方運行。這個新工具是云無關(guān)的,聚焦于在基礎(chǔ)設(shè)施內(nèi)部部署和調(diào)度容器,而不是直接利用節(jié)點/主機(jī)。
K8S提供的一些平臺特性是:
Kubernetes 架構(gòu)
Kubernetes集群由主節(jié)點和一組worker/從屬節(jié)點組成。
Kubernetes的主節(jié)點組成部分是:
安裝在Kubernetes節(jié)點中的組件是:
對于高可用和容錯的Kubernetes生產(chǎn)和部署,需要多個主節(jié)點和一個單獨的etcd集群。如果運行了三個API服務(wù)器,則需要一個網(wǎng)絡(luò)負(fù)載平衡器來正確地將負(fù)載分配到服務(wù)器。***剩下的問題是需要三個角色來管理控制器管理器和調(diào)度器以維護(hù)集群狀態(tài)和分配節(jié)點。為了更高效、更可靠地執(zhí)行它,只有一個參與者應(yīng)該執(zhí)行實際的更改,但是在機(jī)器宕機(jī)的情況下仍然需要其他實例。為了解決這個問題,我們可以在API中使用lease-lock 來執(zhí)行主選,而使用它的標(biāo)志是leader- elect。
Kubernetes通過以下任一種方式實現(xiàn)從Pod到Pod的聯(lián)網(wǎng):
它們允許在集群中進(jìn)行Pod和Pod之間的通信,并為每個Pod提供***的IP地址。
Kubernetes關(guān)鍵特性
Pod: Collection of Containers容器集
pod是K8S中的一個部署單元,它有一個單獨的IP地址。在它內(nèi)部,Pause容器通過持有一個網(wǎng)絡(luò)的名稱空間、端口和ip地址來處理網(wǎng)絡(luò),而這個地址又被pod中的所有容器使用。
ReplicationController
ReplicationController確保在給定的時間內(nèi)啟動和運行所需的容器數(shù)量。Pod模板用于定義容器鏡像標(biāo)識符、端口和標(biāo)簽。使用liveness probes,它可以自動治愈pods,并按照期望的狀態(tài)維持pods數(shù)量。也可以通過使用kubectl來手動控制副本計數(shù)。
存儲管理
Pods本質(zhì)是短暫的——任何儲存在pod或容器中的信息都會丟失。為了存儲數(shù)據(jù),一個持久的系統(tǒng)是必需的,即使在一個pod被殺死或重新調(diào)度之后,如Amazon Elastic Block Storage (EBS),谷歌GCE PD,或一個分布式文件系統(tǒng),如網(wǎng)絡(luò)文件系統(tǒng)(NFS)或Gluster文件系統(tǒng)(GFS)。
資源監(jiān)控
監(jiān)控是成功運行基礎(chǔ)設(shè)施的關(guān)鍵之一,它是可靠性等級的基礎(chǔ)。Heapster是一個從kubelet收集指標(biāo)的插件,與cAdvisor集成。cAdvisor用于收集與運行容器的CPU、內(nèi)存、I/O和網(wǎng)絡(luò)統(tǒng)計數(shù)據(jù)相關(guān)的指標(biāo)。由Heapster收集的數(shù)據(jù)存儲在influx DB中,并使用Grafana在UI中顯示。還有其他可使用的接收器,如Kafka或Elastic Search,可以用于存儲數(shù)據(jù)并顯示在用戶界面中。
健康檢查
kubernetes的健康檢查由kubelet代理完成。它分為liveness 和 readiness probes兩種。
處理程序主要有三種類型:
每個probe通常有三個結(jié)果:
水平自動伸縮功能
自動伸縮使用基于負(fù)載的計算資源。K8S scale pod自動使用Horizontal Pod Autoscaler對象,從Heapster獲取度量數(shù)據(jù),并相應(yīng)地減少或增加pod的數(shù)量。例如,如果自動伸縮是基于內(nèi)存利用率,那么控制器就會開始在pod中觀察內(nèi)存使用情況,并根據(jù)容量對該副本計數(shù)進(jìn)行擴(kuò)展。
服務(wù)發(fā)現(xiàn)
Kubernetes pods是短暫的,ReplicationController 在任何節(jié)點上動態(tài)創(chuàng)建它們,因此在集群中發(fā)現(xiàn)服務(wù)是一個挑戰(zhàn)。服務(wù)需要發(fā)現(xiàn)一個IP地址和動態(tài)的端口,以便在集群中進(jìn)行通信。
有兩種主要的方法來找到它——環(huán)境變量(Environment variables)和DNS。
更可取的是基于DNS的服務(wù)發(fā)現(xiàn),它可以作為集群附加組件使用。跟蹤集群中的新服務(wù),并為每個服務(wù)創(chuàng)建一組DNS記錄。
網(wǎng)絡(luò)
要完全管理集群,必須正確設(shè)置網(wǎng)絡(luò),并解決三個網(wǎng)絡(luò)問題:
Kubernetes提供了廣泛的網(wǎng)絡(luò)選擇。現(xiàn)在還支持容器網(wǎng)絡(luò)接口(CNI)插件,這是容器的通用插件架構(gòu)。目前支持多種編排工具,如Kubernetes、Mesos和CloudFoundry。
有各種覆蓋插件:
服務(wù)
Kubernetes服務(wù)是一種抽象,它將通信路由到一組pod,以提供一個微服務(wù)。Kube-proxy在每個節(jié)點上運行,并通過設(shè)置一組iptable規(guī)則來管理服務(wù)。
設(shè)立服務(wù)的模式有三種:
ConfigMap和Secret
ConfigMap使注入基于環(huán)境的配置成為可能,同時使容器鏡像在多個環(huán)境中保持一致。這些可以通過安裝卷或環(huán)境變量(environment variables)來注入,并將這些值存儲在key/value格式中。
Secrets用于存儲敏感數(shù)據(jù),如密碼、OAuth令牌等。
滾動部署和回滾
部署對象持有一個或多個副本集,以支持回滾機(jī)制。換句話說,每次更改部署配置時都會創(chuàng)建一個新的副本集,并保留以前的版本,以便有回滾選項。只有一個副本集將在特定時間處于活動狀態(tài)。
對于滾動部署,需要的策略類型是RollingUpdate和minReadySecs,它指定應(yīng)用程序為服務(wù)流量所花費的時間。如果在應(yīng)用程序pod還沒有準(zhǔn)備好時,將其保持默認(rèn)狀態(tài),它將不可用。這個動作可以通過以下命令來完成:
或者,
通過替換部署yaml文件中的內(nèi)容并運行以下命令:
如果新版本不像預(yù)期的那樣,那么可以通過運行以下命令回滾到以前的版本:
如果所需版本是前一版本以外的版本,則運行:
Logging 記錄
要監(jiān)視應(yīng)用程序的行為,必須檢查日志——每個pod生成多個日志。要開始在儀表板UI中搜索日志,必須有一些機(jī)制收集并將它們聚合到一個日志查看器中。為了說明這一點,F(xiàn)luentd是一個開源工具,也是CNCF的一部分,與 Elastic Search 和 Kibana ***結(jié)合。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流