中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

kubernetes中有狀態應用怎么縮容

發布時間:2022-01-07 14:55:15 來源:億速云 閱讀:151 作者:iii 欄目:云計算

這篇文章主要介紹“kubernetes中有狀態應用怎么縮容 ”,在日常操作中,相信很多人在kubernetes中有狀態應用怎么縮容 問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”kubernetes中有狀態應用怎么縮容 ”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

通過StatefulSet創建的每個Pod都有自己的PersistentVolumeClaim(PVC)和PersistentVolume(PV)。當按一個副本按比例縮小StatefulSet的大小時,其Pod之一將終止,但關聯的PersistentVolumeClaim和綁定到其的PersistentVolume保持不變。在隨后擴大規模時,它們會重新連接到Pod。

kubernetes中有狀態應用怎么縮容Scaling a StatefulSet

現在,想象一下使用StatefulSet部署一個有狀態的應用程序,其數據在其pod中進行分區。每個實例僅保存和處理一部分數據。當您縮小有狀態應用的規模時,其中一個實例將終止,其數據應重新分配到其余的Pod。如果您不重新分配數據,則在再次進行擴展之前,它仍然不可訪問。

kubernetes中有狀態應用怎么縮容Redistributing data on scale-down

在正常關機期間重新分發數據

您可能會想:“既然Kubernetes支持Pod正常關閉的機制,那么Pod是否可以在關閉過程中簡單地將其數據重新分配給其他實例呢?”事實上,它不能。為什么不這樣做有兩個原因:

  • Pod(或更確切地說,其容器)可能會收到除縮容以外的其他原因的終止信號。容器中運行的應用程序不知道為什么終止該程序,因此不知道是否要清空數據。

  • 即使該應用程序可以區分是縮容還是由于其他原因而終止,它也需要保證即使經過數小時或數天也可以完成關閉程序。 Kubernetes不提供該保證。如果應用程序進程在關閉過程中死掉,它將不會重新啟動,因此也就沒有機會完全分發數據。

因此,相信在正常關閉期間Pod能夠重新分發(或以其他方式處理其所有數據)并不是一個好主意,并且會導致系統非常脆弱。

使用 tear-down 容器?

如果您不是Kubernetes的新手,那么你很可能知道什么是初始化容器。它們在容器的主要容器之前運行,并且必須在主要容器啟動之前全部完成。

如果我們有tear-down容器(類似于init容器),但是在Pod的主容器終止后又會運行,該怎么辦?他們可以在我們的有狀態Pod中執行數據重新分發嗎?

kubernetes中有狀態應用怎么縮容

假設tear-down容器能夠確定Pod是否由于縮容而終止。并假設Kubernetes(更具體地說是Kubelet)將確保tear-down容器成功完成(通過在每次返回非零退出代碼時重新啟動它)。如果這兩個假設都成立,我們將擁有一種機制,可確保有狀態的容器始終能夠按比例縮小規模重新分配其數據。

但是?

可悲的是,當tear-down容器本身發生瞬態錯誤,并且一次或多次重新啟動容器最終使它成功完成時,像上述的tear-down容器機制將只處理那些情況。但是,在tear-down過程中托管Pod的集群節點死掉的那些不幸時刻又如何呢?顯然,該過程無法完成,因此無法訪問數據。

現在很明顯,我們不應該在Pod關閉時執行數據重新分配。相反,我們應該創建一個新的Pod(可能安排在一個完全不同的集群節點上)以執行重新分發過程。

這為我們帶來了以下解決方案:

縮小StatefulSet時,必須創建一個新的容器并將其綁定到孤立的PersistentVolumeClaim。我們稱其為“drain pod”,因為它的工作是將數據重新分發到其他地方(或以其他方式處理)。Pod必須有權訪問孤立的數據,并且可以使用它做任何想做的事情。由于每個應用程序的重新分發程序差異很大,因此新的容器應該是完全可配置的-用戶應該能夠在drain Pod內運行他們想要的任何容器。

StatefulSet Drain Controller

由于StatefulSet控制器當前尚不提供此功能,因此我們可以實現一個額外的控制器,其唯一目的是處理StatefulSet縮容。我最近實現了這種控制器的概念驗證。您可以在GitHub上找到源代碼:

luksa/statefulset-scaledown-controllergithub.com

下面我們解釋一下它是如何工作的。

在將控制器部署到Kubernetes集群后,您只需在StatefulSet清單中添加注釋,即可將drain容器模板添加到任何StatefulSet中。這是一個例子:

apiVersion: apps/v1kind: StatefulSetmetadata: name: datastore annotations: statefulsets.kubernetes.io/drainer-pod-template: |  {  "metadata": {   "labels": {   "app": "datastore-drainer".........

到此,關于“kubernetes中有狀態應用怎么縮容 ”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

米易县| 鄂伦春自治旗| 濉溪县| 焦作市| 新平| 白银市| 崇州市| 雷波县| 资中县| 西昌市| 河池市| 永城市| 建宁县| 蓬莱市| 仙游县| 神池县| 合阳县| 大宁县| 蕲春县| 雷山县| 彭水| 平顺县| 从江县| 惠水县| 大邑县| 钦州市| 泗水县| 岑溪市| 通城县| 阿拉善左旗| 环江| 隆林| 台南县| 曲松县| 双牌县| 壤塘县| 石首市| 绥芬河市| 防城港市| 茶陵县| 江川县|