深入剖析k8s-控制器思想

引言

本文是《深入剖析Kubernetes》學習筆記——《深入剖析Kubernetes》

正文

控制器都遵循K8s的項目中一個通用的編排模式——控制循環

for {實際狀態 := 獲取集群中對象X的實際狀態期望狀態 := 獲取集群中對象X的期望狀態if 實際狀態 == 期望狀態 {// do nothing} else {執行編排動作,將實際狀態調整為期望狀態}
}

作業副本與水平擴展

如果更新了Deployment的Pod模版,那么Deployment就需要遵循滾動更新的方式,來升級現有容器 → ReplicaSet.
在這里插入圖片描述
DeployController 只需要修改它所控制的ReplicaSet的Pod副本個數就可以了。

相關命令

k scale deployment nginx-deployment --replicas=4 # 調整replicas數量k rollout status deployment nginx-deployment # 實時查看Deployment對象的狀態變化k edit deployment/nginx-deployment # 通過修改yaml文件調整deployment狀態

在這里插入圖片描述
滾動更新,要求一定使用Pod的健康檢查機制檢查應用的運行狀態,而不是簡單地依賴容器的Running狀態。

在控制器在滾動更新過程中永遠會確保2個Pod處于可用狀態,至多只有4個Pod同時存在于集群中,由RollingUpdateStrategy進行控制。

  strategy:type: RollingUpdaterollingUpdate:maxSurge: 1 # 除了DESIRED數量外,在一次滾動更新中Deplyment控制氣還可以創建多個新PodmaxUnavailable: 1 # 可以刪除多少舊Pod

上述案例

k set image deployment/nginx-deployment nginx=nginx:1.91 # 設置deployment nginx版本

在這里插入圖片描述

k rollout undo deployment/nginx-deployment # 錯誤回滾,rs仍然保存k rollout history deployment/nginx-deployment --revision=2 # 查看API對象的細節k rollout undo deployment/nginx-deployment --to-revision=2 # 最后加上目標版本號,來回滾指定版本

在這里插入圖片描述

每一次操作都會生成rs,是否造成資源浪費?

解決方案1:

k rollout pause deployment/nginx-deployment... k edit / k set imagek rollout resume deploy/nginx-deployment

解決方案2:

spec.revisionHistoryLimit=0 再也不能進行回滾操作

問題

應用的發布流程往往千差萬別,可能有很多定制化的需求。例如:會有會話粘連(session sticky),這就意味著更新時哪個Pod能下線不是隨便選擇的。

StatefulSet :拓撲狀態

有些實例之間有不對等關系,以及實例對外部數據有依賴關系的應用,就稱為有狀態應用。

StatefulSet將應用狀態抽象為兩種情況

  1. 拓撲狀態:應用的多個實例之間不是完全對等的。
  2. 存儲狀態:應用的多個實例分別綁定了不同的存儲數據。

Headless Service

Services是K8s用來將一組Pod暴露給外界訪問的一個機制。

  1. 以Service的VIP(virtual IP的方式):當訪問10.0.23.1這個Service IP地址時,會把請求轉發到該Service所代理的Pod上。
  2. 以Service的DNS方式:訪問my-svc-namespace.svc.cluster.local這條DNS記錄,就可以訪問my-svc所代理的Pod上
    1. Normal Servcie:解析DNS時,返回的是VIP
    2. Headless Service:解析DNS時,直接返回的是Pod IP

創建Healess Service

apiVersion: v1
kind: Service
metadata:name: nginxlabels:app: nginx
spec:selector:app: nginxports:- name: webport: 80clusterIP: None # 不同點

創建一個Healess Service之后,所代理的所有Pod的IP都會被綁定到<pod-name>.<svc-name>.<namespace>.svc.cluster.local上。
在這里插入圖片描述

StatefulSet如何使用這個DNS記錄為維持Pod的拓撲狀態

StatefulSet讓其所有Pod都有唯一的網絡標識,即使Pod被刪除,重新創建的容器網絡標識與原先 相同 (IP不同)

StatefulSet:存儲狀態

PVC和PV的設計,實際上類似于“接口”和“實現”的思想。

開發者只要知道并會使用PVC;運維人員負責給“接口”綁定具體的實現,即PV;

apiVersion: apps/v1
kind: StatefulSet
metadata:name: web
spec:serviceName: nginx-servicereplicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.9.1ports:- containerPort: 80name: webvolumeMounts:- mountPath: /usr/share/nginx/htmlname: wwwvolumeClaimTemplates:- metadata:name: wwwspec:accessModes:- ReadWriteOnceresources:requests:storage: 1Gi

使用volumeClaimTemplate進行PV和PVC的綁定

總結

  1. StatefulSet的控制器直接管理的是Pod。
  2. K8s通過Headless Service為這些編號的Pod,在DNS服務器中生成有相同編號的DNS記錄。
  3. StatefulSet為每一個Pod分配并創建一個相同編號的PVC。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713536.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713536.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713536.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

buuctf misc做題筆記

喵喵喵 使用stegsolve.jar&#xff0c;按BGR順序提取出一個png圖片&#xff0c;是一個一半得二維碼&#xff0c;修改圖片高度后&#xff0c;解析出一個百度網盤地址&#xff0c;https://pan.baidu.com/s/1pLT2J4f 下載得到壓縮包flag.rar。解壓成功&#xff0c;但是報一個出錯…

4 在QEMU硬件模擬器中運行開源鴻蒙OpenHarmony4.1的操作系統,無需實體開發板

在QEMU硬件模擬器中運行開源鴻蒙OpenHarmony4.1的操作系統&#xff0c;無需實體開發板 作者將狼才鯨日期2024-03-01 先下載源碼和編譯程序&#xff1a; 查看 開源鴻蒙OpenHarmony4.1源碼下載、編譯&#xff0c;生成OHOS_Image可執行文件的最簡易流程 我準備在QEMU模擬器中運行…

LangChain---大型語言模型(LLM)的標準接口和編程框架

1.背景說明 公司在新的一年規劃中突然提出要搞生成式AI(GenAI)的相關東西&#xff0c;在公司分享的參考資料中了解到了一些相關的信息&#xff0c;之所以想到使用LangChain&#xff0c;是因為在應用中遇到了瓶頸問題&#xff0c;除了已經了解和研究過的OpenAI的ChatGpt&#xf…

藍橋杯Java B組歷年真題(2013年-2019年)

一、2013年真題 1、世紀末的星期 使用日期類判斷就行&#xff0c;這里使用LocalDate&#xff0c;也可以使用Calendar類 答案 2099 使用LocalDate import java.time.LocalDate; import java.time.format.DateTimeFormatter; // 1:無需package // 2: 類名必須Main, 不可修改p…

1小時網絡安全事件報告要求,持安零信任如何幫助用戶應急響應?

12月8日&#xff0c;國家網信辦起草發布了《網絡安全事件報告管理辦法&#xff08;征求意見稿&#xff09;》&#xff08;以下簡稱“辦法”&#xff09;。擬規定運營者在發生網絡安全事件時應當及時啟動應急預案進行處置。 1小時報告 按照《網絡安全事件分級指南》&#xff0c…

速盾:動態網站用cdn更慢嗎

當談到網站速度時&#xff0c;內容傳遞網絡&#xff08;Content Delivery Network&#xff0c;CDN&#xff09;是不可忽視的一個因素。很多人可能有疑惑&#xff0c;動態網站使用CDN是否會導致加載速度變慢。為了解決這個問題&#xff0c;我們需要了解動態網站和CDN的工作原理&…

mybatis動態加載mapper.xml

mybatis動態加載mapper.xml mybatis動態加載mapper.xml、springboot mybatis動態加載mapper.xml 教程連接&#xff1a;https://blog.csdn.net/weixin_44480167/article/details/136356398

測試linux系統某些文件屬性之test命令

要檢測系統上某些文件或相關屬性時&#xff0c;我們可以使用test命令&#xff0c;比如&#xff1a;檢查/root/ztj.txt文件是否存在&#xff0c;可以使用test -e /root/ztj.txt命令&#xff0c;不過執行結果不會顯示任何信息&#xff0c;需配合$?或&&及||來展現具體結果…

Find My掃地機器人|蘋果Find My技術與機器人結合,智能防丟,全球定位

掃地機器人又稱自動打掃機、智能吸塵、機器人吸塵器等&#xff0c;是智能家電的一種&#xff0c;能憑借人工智能&#xff0c;自動在房間內完成地板清理工作。一般采用刷掃和真空方式&#xff0c;將地面雜物先吸納進入自身的垃圾收納盒&#xff0c;從而完成地面清理的功能。現今…

[AutoSar]BSW_Com07 CAN報文接收流程的函數調用

目錄 關鍵詞平臺說明一、背景二、順序總覽三、函數說明3.1 Com_RxIndication&#xff08;&#xff09; 關鍵詞 嵌入式、C語言、autosar、OS、BSW 平臺說明 項目ValueOSautosar OSautosar廠商vector &#xff0c;芯片廠商TI 英飛凌編程語言C&#xff0c;C編譯器HighTec (GCC)…

貝葉斯定理與條件獨立假設:樸素貝葉斯分類方法深度解讀

今天給大家分享的是樸素貝葉斯算法&#xff0c;這個算法在實際使用中不是很多&#xff0c;因為現在很多算法已經發展的很好&#xff0c;性能上也比樸素貝葉斯算法的好很多&#xff0c;因此在實際中我們其實看到在實際應用中樸素貝葉斯算法的使用已經比較少&#xff0c;即使出現…

HotFix原理學習 IL2CPP 學習

原文鏈接&#xff1a;Unity 游戲用XLua的HotFix實現熱更原理揭秘-CSDN博客 本文通過對XLua的HoxFix使用原理的研究揭示出來這樣的一套方法。這個方法的 第一步&#xff1a;通過對C#的類與函數設置Hotfix標簽。來標識需要支持熱更的類和函數。第二步&#xff1a;生成函數連接器…

好視通視頻會議系統存在任意文件讀取漏洞復現 [附POC]

漏洞簡介 好視通視頻會議是由深圳市華視瑞通信息技術有限公司開發&#xff0c;其在國內率先推出了3G互聯網視頻會議&#xff0c;并成功應用于SAAS領域。 資產 FOFA:app"好視通-視頻會議" POC GET /register/toDownload.do?fileName../../../../../../../../../.…

代碼隨想錄-回溯算法

組合 //未剪枝 class Solution {List<List<Integer>> ans new ArrayList<>();Deque<Integer> path new LinkedList<>();public List<List<Integer>> combine(int n, int k) {backtracking(n, k, 1);return ans;}public void back…

MySql安全加固:可信IP地址訪問控制 設置密碼復雜度

MySql安全加固&#xff1a;可信IP地址訪問控制 & 設置密碼復雜度 1.1 可信IP地址訪問控制1.2 設置密碼復雜度 &#x1f496;The Begin&#x1f496;點點關注&#xff0c;收藏不迷路&#x1f496; 1.1 可信IP地址訪問控制 當您在創建用戶時使用’%作為主機部分&#xff0c;…

【C語言】字符型變量and整型變量的類型轉換

一、將字符型變量轉換為整型變量 char c A; int i (int)c; 二、將整型變量轉換成字符型變量 int i 65; char c (char)i;

Unity 實戰一:這幾年被廣告刷屏的沙雕跑酷游戲

姐就是女王&#xff0c;功夫跑酷&#xff0c;揀槍干架跑酷等 核心不用說了吧&#xff1a; 就是一個人不斷地跑&#xff0c;獲取不同屬性&#xff0c;判斷是否過關 好的&#xff0c;以下是一篇基于Unity 開發簡易版有障礙物的跑酷游戲的教程博客&#xff1a; 在這篇博客中&…

static在c語言中的作用

1、關鍵字static的作用是什么&#xff1f; 這個簡單的問題很少有人能回答完全。在C語言中&#xff0c;關鍵字static有三個明顯的作用&#xff1a; 1). 在函數體&#xff0c;一個被聲明為靜態的變量在這一函數被調用過程中維持其值不變。 2). 在模塊內(但在函數體外)&#xf…

Linux tload 命令教程:實時監控系統負載(附案例詳解和注意事項)

Linux tload 命令介紹 tload 是一個用于監控系統負載的命令行工具。它以圖形化的方式顯示系統的負載情況&#xff0c;幫助你了解 CPU 和內存的使用情況。 Linux tload 命令適用的 Linux 版本 tload 在大多數 Linux 發行版中都可用。如果你在某些特定的 Linux 發行版上找不到…

java數據結構與算法刷題-----LeetCode437. 路徑總和 III(前綴和必須掌握)

java數據結構與算法刷題目錄&#xff08;劍指Offer、LeetCode、ACM&#xff09;-----主目錄-----持續更新(進不去說明我沒寫完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目錄 1. 深度優先2. 前綴和 1. 深度優先 解題思路&#xff1a;時間復…