k8s操作pod物件的所有業務邏輯 都是由各種控制器來完成的
k8s的所有控制器都儲存在pkg/controller目錄下 這個目錄下的每個控制器都以自己的方式負責某種編排功能
它們都遵循著一種通用的編排模式 控制迴圈(control loop)= 調諧迴圈 = 同步迴圈
通過在乙個無限迴圈中 比較某個編排物件的兩種狀態 使物件的實際狀態無限的等於物件的期望狀態
1.期望狀態** 使用者提交的yaml檔案 儲存在etcd中
2.實際狀態** 集群中的動態資訊
被控制物件的定義,則來自於乙個"模板".比如,deployment裡的template 欄位.可以看到,deployment 這個template欄位裡的內容,跟乙個標準的pod物件的api定義,絲毫不差.而所有被這個deployment 管理的pod例項,其實都是根據這個template欄位的內容建立出來的.
像 deployment 定義的 template 字段,在kubernetes專案中有乙個專有的名字,叫作 podtemplate(pod 模板).大多數控制器,都會使用podtemplate來統一定義它所要管理的pod.還有其他型別的物件模板,比如volume 的模板.
在所有api物件的 metadata裡,都有乙個字段叫作 ownerreference,用於儲存建立當前這個 api(pod) 物件的擁有者(owner)的資訊
這些控制迴圈最後的執行結果,要麼就是建立,更新一些 pod(或者其他的api物件,資源),要麼就是刪除一些已經存在的pod(或者其他的api物件,資源)
正是在這個統一的編排框架下,不同的控制器可以在具體執行過程中,設計不同的業務邏輯,從而達到不同的編排效果
這個實現思路,正是 kubernetes 專案進行容器編排的核心原理
"控制器模式"和"事件驅動"的區別
事件往往是一次性的,如果操作失敗比較難處理,但是控制器是迴圈一直在嘗試的,更符合kubernetes申明式api,最終達到與申明一致
k8s 六 pod控制器 (二)
daemonset確保全部 或者一些 node 上執行乙個 pod 的副本。當有 node 加入集群時,也會為他們新增乙個 pod 當有 node 從集群移除時,這些 pod 也會被 刪除 daemonset 將會刪除它建立的所有 pod。使用 daemonset 的一些典型用法 乙個簡單的用法是,...
k8s 多租戶 k8s 基礎介紹
備註 1 每乙個pod裡執行著乙個特殊的容器 pause容器,其他容器都是業務容器,這些業務容器共享pause容器的網路棧和volume 邏輯卷 掛載卷。因此他們之間的通訊和資料交換更為高效。2 k8s設計了pod物件,將每個服務程序包裝到相應的pod中,使其成為pod中執行的乙個容器 contai...
k8s元件介紹
master 管理節點 api server 供kubernetes api介面,主要處理 rest操作以及更新etcd中的物件。所有資源增刪改查的唯一入口。scheduler 繫結pod到node上,資源排程。controller manager 所有其他群集級別的功能,目前由控制器manager...