1. 程式人生 > 其它 >Kubernetes核心概念介紹

Kubernetes核心概念介紹

什麼是Kubernetes

Kubernetes是谷歌十幾年來大規模容器實踐的成果,是谷歌Brog的開源版本。Google 每週會啟用超過 20 億個容器——全都由內部平臺 Borg 支撐。Borg 是 Kubernetes 的前身,汲取了Brog的經驗和教訓,所以Kubernetes以開源,就迅速稱霸容器領域。

Kubernetes是一個全新基於容器技術的分散式架構方案,它可以幫助使用者省去應用容器化過程的許多手動部署和擴充套件操作。也就是說,您可以將執行容器的多組主機聚集在一起,由 Kubernetes 幫助您輕鬆高效地管理這些叢集。而且,這些叢集可跨公共雲、私有云或混合雲部署主機。因此,對於要求快速擴充套件的雲原生應用而言,Kubernetes 是優秀的託管平臺。

Kubernetes是一個開放平臺,它不侷限於任何語言,不限制任何程式設計介面。無論用啥語言編寫的服務,都可以被對映為Kubernetes的服務,並且通過標準的TCP通訊協議進行互動。Kubernetes是一種更高層次的抽象,對程式設計的語言、框架、中介軟體沒有任何浸入,現有的系統和平臺很容器可以遷移到Kubernetes平臺上。

Kubernetes是一個完備的分散式系統支撐平臺。Kubernetes具有完善的叢集管理能力,包含服務的註冊、服務發現、負責均衡、故障發現、服務滾動升級、線上擴容以及多粒度的資源配額管理等。同時Kubernetes提供的完善的管理工具,這些工具覆蓋了整個軟體生命週期。

總結一下,Kubernetes是一個具有優秀背景的、全新的基於容器技術的分散式架構解決方案,並且是一個一站式的完備的分散式系統開發和支撐平臺。

Kubernetes核心概念介紹

Kubernetes的總架構圖

Kubernetes核心元件介紹

Master

kube-apiserver

kube-apiserver 是 Kubernetes 最重要的核心元件之一,kube-apiserver在Kubernetes 叢集中扮演著通訊樞紐的角色。kube-apiserver不僅負責和 etcd 互動,並切對外提供統一的API呼叫入口, 所有的互動都是kube-apiserver為核心的, kube-apiserver提供了資源操作的唯一入口,並提供認證、授權、訪問控制、API 註冊和發現等機制等功能;

kube-controller-manager

kube-controller-manager 是Kubernetes 叢集的大總管,負責叢集內 Node、Namespace、Service、Token、Replication 等資源物件的管理,使叢集內的資源物件維持在預期的工作狀態。每一個 Controller 通過kube-apiserver提供的 Restful 介面實時監控叢集內每個資源物件的狀態,當發生故障,導致資源物件的工作狀態發生變化,就進行干預,嘗試將資源物件從當前狀態恢復為預期的工作狀態。常見的 Controller 有 Namespace Controller、Node Controller、Service Controller、ServiceAccount Controller、Token Controller、ResourceQuote Controller、Replication Controller等。

kube-scheduler

kube-scheduler負責對叢集內部的資源進行排程,相當於“排程室”。接收來自kube-apiserver建立Pods的任務,收到任務後它會檢索出所有符合該Pod要求的Node節點(通過預選策略和優選策略),開始執行Pod排程邏輯。排程成功後將Pod繫結到目標節點上。

Etcd

Etcd在Kubernetes中是用來存放資料並通知變動的,Kubernetes中把關鍵資料都存放在Etcd中,在Kubernetes中,資料是隨時發生變化的,比如說使用者提交了新任務、增加了新的Node、容器死掉了等等,都會觸發狀態資料的變更。狀態資料變更之後,Master上的kube-scheduler和kube-controller-manager,就會重新發起變更,這些變化,都需要及時地通知給每個元件。Etcd有一個特徵,可以在呼叫它的api中,監聽api的資料,一旦資料發生變化,就會收到通知。Kubernetes利用這個特徵,當節點消失或配置有變動時,Etcd會第一時間發現,就會告知每個訂閱過的元件,這個時候發生變化元件可以知道自己應該做什麼。對於kube-scheduler和kube-controller-manager只需要把最新的資料寫入到Etcd中就可以了,不需要再次去發起呼叫。

Node

kubelet

在Kubernetes叢集中,每個Node節點都會啟動kubelet程序,用來處理Master節點下發到本節點的任務,管理Pod和其中的容器。kubelet會在kube-apiserver上註冊節點資訊,定期向Master彙報節點資源使用情況,並通過cAdvisor監控容器和節點資源。可以把kubelet理解成Node上的Pod管家。

kube-proxy

在Kubernetes叢集中,每個Node節點上都會部署kube-proxy,kube-proxy 會作為守護程序跑在每個節點上通過監聽著Etcd中關於Pod的最新狀態,一旦檢查到一個Pod資源發生變動,kube-proxy 就立即將這些變動,反應在iptables 或 ipvs規則中,當後續再有請求發到Service時,Service可以通過ipvs最新的規則將請求的分發到Pod上,實現Service到Pod的請求路由和轉發,從而實現Kubernetes層級的虛擬網路轉發。

container

在Kubernetes叢集中,每個Node節點都會存在container。container負責本機容器的管理和建立,目前最常採用的就是Docker。