【Kubernetes(K8S)】學習記錄一:概念總結


前言-背景

容器是捆綁和運行應用程序的好方法。在生產環境中,您需要管理運行應用程序的容器並確保沒有停機時間。例如,如果容器發生故障,則需要啓動另一個容器。如果系統處理這種行爲會不會更容易?

這就是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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章