文章目錄
前言-背景
容器是捆綁和運行應用程序的好方法。在生產環境中,您需要管理運行應用程序的容器並確保沒有停機時間。例如,如果容器發生故障,則需要啓動另一個容器。如果系統處理這種行爲會不會更容易?
這就是Kubernetes拯救的方式!Kubernetes爲您提供了一個彈性運行分佈式系統的框架。它負責您的擴展要求,故障轉移,部署模式等。
1、什麼是Kubernetes?
Kubernetes簡稱K8S,是一個可移植,可擴展的開源平臺,用於管理容器化工作負載和服務,有助於聲明性配置和自動化。它擁有龐大,快速發展的生態系統。Kubernetes服務,支持和工具廣泛可用。
Kubernetes爲您提供:
- 服務發現和負載平衡
- 存儲編排
- 自動部署和回滾
- 自動裝箱
- 自我修復
- 密鑰和配置管理
Kubernetes集羣包含有節點代理kubelet和Master組件(APIs, scheduler, etc),一切都基於分佈式的存儲系統。下面這張圖是Kubernetes的架構圖:
2、Kubernetes組件
Kubernetes主要由以下幾個核心組件組成:
- etcd 保存了整個集羣的狀態;
- apiserver 提供了資源操作的唯一入口,並提供認證、授權、訪問控制、API註冊和發現等機制;
- controller manager 負責維護集羣的狀態,比如故障檢測、自動擴展、滾動更新等;
- scheduler 負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上;
- kubelet 負責維護容器的生命週期,同時也負責Volume(CVI)和網絡(CNI)的管理;
- Container runtime 負責鏡像管理以及Pod和容器的真正運行(CRI);
- kube-proxy 負責爲Service提供cluster內部的服務發現和負載均衡;
2.1、集羣
簡單的說是:多個人在一起做同樣的事
集羣是一組相互獨立的、通過高速網絡互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與集羣相互作用時,集羣像是一個獨立的服務器。集羣配置是用於提高可用性和可縮放性。
2.2、分佈式
簡單的說是:多個人在一起做不同的事
分佈式系統(distributed system)是建立在網絡之上的軟件系統。正是因爲軟件的特性,所以分佈式系統具有高度的內聚性和透明性。因此,網絡和分佈式系統之間的區別更多的在於高層軟件(特別是操作系統),而不是硬件。
2.3、etcd
所有master的持續狀態都存在etcd的一個實例中。這可以很好地存儲配置數據。因爲有watch(觀察者)的支持,各部件協調中的改變可以很快被察覺。
一致且高度可用的鍵值存儲,用作Kubernetes的所有羣集數據的後備存儲。
2.4、Node
節點,是Kubernetes中的工作機器,以前稱爲a minion。節點可以是VM或物理機,具體取決於集羣。每個節點都包含運行pod所需的服務,並由主組件管理。節點上的服務包括容器運行時,kubelet和kube-proxy。
目前,有三個組件與Kubernetes節點接口交互:節點控制器,kubelet和kubectl
2.5、Pod
pod,是Kubernetes應用最小,最簡單的在創建或部署Kubernetes對象模型單元的基本執行單元。Pod表示在集羣上運行的進程。
Kubernetes集羣中的Pod可以以兩種主要方式使用:
- 運行單個容器的Pod
- 運行多個需要協同工作的容器的Pod
Pod旨在支持多個協作流程(作爲容器),形成一個有凝聚力的服務單元。Pod中的容器自動位於羣集中的同一物理或虛擬機上,並共同調度。容器可以共享資源和依賴關係,彼此通信,並協調它們何時以及如何終止
2.6、Controller Manager
Controller Manager作爲集羣內部的管理控制中心,負責集羣內的Node、Pod副本、服務端點(Endpoint)、命名空間(Namespace)、服務賬號(ServiceAccount)、資源定額(ResourceQuota)的管理,當某個Node意外宕機時,Controller Manager會及時發現並執行自動化修復流程,確保集羣始終處於預期的工作狀態。
2.7、kube-proxy
kube-proxy是在集羣中的每個節點上運行的網絡代理,實現Kubernetes 服務的一部分將一組Pod上概念。
kube-proxy維護節點上的網絡規則。這些網絡規則允許通過羣集內部或外部的網絡會話與Pod進行網絡通信。
kube-proxy使用操作系統數據包過濾層(如果有)並且可用。否則,kube-proxy會轉發流量本身
2.8、kubelet
kubelet負責管理pods和它們上面的容器,images鏡像、volumes、etc。
2.9、Scheduler
調度器把未調度的pod通過binding api綁定到節點上。調度器是可插拔的,並且我們期待支持多集羣的調度,未來甚至希望可以支持用戶自定義的調度器。
2.10、Container Runtime
Runtime指的是容器運行環境.
Kubernetes支持多個容器運行時:Docker, containerd,cri-o, rktlet以及Kubernetes CRI(容器運行時接口)的任何實現
2.11、 CRD(CustomResourceDefinition)自定義資源
CustomResourceDefinition(CRD)是 v1.7 新增的無需改變代碼就可以擴展 Kubernetes API 的機制,用來管理自定義對象。
2.12 、APIServer
APIServer負責對外提供RESTful的Kubernetes API服務,它是系統管理指令的統一入口,任何對資源進行增刪改查的操作都要交給APIServer處理後再提交給etcd
3、各組件之間的關係圖
4、學習網址
官網:
https://kubernetes.io/
K8S中文社區:
https://www.kubernetes.org.cn/k8s