k8s配置pods滾動發布

背景

采用微服務架構部署的應用,部署方式都要用到容器化部署+k8s容器編排,最近我在公司負載的系統也是用的上述架構部署,但是隨著系統的運行,用戶提的需求就會越多,每次更新的話都要停機發布,最用戶側來說就不太方便了,傳統的部署方式是使用nginx來做負載均衡,然后手動來做滾動發布,殊不知k8s也有自己的一套配置,來解決滾動發布的事情,并且系統發布時用戶側其實是無感知的;

配置文件代碼

先上代碼,再講解各個參數的含義

apiVersion: apps/v1  
kind: Deployment  
metadata:  name: my-app-deployment  labels:  app: my-app  
spec:  replicas: 3  selector:  matchLabels:  app: my-app  strategy:  type: RollingUpdate  rollingUpdate:  maxSurge: 1  maxUnavailable: 1 template:  metadata:  labels:  app: my-app  spec:  containers:  - name: my-app-container  image: your-image-repository/my-app:latest  ports:  - containerPort: 8080  readinessProbe:  httpGet:  path: /system/health/readniess  port: 8080  initialDelaySeconds: 5  periodSeconds: 10  livenessProbe:  httpGet:  path: /system/health/readniess  port: 8080  initialDelaySeconds: 15  periodSeconds: 20minReadySeconds: 50

配置參數說明

這里的配置文件中主要用到了strategy,readinessProbe,livenessProbe等主要的參數,下面講解一下這寫參數的含義;
strategy
將現有 Pod 替換為新 Pod 時所用的部署策略。其下面有以下可用參數:
??type:部署的類型。取值可以是 “Recreate” 或 “RollingUpdate”。默認為 RollingUpdate;Recreate是重建式更新,在創建新 Pod 之前,所有現有的 Pod 會被殺死;RollingUpdate是滾動更新,簡單定義 更新期間pod最多有幾個等。可以指定maxUnavailable 和 maxSurge 來控制 rollingupdate 進程;Recreate會導致站點的停機,RollingUpdate則可以通過相關的配置,保證站點正常接收流量的情況下,部署新版本升級,不影響用戶使用;
??rollingUpdate 當type=rollingUpdate時才需設置此參數,rollingUpdate下的參數有如下這些:

  1. maxSurge :超出預期的 Pod 數量之后可以調度的最大 Pod 數量。該值可以是一個絕對數(例如: 5)或一個預期 Pod 的百分比(例如:10%)。如果 MaxUnavailable 為 0,則此字段不能為 0。 通過向上取整計算得出一個百分比絕對數。默認為 25%。例如:當此值設為 30% 時, 如果滾動更新啟動,則可以立即對 ReplicaSet 擴容,從而使得新舊 Pod 總數不超過預期 Pod 數量的 130%。 一旦舊 Pod 被殺死,則可以再次對新的 ReplicaSet 擴容, 確保更新期間任何時間運行的 Pod 總數最多為預期 Pod 數量的 130%
  2. maxUnavailable :更新期間可能不可用的最大 Pod 數量。該值可以是一個絕對數(例如: 5)或一個預期 Pod 的百分比(例如:10%)。通過向下取整計算得出一個百分比絕對數。 如果 MaxSurge 為 0,則此字段不能為 0。默認為 25%。 例如:當此字段設為 30%,則在滾動更新啟動時 ReplicaSet 可以立即縮容為預期 Pod 數量的 70%。 一旦新的 Pod 就緒,ReplicaSet 可以再次縮容,接下來對新的 ReplicaSet 擴容, 確保更新期間任何時間可用的 Pod 總數至少是預期 Pod 數量的 70%

