溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Kubernetes中如何面向終態(tài)設(shè)計與控制器

發(fā)布時間:2021-10-12 14:16:54 來源:億速云 閱讀:214 作者:柒染 欄目:云計算

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)Kubernetes中如何面向終態(tài)設(shè)計與控制器,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

面向終態(tài)設(shè)計概述整理

  • 概述

    Kubernetes主要是通過ETCD來存儲所有的元數(shù)據(jù)及感知數(shù)據(jù)的變化而做相關(guān)的動作的。因此,可以認(rèn)為Kubernetes是圍繞ETCD打造的一套面向終態(tài)的編排邏輯的。

    在整個Kubernetes設(shè)計理念中,面向終態(tài)是其核心理念,通過該設(shè)計理念,提升了Kubernetes同其他容器調(diào)度平臺的競爭力。

  • 什么才是面向終態(tài)的設(shè)計

    比如:我這個應(yīng)用需要10個實例;我要一個VIP;我要一個持久盤;這機器故障時,幫我自動跟換一臺,等等;

    以上這些需求,通過聲明后,提交給系統(tǒng),系統(tǒng)會自動化的完成這些用戶期望的事情。而這中方式,就是一種面向終態(tài)的設(shè)計。而Kubernetes的面向終態(tài)設(shè)計也就和此類似,而暴露給用戶的使用方式就是“聲明式API”。

    用戶通過該類聲明式API,提交相關(guān)的期望。Kubernetes就會去解析并保證最終的結(jié)果和用戶提交的期望是一致的。

  • 聲明式API

    Kubernetes中這套聲明式的API,主要就是用來控制內(nèi)部的資源,主要包含如下方法:

    以下為一個Deployment資源,可以通過以上的API進行創(chuàng)建

     apiVersion: apps/v1
    	kind: Deployment
    	metadata:
    	  labels:
    	    app: nginx
    	  name: nginx-test				#以上為資源的元數(shù)據(jù)
    	spec:
    	  replicas: 1						#期望的狀態(tài),比如這里期望一個副本
    	  selector:
    	    matchLabels:
    	      app: nginx
    	  template:
    	    metadata:
    	      labels:
    	        app: nginx
    	    spec:
    	      containers:
    	      - image: nginx:latest
    	        name: nginx
    	status:
    	  replicas: 1					#Kubernetes實際的狀態(tài)


    當(dāng)以上這個資源通過API被創(chuàng)建后,Kubernetes就會通過內(nèi)置控制器不斷的嘗試達(dá)到用戶期望的終態(tài)。

    • Create : 用于創(chuàng)建一個資源對象;

    • Update : 用于對某個資源進行更新,采用樂觀鎖的方式控制版本;

    • Patch : 用于部分更新,該方法并沒有鎖,會直接覆蓋更新,當(dāng)前提供了幾種方式,如下 * Strategic Patch : 用于K8s的原生資源,不能對CRD資源使用,屬于K8s特有的。 * Json patch:RFC 6902 * Json merge:RFC 7386 * Server side apply * Delete : 刪除對象

    • GET : 通過name對某個namespace下的資源進行查詢

    • List : 給定條件查詢一批對象;

面向終態(tài)的核心實現(xiàn):控制器模式

  • 什么是控制器模式

    通過“List Watch機制” 實現(xiàn)對Kubernetes相關(guān)資源變化的關(guān)注,而觸發(fā)控制器邏輯的處理,完成最終的用戶期望,并通過APIServer更新到ETCD中。而這種方式,則稱為“控制器模式”。Kubernetes很多的組件都是通過這種方式,實現(xiàn)對資源的觀察和處理的,如controller-manager,Kubelet,Scheduler等。

  • 控制器模式下的交互

    整個Kubernetes的組件都是圍繞APIServer進行交互的,除開APIServer組件,其他組件一般都不會直接交互。

整體架構(gòu)如下:

Kubernetes中如何面向終態(tài)設(shè)計與控制器

用戶通過kubectl提交一個資源給Kubernetes APIServer,然后APIServer存儲到ETCD中,此時其他組件關(guān)注自己感興趣的資源,進行監(jiān)聽,并作出反應(yīng)。

例如: 用戶提交了一個Deployment資源,期望部署3個實例。那么此時Kubernetes的APIServer會把該數(shù)據(jù)存儲到ETCD中,而此時調(diào)度器通過List Watch機制監(jiān)聽到?jīng)]有被調(diào)度到的Pod進行調(diào)度。當(dāng)標(biāo)記了該資源內(nèi)的Pod要調(diào)度到那一臺機器上后,另一個組件kubelet也會通過List Watch機制,進行最終的部署,實現(xiàn)終態(tài),完成用戶期望的3個實例的部署。

上述就是小編為大家分享的Kubernetes中如何面向終態(tài)設(shè)計與控制器了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI