天天看點

Kubernetes進階自學系列 | Kubernetes基礎

作者:熱愛程式設計的通信人

書籍來源:《Kubernetes進階實戰(第2版)》

一邊學習一邊整理讀書筆記,并與大家分享,侵權即删,謝謝支援!

附上彙總貼:Kubernetes進階自學系列 | 彙總_COCOgsta的部落格-CSDN部落格

1.2.1 Kubernetes叢集概述

Kubernetes是一個跨多主機的容器編排平台,它使用共享網絡将多個主機建構成統一的叢集。其中Master(主節點),作為控制中心負責管理整個叢集系統,餘下的所有主機運作為Worker Node(工作節點),這些工作節點使用本地和外部資源接收請求并以Pod(容器集)形式運作工作負載。

Kubernetes進階自學系列 | Kubernetes基礎

概括來說,Kubernetes将所有工作節點的資源集結在一起形成一台更加強大的“伺服器”,其計算和存儲接口通過Master之上的API服務暴露,再由Master通過排程算法将用戶端通過API送出的工作負載運作請求自動指派至某特定的工作節點以Pod對象的形式運作。

Kubernetes程式自身更像是建構在底層主機組成的叢集之上的“雲作業系統”或“雲原生應用作業系統”,而容器是運作其上的程序,Pod類似于單機作業系統上的“程序組”,它包含一到多個容器,卻是Kubernetes上的最小排程單元,因而同一Pod内的容器必須運作于同一工作節點之上,如圖1-7所示。

Kubernetes進階自學系列 | Kubernetes基礎

Kubernetes本質是“以應用為中心”的現代應用基礎設施,它通過管理各種基礎支撐類服務将各種傳統中間件“下沉”至自身内部,并經由聲明式API向上層應用暴露這些基礎設施能力。

在開發基于Kubernetes的雲原生應用時,程式員可更好地集中精力于應用程式的業務本身而無須為程式中需要內建基礎設施的能力而困擾。

Kubernetes以資源形式抽象出多種概念以描述應用程式及其周邊元件,這些程式及元件被統稱為API對象,它們有特定的類型,例如Node、Namespace、Pod、Service和Deployment等。Kubernetes使用“名稱空間”為名稱提供了作用域,并将大多數資源類型歸屬到名稱空間級别。

運作應用的請求需要以配置清單(manifest)格式送出給Kubernetes API進行。Kubernetes支援JSON或YAML編碼的配置清單,由API伺服器通過HTTP/HTTPS協定接收配置清單并存儲于etcd中,查詢請求的結果也将以JSON序列化格式傳回,同時支援更高效的Protobuf格式。

1.2.2 Kubernetes叢集架構

Kubernetes屬于典型的Server-Client形式的二層架構,Master主要由API Server、Controller-Manager和Scheduler這3個元件,以及一個用于叢集狀态存儲的etcd存儲服務組成;而每個Node節點則主要包含kubelet、kube-proxy及容器運作時3個元件,它們承載運作各類應用容器。

Kubernetes進階自學系列 | Kubernetes基礎
  1. Master元件

Master元件負責持續管理對象狀态并響應叢集中各種資源對象的管理操作,以及確定各資源對象的實際狀态與所需狀态相比對。控制平面各元件及其主要功能如下。

(1)API Server

API Server是Kubernetes控制平面的前端,支援不同類型應用的生命周期編排。它還是整個叢集的網關接口,由kube-apiserver将RESTful API公開給使用者,是發往叢集的所有REST操作指令的接入點,用于接收、校驗以及響應所有的REST請求,并将結果狀态持久存儲于叢集狀态存儲系統(etcd)中。

(2)叢集狀态存儲

Kubernetes叢集的所有狀态資訊都需要持久存儲于存儲系統etcd中。

etcd還為其存儲的資料提供了監聽機制,用于監視和推送變更。

(3)控制器管理器

控制器負責實作使用者通過API Server送出的終态聲明,它通過一系列操作步驟驅動API對象的目前狀态逼近或等同于期望狀态。

(4)排程器

Kubernetes系統上的排程是指為API Server接收到的每一個Pod建立請求,并在叢集中為其比對出一個最佳工作節點。kube-scheduler是預設排程器程式,它在比對工作節點時的考量因素包括硬體、軟體與政策限制,親和力與反親和力規範以及資料的局部性等特征。

  1. Node元件

Node元件是叢集的“體力”輸出者,因而一個叢集通常會有多個Node以提供足夠的承載力來運作容器化應用和其他工作負載。每個Node會定期向Master報告自身的狀态變動,并接受Master的管理。

(1)kubelet

kubelet是運作于每個Node之上的“節點代理”服務,負責接收并執行Master發來的指令,以及管理目前Node上Pod對象的容器等任務。它支援從API Server以配置清單形式接收Pod資源定義,或者從指定的本地目錄中加載靜态Pod配置清單,并通過容器運作時建立、啟動和監視容器。

kubelet會持續監視目前節點上各Pod的健康狀态,包括基于使用者自定義的探針進行存活狀态探測,并在任何Pod出現問題時将其重建為新執行個體。

(2)容器運作時環境

Pod是一組容器組成的集合并包含這些容器的管理機制,真正負責運作容器的依然是底層的容器運作時。kubelet通過CRI(容器運作時接口)可支援多種類型的OCI容器運作時,例如docker、containerd、CRI-O、runC、fraki和Kata Containers等。

(3)kube-proxy

kube-proxy把API Server上的Service資源對象轉換為目前節點上的iptables或(與)ipvs規則,這些規則能夠将那些發往該Service對象ClusterIP的流量分發至它後端的Pod端點之上。kube-proxy本質上更像是Pod的代理及負載均衡器,負責確定叢集中Node、Service和Pod對象之間的有效通信。

  1. 核心附件

附件(add-ons)用于擴充Kubernetes的基本功能,根據重要程度将其劃分為必要和可選兩個類别。網絡插件是必要附件,常用的有Flannel、Calico、Canal、Cilium和Weave Net等。KubeDNS通常也是必要附件之一,而Web UI、容器資源監控系統、叢集日志系統和Ingress Controller等是常用附件。

在這些附件中,CoreDNS、監控系統、日志系統和Ingress控制器基礎支撐類服務是可由叢集管理的基礎設施,而Dashboard則是提高使用者效率和體驗的可視化工具,類似的項目還有polaris和octant等。

繼續閱讀