今晚20:30,Kubernetes Master Class在線培訓(xùn)第四期《企業(yè)如何構(gòu)建CI/CD流水線》即將開播,進入鏈接:http://live.vhall.com/729465809 即可免費預(yù)約注冊!
Kubernetes在GitHub上擁有超過48,000顆星,超過75,000個commit,擁有以Google為代表的科技巨頭公司為主要貢獻者??梢哉f,Kubernetes已迅速掌管了容器生態(tài)系統(tǒng),成為容器編排平臺的真正領(lǐng)導(dǎo)者。
創(chuàng)新互聯(lián)網(wǎng)站建設(shè)由有經(jīng)驗的網(wǎng)站設(shè)計師、開發(fā)人員和項目經(jīng)理組成的專業(yè)建站團隊,負(fù)責(zé)網(wǎng)站視覺設(shè)計、用戶體驗優(yōu)化、交互設(shè)計和前端開發(fā)等方面的工作,以確保網(wǎng)站外觀精美、成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)易于使用并且具有良好的響應(yīng)性。Kubernetes提供了諸如部署的滾動和回滾、容器健康檢查、自動容器恢復(fù)、基于指標(biāo)的容器自動擴展、服務(wù)負(fù)載均衡、服務(wù)發(fā)現(xiàn)(適用于微服務(wù)架構(gòu))等強大功能。在本文中,我們將討論Kubernetes重要的基本概念、master節(jié)點架構(gòu),并重點關(guān)注節(jié)點組件。
Kubernetes是一個開源的編排引擎,用于自動部署、擴展、管理和提供托管容器化應(yīng)用程序的基礎(chǔ)架構(gòu)。在基礎(chǔ)架構(gòu)級別,Kubernetes集群由一組物理或虛擬機組成,每個機器都以特定角色運行。
Master機器就像是所有業(yè)務(wù)的大腦,負(fù)責(zé)編排所有運行在節(jié)點機器上的容器。每個節(jié)點都配有一個容器運行時。節(jié)點接收來自master的指令,然后執(zhí)行操作來創(chuàng)建pod、刪除pod或調(diào)整網(wǎng)絡(luò)規(guī)則。
Master組件負(fù)責(zé)管理Kubernetes集群。它們管理pod的生命周期,pod是Kubernetes集群內(nèi)部署的基本單元。Master Server運行以下組件:
kube-apiserver?- 主要組件,為其他master組件公開API。
etcd?- 分布式密鑰/值存儲庫,Kubernetes使用它來持久化存儲所有集群信息。
kube-scheduler?– 依照pod規(guī)范中的信息,來決定運行pod的節(jié)點。
kube-controller-manager?- 負(fù)責(zé)節(jié)點管理(檢測節(jié)點是否出現(xiàn)故障)、pod復(fù)制和端點創(chuàng)建。
cloud-controller-manager?- 守護進程,充當(dāng)API和不同云提供商工具(存儲卷、負(fù)載均衡器等)之間的抽象層。
節(jié)點組件是Kubernetes中的worker機器,受到master的管理。節(jié)點可以是虛擬機(VM)或物理機器——Kubernetes在這兩種類型的系統(tǒng)上都能良好運行。每個節(jié)點都包含運行pod的必要組件:
kubelet?– 為位于那個節(jié)點上的pod監(jiān)視API服務(wù)器,確保它們正常運行
cAdvisor?- 收集在特定節(jié)點上運行著的pod的相關(guān)指標(biāo)
kube-proxy?- 監(jiān)視API服務(wù)器,實時獲取pod或服務(wù)的變化,以使網(wǎng)絡(luò)保持最新
容器運行時 - 負(fù)責(zé)管理容器鏡像,并在該節(jié)點上運行容器
總而言之就是,節(jié)點上運行著兩個最重要的組件——kubelet和kube-proxy,除此之外還有一個負(fù)責(zé)運行應(yīng)用容器化應(yīng)用程序的容器引擎。
kubelet
kubelet處理著master和在其上運行的節(jié)點之間的所有通信。它以manifest的形式接收來自主設(shè)備的命令,manifest定義著工作負(fù)載和操作參數(shù)。它與負(fù)責(zé)創(chuàng)建、啟動和監(jiān)視pod的容器運行時進行接合。
kubelet還會周期性地對配置的活躍度探針和準(zhǔn)備情況進行檢查。它會不斷監(jiān)視pod的狀態(tài),并在出現(xiàn)問題時啟動新實例。kubelet還有一個內(nèi)部HTTP服務(wù)器,在端口10255上顯示一個只讀視圖。除此之外,在/healthz上還有一個健康檢查端點,以及一些其他狀態(tài)端點。例如,我們可以在/pods獲取正在運行的pod的列表。我們還可以在/spec獲取kubelet正在運行的機器的詳情。
kube-proxy
kube-proxy組件在每個節(jié)點上運行,負(fù)責(zé)代理UDP、TCP和SCTP數(shù)據(jù)包(它不了解HTTP)。它負(fù)責(zé)維護主機上的網(wǎng)絡(luò)規(guī)則,并處理pod、主機和外部世界之間的數(shù)據(jù)包傳輸。它就像是節(jié)點上運行著的pod的網(wǎng)絡(luò)代理和負(fù)載均衡器一樣,通過在iptables使用NAT實現(xiàn)東/西負(fù)載均衡。
kube-proxy過程位于連接到Kubernetes的網(wǎng)絡(luò)和在該特定節(jié)點上運行的pod之間。它本質(zhì)上是Kubernetes的核心網(wǎng)絡(luò)組件,負(fù)責(zé)確保跨集群的所有元素有效地進行通信。當(dāng)用戶創(chuàng)建Kubernetes服務(wù)對象時,kube-proxy實例會負(fù)責(zé)將該對象轉(zhuǎn)換為位于worker節(jié)點的、本地iptables規(guī)則集上的有意義的規(guī)則。iptables用于將分配給服務(wù)對象的虛擬IP轉(zhuǎn)換為服務(wù)映射的所有pod IP。
容器運行時
容器運行時負(fù)責(zé)從公有或私有鏡像倉庫中拉取鏡像,并根據(jù)這些鏡像運行容器。當(dāng)下最流行的容器引擎無疑是Docker,不過Kubernetes還支持諸如rkt、runc等的其他容器運行時。正如我們在上文中提到過的,kubelet會直接與容器運行時交互,以啟動、停止或刪除容器。
cAdvisor
cAdvisor是一個開源代理,它能夠監(jiān)視資源使用情況并分析容器的性能。cAdvisor最初由谷歌創(chuàng)建,現(xiàn)在已與kubelet集成。
位于每個節(jié)點上的cAdvisor實例,會收集、聚合、處理和導(dǎo)出所有正在運行的容器的指標(biāo),如CPU、內(nèi)存、文件和網(wǎng)絡(luò)使用情況等。所有數(shù)據(jù)都將發(fā)送到調(diào)度程序,以確保調(diào)度程序了解節(jié)點內(nèi)部的性能和資源使用情況。這些信息會被用于執(zhí)行各種編排任務(wù),如調(diào)度、水平pod擴展、管理容器資源限制等。
接下來,我們將安裝一個Kubernetes集群(在Rancher的幫助下),以此來開始探索節(jié)點組件公開的一些API。要完成下面的操作,我們需要:
Google Cloud Platform帳戶(任何公有云也都是一樣的)
一臺主機,后續(xù)Rancher會運行在它上面(可以是個人PC / Mac或公有云中的VM)
在同一主機上,安裝kubectl和 Google Cloud SDK。驗證好您的相關(guān)credential(gcloud init和gcloud auth login),確保gcloud能正常訪問您的Google Cloud賬戶
在GKE上運行的Kubernetes集群(運行EKS或AKS也是相同的)
啟動Rancher實例
首先,啟動Rancher實例。這一過程非常簡單,參考快速上手指南即可:
https://rancher.com/quick-start/
使用Rancher部署GKE集群
使用Rancher設(shè)置和配置Kubernetes集群,同樣是按指南進行操作即可:
https://rancher.com/docs/rancher/v2.x/en/cluster-provisioning/hosted-kubernetes-clusters/gke/
部署好集群后,我們可以快速部署Nginx以進行測試:
為了與Kubernetes API進行交互,我們需要在本地計算機上啟動代理服務(wù)器:
讓我們檢查一下進度,看它是否正在正常運行,以及是否在監(jiān)聽默認(rèn)端口:
現(xiàn)在,在瀏覽器中,檢查kubelet公開的各種端點:
接下來,顯示集群可用節(jié)點的列表:
我們可以通過spec來檢查所有列出的、使用API的節(jié)點。在本文的示例中,我們使用n1-standard-1機器類型(1個vCPU,3.75GB RAM,10GB的根大小磁盤)創(chuàng)建了一個3節(jié)點集群。我們可以通過訪問專用端點來確認(rèn)這些規(guī)范:
在不同端點使用相同的kubelet?API,我們可以檢查我們創(chuàng)建的Nginx pod,以查看它們正運行在什么節(jié)點上。
首先,列出正在運行的pod:
現(xiàn)在,curl每個節(jié)點的/proxy/pods端點,查看其運行的pod列表:
我們還可以檢查cAdvisor端點,它會以Prometheus格式輸出大量數(shù)據(jù)。默認(rèn)情況下,這在/metrics?HTTP端點可用:
SSH到節(jié)點并直接調(diào)用kubelet端口,也可以獲得相同的cAdvisor或pod信息:
清理
要清理我們在本文中使用的資源,只需從Rancher UI中刪除Kubernetes集群即可(選擇集群并點擊Delete按鈕就可以了)。這將刪除我們的集群正在使用的所有節(jié)點以及關(guān)聯(lián)的IP地址。如果您是在公有云中使用VM來運行Rancher,那么您也需要處理它。找出您的實例名稱,然后將其刪除即可:
在本文中,我們討論了Kubernetes節(jié)點機器的關(guān)鍵組件。之后,我們使用Rancher部署了一個Kubernetes集群,并完成了一個小型部署以幫助我們學(xué)習(xí)使用kubelet API。
若想了解有關(guān)Kubernetes及其架構(gòu)的更多信息,Kubernetes官方文檔是一個不錯的起點:https://kubernetes.io/docs/concepts/overview/components/
同時,Rancher Labs近期組織的免費系列在線培訓(xùn)【Kubernetes Master Class】也是極佳的Kubernetes上手之選,明晚(4月24日)20:30,本季培訓(xùn)的第4期課程《企業(yè)如何構(gòu)建CI/CD流水線》即將開播,您可以進入鏈接:http://live.vhall.com/729465809 預(yù)約此次課程,屆時使用同一鏈接即可觀看直播!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。