您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Kubernetes中如何面向終態設計與控制器,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
概述
Kubernetes主要是通過ETCD來存儲所有的元數據及感知數據的變化而做相關的動作的。因此,可以認為Kubernetes是圍繞ETCD打造的一套面向終態的編排邏輯的。
在整個Kubernetes設計理念中,面向終態是其核心理念,通過該設計理念,提升了Kubernetes同其他容器調度平臺的競爭力。
什么才是面向終態的設計
比如:我這個應用需要10個實例;我要一個VIP;我要一個持久盤;這機器故障時,幫我自動跟換一臺,等等;
以上這些需求,通過聲明后,提交給系統,系統會自動化的完成這些用戶期望的事情。而這中方式,就是一種面向終態的設計。而Kubernetes的面向終態設計也就和此類似,而暴露給用戶的使用方式就是“聲明式API”。
用戶通過該類聲明式API,提交相關的期望。Kubernetes就會去解析并保證最終的結果和用戶提交的期望是一致的。
聲明式API
Kubernetes中這套聲明式的API,主要就是用來控制內部的資源,主要包含如下方法:
以下為一個Deployment資源,可以通過以上的API進行創建
apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx name: nginx-test #以上為資源的元數據 spec: replicas: 1 #期望的狀態,比如這里期望一個副本 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx:latest name: nginx status: replicas: 1 #Kubernetes實際的狀態
當以上這個資源通過API被創建后,Kubernetes就會通過內置控制器不斷的嘗試達到用戶期望的終態。
Create : 用于創建一個資源對象;
Update : 用于對某個資源進行更新,采用樂觀鎖的方式控制版本;
Patch : 用于部分更新,該方法并沒有鎖,會直接覆蓋更新,當前提供了幾種方式,如下 * Strategic Patch : 用于K8s的原生資源,不能對CRD資源使用,屬于K8s特有的。 * Json patch:RFC 6902 * Json merge:RFC 7386 * Server side apply * Delete : 刪除對象
GET : 通過name對某個namespace下的資源進行查詢
List : 給定條件查詢一批對象;
什么是控制器模式
通過“List Watch機制” 實現對Kubernetes相關資源變化的關注,而觸發控制器邏輯的處理,完成最終的用戶期望,并通過APIServer更新到ETCD中。而這種方式,則稱為“控制器模式”。Kubernetes很多的組件都是通過這種方式,實現對資源的觀察和處理的,如controller-manager,Kubelet,Scheduler等。
控制器模式下的交互
整個Kubernetes的組件都是圍繞APIServer進行交互的,除開APIServer組件,其他組件一般都不會直接交互。
整體架構如下:
用戶通過kubectl提交一個資源給Kubernetes APIServer,然后APIServer存儲到ETCD中,此時其他組件關注自己感興趣的資源,進行監聽,并作出反應。
例如: 用戶提交了一個Deployment資源,期望部署3個實例。那么此時Kubernetes的APIServer會把該數據存儲到ETCD中,而此時調度器通過List Watch機制監聽到沒有被調度到的Pod進行調度。當標記了該資源內的Pod要調度到那一臺機器上后,另一個組件kubelet也會通過List Watch機制,進行最終的部署,實現終態,完成用戶期望的3個實例的部署。
上述就是小編為大家分享的Kubernetes中如何面向終態設計與控制器了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。