今晚20:30,Kubernetes Master Class在線培訓第四期《企業如何構建CI/CD流水線》即將開播,點擊連接:http://live.vhall.com/729465809 便可免費預定註冊!api
介 紹瀏覽器
Kubernetes在GitHub上擁有超過48,000顆星,超過75,000個commit,擁有以Google爲表明的科技巨頭公司爲主要貢獻者。能夠說,Kubernetes已迅速掌管了容器生態系統,成爲容器編排平臺的真正領導者。服務器
Kubernetes提供了諸如部署的滾動和回滾、容器健康檢查、自動容器恢復、基於指標的容器自動擴展、服務負載均衡、服務發現(適用於微服務架構)等強大功能。在本文中,咱們將討論Kubernetes重要的基本概念、master節點架構,並重點關注節點組件。網絡
理解Kubernetes及其抽象架構
Kubernetes是一個開源的編排引擎,用於自動部署、擴展、管理和提供託管容器化應用程序的基礎架構。在基礎架構級別,Kubernetes集羣由一組物理或虛擬機組成,每一個機器都以特定角色運行。負載均衡
Master機器就像是全部業務的大腦,負責編排全部運行在節點機器上的容器。每一個節點都配有一個容器運行時。節點接收來自master的指令,而後執行操做來建立pod、刪除pod或調整網絡規則。curl
Master組件負責管理Kubernetes集羣。它們管理pod的生命週期,pod是Kubernetes集羣內部署的基本單元。Master Server運行如下組件:分佈式
kube-apiserver - 主要組件,爲其餘master組件公開API。微服務
etcd - 分佈式密鑰/值存儲庫,Kubernetes使用它來持久化存儲全部集羣信息。工具
kube-scheduler – 依照pod規範中的信息,來決定運行pod的節點。
kube-controller-manager - 負責節點管理(檢測節點是否出現故障)、pod複製和端點建立。
cloud-controller-manager - 守護進程,充當API和不一樣雲提供商工具(存儲卷、負載均衡器等)之間的抽象層。
節點組件是Kubernetes中的worker機器,受到master的管理。節點能夠是虛擬機(VM)或物理機器——Kubernetes在這兩種類型的系統上都能良好運行。每一個節點都包含運行pod的必要組件:
kubelet – 爲位於那個節點上的pod監視API服務器,確保它們正常運行
cAdvisor - 收集在特定節點上運行着的pod的相關指標
kube-proxy - 監視API服務器,實時獲取pod或服務的變化,以使網絡保持最新
容器運行時 - 負責管理容器鏡像,並在該節點上運行容器
Kubernetes節點組件詳解
總而言之就是,節點上運行着兩個最重要的組件——kubelet和kube-proxy,除此以外還有一個負責運行應用容器化應用程序的容器引擎。
kubelet
kubelet處理着master和在其上運行的節點之間的全部通訊。它以manifest的形式接收來自主設備的命令,manifest定義着工做負載和操做參數。它與負責建立、啓動和監視pod的容器運行時進行接合。
kubelet還會週期性地對配置的活躍度探針和準備狀況進行檢查。它會不斷監視pod的狀態,並在出現問題時啓動新實例。kubelet還有一個內部HTTP服務器,在端口10255上顯示一個只讀視圖。除此以外,在/healthz上還有一個健康檢查端點,以及一些其餘狀態端點。例如,咱們能夠在/pods獲取正在運行的pod的列表。咱們還能夠在/spec獲取kubelet正在運行的機器的詳情。
kube-proxy
kube-proxy組件在每一個節點上運行,負責代理UDP、TCP和SCTP數據包(它不瞭解HTTP)。它負責維護主機上的網絡規則,並處理pod、主機和外部世界之間的數據包傳輸。它就像是節點上運行着的pod的網絡代理和負載均衡器同樣,經過在iptables使用NAT實現東/西負載均衡。
kube-proxy過程位於鏈接到Kubernetes的網絡和在該特定節點上運行的pod之間。它本質上是Kubernetes的核心網絡組件,負責確保跨集羣的全部元素有效地進行通訊。當用戶建立Kubernetes服務對象時,kube-proxy實例會負責將該對象轉換爲位於worker節點的、本地iptables規則集上的有意義的規則。iptables用於將分配給服務對象的虛擬IP轉換爲服務映射的全部pod IP。
容器運行時
容器運行時負責從公有或私有鏡像倉庫中拉取鏡像,並根據這些鏡像運行容器。當下最流行的容器引擎無疑是Docker,不過Kubernetes還支持諸如rkt、runc等的其餘容器運行時。正如咱們在上文中提到過的,kubelet會直接與容器運行時交互,以啓動、中止或刪除容器。
cAdvisor
cAdvisor是一個開源代理,它可以監視資源使用狀況並分析容器的性能。cAdvisor最初由谷歌建立,如今已與kubelet集成。
位於每一個節點上的cAdvisor實例,會收集、聚合、處理和導出全部正在運行的容器的指標,如CPU、內存、文件和網絡使用狀況等。全部數據都將發送到調度程序,以確保調度程序瞭解節點內部的性能和資源使用狀況。這些信息會被用於執行各類編排任務,如調度、水平pod擴展、管理容器資源限制等。
從動手實操瞭解節點組件端點
接下來,咱們將安裝一個Kubernetes集羣(在Rancher的幫助下),以此來開始探索節點組件公開的一些API。要完成下面的操做,咱們須要:
Google Cloud Platform賬戶(任何公有云也都是同樣的)
一臺主機,後續Rancher會運行在它上面(能夠是我的PC / Mac或公有云中的VM)
在同一主機上,安裝kubectl和 Google Cloud SDK。驗證好您的相關credential(gcloud init和gcloud auth login),確保gcloud能正常訪問您的Google Cloud帳戶
在GKE上運行的Kubernetes集羣(運行EKS或AKS也是相同的)
啓動Rancher實例
首先,啓動Rancher實例。這一過程很是簡單,參考快速上手指南便可:
https://rancher.com/quick-start/
使用Rancher部署GKE集羣
使用Rancher設置和配置Kubernetes集羣,一樣是按指南進行操做便可:
https://rancher.com/docs/rancher/v2.x/en/cluster-provisioning/hosted-kubernetes-clusters/gke/
部署好集羣后,咱們能夠快速部署Nginx以進行測試:
爲了與Kubernetes API進行交互,咱們須要在本地計算機上啓動代理服務器:
讓咱們檢查一下進度,看它是否正在正常運行,以及是否在監聽默認端口:
如今,在瀏覽器中,檢查kubelet公開的各類端點:
接下來,顯示集羣可用節點的列表:
咱們能夠經過spec來檢查全部列出的、使用API的節點。在本文的示例中,咱們使用n1-standard-1機器類型(1個vCPU,3.75GB RAM,10GB的根大小磁盤)建立了一個3節點集羣。咱們能夠經過訪問專用端點來確認這些規範:
在不一樣端點使用相同的kubelet API,咱們能夠檢查咱們建立的Nginx pod,以查看它們正運行在什麼節點上。
首先,列出正在運行的pod:
如今,curl每一個節點的/proxy/pods端點,查看其運行的pod列表:
咱們還能夠檢查cAdvisor端點,它會以Prometheus格式輸出大量數據。默認狀況下,這在/metrics HTTP端點可用:
SSH到節點並直接調用kubelet端口,也能夠得到相同的cAdvisor或pod信息:
清理
要清理咱們在本文中使用的資源,只需從Rancher UI中刪除Kubernetes集羣便可(選擇集羣並點擊Delete按鈕就能夠了)。這將刪除咱們的集羣正在使用的全部節點以及關聯的IP地址。若是您是在公有云中使用VM來運行Rancher,那麼您也須要處理它。找出您的實例名稱,而後將其刪除便可:
結 語
在本文中,咱們討論了Kubernetes節點機器的關鍵組件。以後,咱們使用Rancher部署了一個Kubernetes集羣,並完成了一個小型部署以幫助咱們學習使用kubelet API。
若想了解有關Kubernetes及其架構的更多信息,Kubernetes官方文檔是一個不錯的起點:https://kubernetes.io/docs/concepts/overview/components/