readinessProbe
就緒探針;指示容器是否準備好為請求提供服務。如果就緒態探測失敗, 端點控制器將從與 Pod 匹配的所有服務的端點列表中刪除該 Pod 的 IP 地址。 初始延遲之前的就緒態的狀態值默認為 Failure。 如果容器不提供就緒態探針,則默認狀態為 Success。
例如,應用在啟動時可能需要加載大量的數據或配置文件,或是啟動后要依賴等待外部服務。 在這種情況下,既不想殺死應用,也不想給它發送請求。 Kubernetes 提供了就緒探針來發現并緩解這些情況。 容器所在 Pod 上報還未就緒的信息,并且不接受通過 Kubernetes Service 的流量。
說明:就緒探針在容器的整個生命周期中保持運行狀態。也就是說配置后就緒探針會一直運行,確服務是否就緒狀態;
就緒探針可以使用使用 HTTP GET 請求、TCP 套接字、exec、 gRPC 健康檢查協議來進行探測,我這里使用的是http請求后臺服務的一個接口來判斷應用是否已經啟動好了,如果啟動好了,那就對外部提供服務;
就緒探針下常用的參數配置:
??initialDelaySeconds:容器啟動后要等待多少秒后才啟動啟動、存活和就緒探針。 如果定義了啟動探針,則存活探針和就緒探針的延遲將在啟動探針已成功之后才開始計算。 如果 periodSeconds 的值大于 initialDelaySeconds,則 initialDelaySeconds 將被忽略。默認是 0 秒,最小值是 0。
??periodSeconds:執行探測的時間間隔(單位是秒)。默認是 10 秒。最小值是 1。
??failureThreshold:探針連續失敗了 failureThreshold 次之后, Kubernetes 認為總體上檢查已失敗:容器狀態未就緒、不健康、不活躍。 對于啟動探針或存活探針而言,如果至少有 failureThreshold 個探針已失敗, Kubernetes 會將容器視為不健康并為這個特定的容器觸發重啟操作。 kubelet 遵循該容器的 terminationGracePeriodSeconds 設置。 對于失敗的就緒探針,kubelet 繼續運行檢查失敗的容器,并繼續運行更多探針; 因為檢查失敗,kubelet 將 Pod 的 Ready 狀況設置為 false。
其他常用的配置可以查閱官網 k8s官網

livenessProbe
指示容器是否準備好為請求提供服務。如果就緒態探測失敗, 端點控制器將從與 Pod 匹配的所有服務的端點列表中刪除該 Pod 的 IP 地址。 初始延遲之前的就緒態的狀態值默認為 Failure。 如果容器不提供就緒態探針,則默認狀態為 Success。
存活探針來確定什么時候要重啟容器。 例如,存活探針可以探測到應用死鎖(應用在運行,但是無法繼續執行后面的步驟)情況。 重啟這種狀態下的容器有助于提高應用的可用性,即使其中存在缺陷。
存活探針的常用參數和就緒探針完全一致,可以參考存活探針的使用方法;

最后我的配置文件內還使用了minReadySeconds參數,他的意思是:新建的 Pod 在沒有任何容器崩潰的情況下就緒并被系統視為可用的最短秒數。 默認為 0(Pod 就緒后即被視為可用)。

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

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

相關文章

【C語言刷題系列】求一個數組中兩個元素a和b的和最接近整數m

💓 博客主頁:倔強的石頭的CSDN主頁 📝Gitee主頁:倔強的石頭的gitee主頁 ? 文章專欄:C語言刷題系列 目錄 一、問題描述 二、解題思路 解題思路: 解題步驟: 三、C語言代碼實現及測試 一、問題描述 給定一…

指北者智能音樂學習機隆重亮相廣州國際樂器展

2024年5月23-26日廣州國際樂器展覽會在廣交會展館B區隆重開幕,本屆展會開設5大展廳、50000平方米的主題展區,吸引了700多家國內外參展商參展,打造集展示、商貿、文化交流、文娛于一體的廣闊平臺。深圳市指北科技有限公司也攜旗下品牌指北者智…

AWS云服務器每月費用高昂,如何優化達到節省目的?

AWS云服務器每月費用可能因不同的使用情況和配置而有所不同。為了優化并節省AWS云服務器的費用,aws的合作伙伴九河云提供了一些建議: (1)調整實例大小:確保你使用的實例大小與你的工作負載相匹配。實例的容量每增加一倍…

Gopeed的高級用法

Gopeed是一個開源全平臺下載器,具體簡介請參考: “狗屁下載器”?Gopeed - 開源全平臺下載器 (免費輕量 / 比 Aria2 好用 / 遠程下載) - 異次元軟件世界 (iplaysoft.com) 這里主要介紹下自己摸索出來的 Gopeed 的高級做法。 有的網站添加的…

時政|醫療結果互認

背景(存在的問題) 看同一種病,換一家醫院甚至換一個院區、換一個科室,檢查檢驗還得再來一遍,費錢又費時。開展檢查檢驗結果互認,可以明顯減輕患者就醫負擔。患者不用做重復檢查,也可節約就醫時…

基于JSP/Servlet校園二手交易平臺(二)

目錄 2 開發技術及開發環境 2.1 Java語言簡介 2.2 J2EE技術介紹 2.3 Servlet/JSP技術 2.4 MVC 簡介 2.5 Struts 技術 2.6 Hibernate 技術 2.6.1 應用程序的分層體系結構 2.6.2 Hibernate的應用及API簡介 2.7 開發環境及環境配置 2.7.1 Java/JSP系統環境 2.7.2 JSP環…

D365 SysDictTable\SysDictField

