Kubernetes(K8s)是一個開源平臺,能夠有效簡化應用管理、應用部署和應用擴展環(huán)節(jié)的手動操作流程,讓用戶更加靈活地部署管理云端應用。
創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站建設(shè)、成都網(wǎng)站制作與策劃設(shè)計,大理州網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務涵蓋:大理州等地區(qū)。大理州做網(wǎng)站價格咨詢:13518219792
作為可擴展的容錯平臺,K8s幾乎能夠部署在所有基礎(chǔ)設(shè)施中,與Google Cloud、MS Azure及AWS等公有云、私有云、混合云、服務器集群、數(shù)據(jù)中心等完美兼容。Kubernetes最大的亮點在于支持容器自動部署和自動復制。這也是大量云端微服務基礎(chǔ)設(shè)施部署在K8s上的原因。
K8s最初是由Google工程師設(shè)計開發(fā)的,于2014年上線并開源,目前由來自微軟、紅帽、IBM及Docker等軟件巨頭的社區(qū)貢獻者維護升級。
Google不僅開源了公司整個基礎(chǔ)設(shè)施在容器中的運行方式,還積極開發(fā)Linux容器技術(shù),支撐Google所有云服務。K8s是基于云平臺15年的生產(chǎn)工作負載運行經(jīng)驗設(shè)計出來的,用于處理成千上萬個容器。Google每周部署20多億個容器。在K8s上線前,Google主要通過內(nèi)部開發(fā)平臺Borg進行容器部署。Borg是大型內(nèi)部集群管理系統(tǒng),運行了無數(shù)應用和集群任務,多年的開發(fā)經(jīng)驗奠定了K8s技術(shù)的基礎(chǔ)。
K8s本質(zhì)上是分部在不同機器上的容器化應用的協(xié)調(diào)系統(tǒng),目的是幫助開發(fā)人員通過K8s的可預測性、可擴展性和高可用性管理容器化應用和服務的整個生命周期,通過更高水平的抽象,將多個機器統(tǒng)一成一個機器。這對于大型環(huán)境的運行來說至關(guān)重要。
K8s不僅能夠優(yōu)化Docker的鏡像運行能力和容器管理能力,還能兼容rkt和CoreOS等容器引擎。
上方架構(gòu)圖展示了K8s工作原理。圖中包含一組Master組件,其中包括很多pod。Pod針對特定應用的“邏輯主機”進行建模。每個Pod均包含一個或多個應用容器、存儲資源、唯一的網(wǎng)絡IP及容器運行細節(jié)。Pod是容器的最小原子單元。理論上,Pod中包含一個或多個高度耦合的應用。理想情況下,每個Pod中包含一個容器。
每個進程包含一個API server、一個scheduler和多個controller。
API server負責暴露K8s API、處理REST操作及后續(xù)更新。Scheduler負責將未部署的Pod匹配到合適虛擬機或物理機上。如果沒有合適的機器,則Pod將處于未分配狀態(tài),直至出現(xiàn)合適的節(jié)點。Master運行集群級別的其他功能,通過嵌入式controller完成創(chuàng)建端點、發(fā)現(xiàn)節(jié)點、復制控制等操作。由于controller設(shè)計靈活且可擴展,Kube管理員可自行創(chuàng)建controller。Kube通過API server監(jiān)控K8s集群的共享狀態(tài),并對集群狀態(tài)進行調(diào)整,確保當前狀態(tài)與理想狀態(tài)一致。
K8s提供支持容器化應用統(tǒng)一自動化、控制和升級的各項功能,包括企業(yè)級容器部署、內(nèi)置服務發(fā)現(xiàn)、自動擴展、持久化存儲、高可用、集群互通和資源裝箱等。
依賴這些功能,K8s實現(xiàn)了對單體應用、批處理應用及高度分布式微服務應用等不同應用架構(gòu)的支持。
2014年上線以來,K8s一直在變革容器技術(shù),已經(jīng)成為快速批量啟動應用的關(guān)鍵工具。與此同時,挑戰(zhàn)也隨之而來,容器編排極其復雜。
K8s雖然已經(jīng)極大地簡化了容器實現(xiàn)和管理過程中從調(diào)度、配置到狀態(tài)自動維護等一系列任務的操作難度,但監(jiān)控方面依然存在挑戰(zhàn):
監(jiān)控對象數(shù)量繁多且極為復雜:K8s由很多組件構(gòu)成,非常復雜,因此要監(jiān)控K8s,就必須監(jiān)控下列所有對象:
操作細節(jié):K8s的所有核心組件(即kubelet、Kube controller manager和Kube scheduler)都有很多標記。這些標記決定了集群的操作和運行方式,其初始默認值一般較小,適用于規(guī)模較小的集群。隨著集群規(guī)模的擴大,用戶需要及時對集群進行調(diào)整,并監(jiān)控K8s的標簽和注釋等細節(jié)。
但監(jiān)控工具從K8s抓取大量數(shù)據(jù)時會影響集群性能甚至導致集群故障,因此需要確定監(jiān)控基線。需要診斷故障時,可適當調(diào)高基線值。
調(diào)高基線值的同時要部署更多master和node,提高可用性。涉及大規(guī)模部署時,可單獨部署專門存儲K8s數(shù)據(jù)的集群,這樣能夠保證在創(chuàng)建監(jiān)控事件、檢索監(jiān)控數(shù)據(jù)時,主要實例的性能不受影響。
和很多容器編排平臺一樣,K8s具備基本的服務器監(jiān)控工具。用戶可對這些工具進行適當調(diào)整,以便更好地監(jiān)控K8s的運行情況。主要工具如下:
整體監(jiān)控流程如下:
上述基礎(chǔ)性工具雖然不能提供詳細的應用監(jiān)控數(shù)據(jù),但能夠幫助用戶了解底層主機和K8s節(jié)點的情況。
一般來說,K8s集群管理員主要關(guān)注全局監(jiān)控,而應用開發(fā)人員則主要關(guān)注應用層面的監(jiān)控情況。但兩者的共同訴求都是在控制投入成本的前提下盡可能全面地監(jiān)控系統(tǒng)、采集數(shù)據(jù)。下周文章中,我們將介紹兩個可行的監(jiān)控方案:Prometheus和Sensu。兩個方案都能全面提供系統(tǒng)級的監(jiān)控數(shù)據(jù),幫助開發(fā)人員跟蹤K8s關(guān)鍵組件的性能、定位故障、接收預警。
本篇為譯文,原文作者:STEFAN THORPE
譯自Monitoring Kubernetes
譯文首發(fā)于UAVStack智能運維