Kubernetes原理浅析
傳統部署時代:?早期,組織在物理服務器上運行應用程序。無法為物理服務器中的應用程序定義資源邊界,這會導致資源分配問題。例如,如果在物理服務器上運行多個應用程序,則可能會出現一個應用程序占用大部分資源的情況,結果可能導致其他應用程序的性能下降。一種解決方案是在不同的物理服務器上運行每個應用程序,但是由于資源利用不足而無法擴展,并且組織維護許多物理服務器的成本很高。
虛擬化部署時代:?作為解決方案,引入了虛擬化功能,它允許您在單個物理服務器的 CPU 上運行多個虛擬機(VM)。虛擬化功能允許應用程序在 VM 之間隔離,并提供安全級別,因為一個應用程序的信息不能被另一應用程序自由地訪問。
因為虛擬化可以輕松地添加或更新應用程序、降低硬件成本等等,所以虛擬化可以更好地利用物理服務器中的資源,并可以實現更好的可伸縮性。
每個 VM 是一臺完整的計算機,在虛擬化硬件之上運行所有組件,包括其自己的操作系統。
容器部署時代:?容器類似于 VM,但是它們具有輕量級的隔離屬性,可以在應用程序之間共享操作系統(OS)。因此,容器被認為是輕量級的。容器與 VM 類似,具有自己的文件系統、CPU、內存、進程空間等。由于它們與基礎架構分離,因此可以跨云和 OS 分發進行移植。
容器當下大家比較熟知的是docker,而Kubernetes可以看作docker的管理工具。
為什么需要Kubernetes?
真正的生產型應用會涉及多個容器。這些容器必須跨多個服務器主機進行部署。容器安全性需要多層部署,因此可能會比較復雜。但 Kubernetes 有助于解決這一問題。簡單來說,就是Kubernetes 可以幫助開發者構建跨多個容器的應用服務、跨集群調度、擴展這些容器,并長期持續管理這些容器的健康狀況。
專業術語:
主機(Master):?用于控制 Kubernetes 節點的計算機。所有任務分配都來自于此。
API SERVER:用戶不論用命令行還是圖形界面,請求都發送至api server,內部系統與外部用戶也通過相同的api通信
etcd:存儲集群的配置和狀態,主節點通過etcd查詢節點,容器與容器的狀態參數
Controllers:從api server獲取到所需狀態,控制節點的當前狀態,有差異就解決
Scheduler:監聽來自api的新請求,對節點進行排名,把pod部署到合適的節點,不合適就先掛著不部署
?
節點(Node):負責執行請求和所分配任務的計算機。由 Kubernetes 主機負責對節點進行控制。
?
容器集(Pod):被部署在單個節點上的,且包含一個或多個容器的容器組。同一容器集中的所有容器共享同一個 IP 地址、IPC、主機名稱及其它資源。容器集會將網絡和存儲從底層容器中抽象出來。這樣,您就能更加輕松地在集群中移動容器。
Kubelet:運行在節點上的服務,1.監視來自api的任務,執行任務,并向主節點報告。2.監視pod,pod有問題會向控制程序報告,控制程序會改變分配策略。
Container Runtime:容器運行時從鏡像庫拉取鏡像。
kube-proxy:讓每個節點獲得他的IP地址,實現負載均衡。
復制控制器(Replication controller):用于控制應在集群某處運行的完全相同的容器集副本數量。
?
當pod有問題時,kubernetes會創造一個和原來一樣的pod,但是IP不一樣。service用來解決這個問題。
服務(Service):將工作內容與容器集分離。Kubernetes 服務代理會自動將服務請求分發到正確的容器集——無論這個容器集會移到集群中的哪個位置,甚至可以被替換掉。
?
Kubernetes 工作的簡單流程:
主機(master)接收開發者的命令,自動選擇從屬節點(node)進行分發,之后它將在該節點分配資源,并指派容器集來完成任務請求。
當?kubernetes 將容器集調度到一個節點上時,該節點上的 kubelet 會發送指令讓 docker 啟動指定的容器。kubelet 隨后會不斷從 docker 收集這些容器的狀態,并將這些信息匯集至主機。
總結
以上是生活随笔為你收集整理的Kubernetes原理浅析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode--289. 生命游戏
- 下一篇: python-类的基本知识