文章目錄 前言一、示例 前言 SysDictField 和 SysDictTable 用于訪問表和字段的元數據信息。 一、示例 循環表,使對應數據源的字段禁止編輯 public void fieldNoAllowEdit(Common _common,formDataSource fds,boolean aE false){TableId tab…

小程序-購物車-基于SKU電商規格組件實現

SKU 概念: 存貨單位( Stock Keeping Unit ), 庫存 管理的最小可用單元,通常稱為“單品”。 SKU 常見于電商領域,對于前端工程師而言,更多關注 SKU 算法 ,基于后端的 SKU 數據…

(二)vForm 動態表單設計器之下拉、選擇

系列文章目錄 (一)vForm 動態表單設計器之使用 目錄 系列文章目錄 前言 一、后端需提供接口 二、組件配置 總結 前言 動態表單下拉、選擇等組件,大概率要使用數據庫中的數據,那么vForm如何拿到數據庫中的數據呢?跟隨…

僵尸進程、孤兒進程、守護進程

【一】僵尸進程和孤兒進程 【1】引入 我們知道在unix/linux中,正常情況下,子進程是通過父進程創建的,子進程在創建新的進程。 子進程的結束和父進程的運行是一個異步過程,即父進程永遠無法預測子進程 到底什么時候結束。 當一個 進程完成它…

動物合并消除休閑游戲源碼 Animal Merge 益智游戲

一款動物合并消除休閑游戲源碼,Animal Merge是一款引人入勝的益智游戲,玩家的任務是合并方塊,創造出可愛的動物,這些動物的體型會逐漸變大。游戲玩法包括將方塊放到網格上,并戰略性地將它們合并以形成更大的動物形狀。…

作文筆記9 描寫方法

動態描寫: 威尼斯小艇,窗外的風景飛快的后退。 靜態描寫: 牧場之國,牛不再哞哞,馬忘記了踢馬房的擋板。 動靜結合: 火車進站,人聲鼎沸,叫賣聲,廣播聲,人…

【408精華知識】主存相關解題套路大揭秘!

講完了Cache,再來講講主存是怎么考察的,我始終認為,一圖勝千言,所以對于很多部件,我都是通過畫圖進行形象的記憶,那么接下來我們對主存也畫個圖,然后再來詳細解讀其考察套路~ 文章目錄 零、主存…

機器人正逆運動學、動力學概念

1.基本概念 建立機器人的正逆運動學和正逆動力學模型是為了解決不同類型的控制和規劃問題。這些模型幫助工程師和研究人員理解和預測機器人的行為,從而設計出更有效的控制策略和運動規劃。以下是建立這些模型的主要原因和一些應用實例: 正運動學模型 正…

python-pytorch 下批量seq2seq+Bahdanau Attention實現問答1.0.000

python-pytorch 下批量seq2seq+Bahdanau Attention實現簡單問答1.0.000 前言原理看圖數據準備分詞、index2word、word2index、vocab_size輸入模型的數據構造注意力模型decoder的編寫關于損失函數和優化器在預測時完整代碼參考前言 前面實現了 luong的dot 、general、concat注意…

【話題】我眼神的IT行業現狀與未來趨勢

目錄 一、挑戰 教學資源的重新分配 教師角色的轉變 學生學習方式的改變 教育評價體系的挑戰 二、機遇 個性化學習 跨學科學習 國際合作與交流 創新教育模式 三、如何培養下一代IT專業人才 更新教育理念 加強基礎設施建設 整合課程資源 加強實踐教學 培養跨學科…

easy-es EsAutoConfiguration RestHighLevelClient 沒有自動注入配置

我用的easy-es.version 是 2.0.0-beta1,是基于springboot2開發的,自動注入配置的目錄掃描的是META-INF/spring.factories文件;而我使用的框架是springboot3,springboot3掃描的是META-INF/spring/org.springframework.boot.autocon…

【算法刷題day57】Leetcode:739. 每日溫度、496.下一個更大元素 I

文章目錄 Leetcode 739. 每日溫度解題思路代碼總結 Leetcode 496.下一個更大元素 I解題思路代碼總結 草稿圖網站 java的Deque Leetcode 739. 每日溫度 題目:739. 每日溫度 解析:代碼隨想錄解析 解題思路 維護一個單調棧,當新元素大于棧頂&a…

【Linux】TCP協議【中】{確認應答機制/超時重傳機制/連接管理機制}

文章目錄 1.確認應答機制2.超時重傳機制:超時不一定是真超時了3.連接管理機制 1.確認應答機制 TCP協議中的確認應答機制是確保數據可靠傳輸的關鍵部分。以下是該機制的主要步驟和特點的詳細解釋: 數據分段與發送: 發送方將要發送的數據分成一…

vue深度選擇器(:deep?)

處于 scoped 樣式中的選擇器如果想要做更“深度”的選擇&#xff0c;也即&#xff1a;影響到子組件&#xff0c;可以使用 :deep() 這個偽類&#xff1a; <style lang"scss" scoped> .evaluation-situation-details :deep .cl-icon-arrow-right {display: none…