網站首頁 編程語言 正文
通過查看創建一個吊艙或一個部署時的 10 個步驟,可以更好地了解 Kubernetes。
當你在 Kubernetes 上使用容器時,你經常把應用程序組合在一個吊艙pod中。當你把一個容器或一個吊艙發布到生產環境中時,它被稱為一個部署deployment。如果你每天甚至每周都在使用 Kubernetes,你可能已經這樣做過幾百次了,但你有沒有想過,當你創建一個吊艙或一個部署時到底會發生什么?
我發現在高層次上了解事件鏈條是有幫助的。當然,你不一定要理解它。即使你不知道為什么,它仍然在工作。我不打算列出每一件發生的小事,但我的目標是涵蓋所有重要的事情。
這里有一張 Kubernetes 不同組件如何互動的視覺地圖。
吊艙鏈條
你可能注意到,在上圖中,我沒有包括 etcd。API 服務器是唯一能夠直接與 etcd 對話的組件,而且只有它能夠對 etcd 進行修改。因此,你可以認為 etcd 在這張圖中存在于(隱藏的)API 服務器后面。
另外,我在這里只講到了兩個主要的控制器(部署控制器Deployment controller和復制集控制器ReplicaSet controller)。其他的控制器的工作方式類似。
下面的步驟描述了當你執行?kubectl create
?命令時會發生什么。
步驟 1
當你使用?kubectl create
?命令時,一個 HTTP POST 請求被發送到 API 服務器,其中包含部署清單。API 服務器將其存儲在 etcd 數據存儲中,并返回一個響應給?kubectl
。
步驟 2 和 3
API 服務器有一個觀察機制,所有觀察它的客戶都會得到通知。客戶端通過打開與 API 服務器的 HTTP 連接來觀察變化,API 服務器會流式地發出通知。其中一個客戶端是部署控制器。
部署控制器檢測到一個部署Deployment對象,它用部署的當前規格創建一個復制集ReplicaSet。該資源被送回 API 服務器,并存儲在 etcd 數據存儲中。
步驟 4 和 5
與上一步類似,所有觀察者都會收到關于 API 服務器中的變化的通知。這一次,復制集控制器會接收這一變化。
該控制器了解所需的副本數量和對象規格中定義的吊艙選擇器,創建吊艙資源,并將這些信息送回 API 服務器,存儲在 etcd 數據存儲中。
步驟 6 和 7
Kubernetes 現在擁有運行吊艙所需的所有信息,但吊艙應該在哪個節點上運行?調度器Scheduler觀察那些還沒有分配到節點的吊艙,并開始對所有節點進行過濾和排序,以選擇最佳節點來運行吊艙。
一旦節點被選中,該信息將被添加到吊艙規格中。而且它被送回 API 服務器并存儲在 etcd 數據存儲中。
步驟 8、9 和 10
到目前為止的所有步驟都發生在控制平面control plane本身。工作節點worker node還沒有做任何工作。不過,吊艙的創建并不是由控制平面處理的。
相反,在所有節點上運行的?kubelet
?服務觀察 API 服務器中的吊艙規格,以確定它是否需要創建任何吊艙。
在調度器選擇的節點上運行的 kubelet 服務獲得吊艙規格,并指示工作節點上的容器運行時創建容器。這時就會下載一個容器鏡像(如果它還不存在的話),容器就會實際開始運行。
理解 Kubernetes 的部署
對這個一般流程的理解可以幫助你理解 Kubernetes 中的許多事件。考慮一下 Kubernetes 中的守護進程集DaemonSet或狀態集StatefulSet。除了使用不同的控制器外,吊艙的創建過程是一樣的。
課后作業:如果部署被修改為有三個應用程序的副本,導致創建吊艙的事件鏈條會是什么樣子?你可以參考圖表或列出的步驟,但你肯定有你需要弄清楚的知識。知識就是力量,你現在有了了解 Kubernetes 的一個重要組成部分。
原文鏈接:https://linux.cn/article-14317-1.html
相關推薦
- 2022-04-28 sql?server?累計求和實現代碼_MsSql
- 2022-08-15 使用element中el-table設置type=“expand“展開行隱藏小箭頭的方法(列表單選、
- 2022-07-22 解決安裝時間序列分析庫fbprophet
- 2023-06-21 Rust?Atomics?and?Locks?源碼解讀_Rust語言
- 2022-07-31 深入了解Go的interface{}底層原理實現_Golang
- 2022-03-16 Linux系統中日志詳細介紹_Linux
- 2022-05-26 Pytorch中使用ImageFolder讀取數據集時忽略特定文件_python
- 2022-12-01 sqlserver數據庫導入方法的詳細圖文教程_MsSql
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支