1. 程式人生 > >Kubernetes ReplicaSet 和 HPA 介紹

Kubernetes ReplicaSet 和 HPA 介紹

1.前言

在kubernetes中,Pod是最基礎的排程單位,多個pod 可以組成一個集合,這個集合向外提供服務。這時候,我們需要以下兩種情形需要關注:

1)集合中的Pod可能會由於某種原因Fail,這時候需要某種機制能夠建立新的Pod以確保有足夠數量的Pod在執行。

2)Pod 的個數由訪問請求決定。即當前例項個數不足以滿足訪問請求時,需要增加例項個數,反之,需要通過某種策略減少例項數。

如果人工來實時監控例項的執行狀態,手動啟動新的pod以替代fail的pod,監控例項的負載情況,手動建立或者刪除pod,這個工作繁瑣且工作量大,好在kubernetes已經有相應的機制來應對這種變化。

2.概要

宣告: 這裡的介紹主要基於kubernetes官網的內容,您可以選擇

kubernetes 官網 閱讀更加詳細內容。

1)關於RelicationController 和 RelicaSet

簡單來說,這兩者的主要作用都是確保有指定的數量的Pod例項在執行,區別在於後者是前者的升級版。他們都會檢測Pod的個數,一旦某個pod fail,則啟動新的Pod,當然如果數量過多(fail的pod復活),則需要刪除某些例項。

這裡目前有兩種常見的使用場景。第一,通過一個RC(或RS)部署一個Pod,這種情形下,一個Pod fail,RS 會主動建立新的Pod來替換舊的Pod,反之,會刪除多餘的Pod,這也是一種高可用的方案。第二種,通過RS部署多個Pod,這種情形下,一旦某個Pod fail 掉,RS同樣會建立新的Pod來彌補,以確保總是有相同數目的pod在提供服務,不至於由於pod fail,應用的服務水平下降。

下面是一個RC的yaml定義檔案:

apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    app: nginx
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
這裡的replicas即需要維持的Pod個數,值得一提的是,這個個數是可以改變的,只需要修改這個檔案,然後執行替換操作即可,然後RS就會按照新的數量維護Pod個數。

這裡的template即Pod的定義,這個與建立單個pod的定義是一致的,事實上,這個配置會傳遞下去,通過這個配置建立pod。

在建立RS後,Pod 與 RS 是關聯到一起的。那麼如果刪除這個RS,Pod是否會存在呢? 預設是會刪除的,但是可以傳入引數加以控制。

You can delete a replication controller without affecting any of its pods.
Using kubectl, specify the --cascade=false option to kubectl delete.
最後,需要指出的是,RS 建立新的pod 依然會通過排程器來做排程,一旦排程失敗,則無法完成這個過程,新建立的pod一直處於pending狀態,直到有合適的Node供排程器排程。另外還有一種極特殊的情形,即建立RS的時候,在定義中指定了nodeName,這時候就不會經過排程器,這時候一旦這個Pod失敗,那麼RS不會通過排程器尋找合適的Node,依然會在當前的Pod上嘗試建立Pod,當然結果是Fail,於是很快會出現很多Fail狀態的Pod,這樣死迴圈下去,將會導致資源耗盡。

2)Horizontal Pod Autoscaling

關於HPA,官方解釋如下:

With Horizontal Pod Autoscaling, Kubernetes automatically scales the number of pods in a replication controller, deployment or replica set based on 
observed CPU utilization (or, with alpha support, on some other, application-provided metrics)
相信這個已經解釋非常清楚了,根據CPU的使用率來決定是否需要增加或減少例項。

插一句:據社群官方文件,社群正在積極尋求更多的方面考慮(如記憶體、I/O)與CPU一起決定增加或減少例項。官方已經給出了設計文件,這個設計文件涉及到相關的概念,演算法等各個方面:https://github.com/kubernetes/kubernetes/blob/master/docs/design/horizontal-pod-autoscaler.md


這張圖來自Kubernetes官方,形象地概括了通過HPA如何實現Auto Scale。這裡涉及到Deployment,我們後面再討論。HPA 最重要的使用場景在於Rolling Update。在虛擬化的時代,通常是多個虛擬機器組成的叢集,取出某個例項進行升級,然後放回叢集,再升級另一個,直到叢集中的所有例項升級完成才結束。我們的Pod與虛擬化中的虛擬機器比較類似,那麼HPA是如何升級的呢?

HPA會建立一個新的RS,原來的RS裡面會減少一個Pod,新的RS會增加一個Pod,這樣逐個Pod進行升級,直到所有的Pod都從原來的RS下升級到新的RS下,升級圓滿結束。

3.總結

Kubernetes 有很多有意思的特性值得去發掘,社群也有很多有意思的事情值得去做,希望大家多瞭解kubernetes,一起完善kubernetes,讓這個社群更強大。

相關推薦

Kubernetes ReplicaSet HPA 介紹

1.前言在kubernetes中,Pod是最基礎的排程單位,多個pod 可以組成一個集合,這個集合向外提供服務。這時候,我們需要以下兩種情形需要關注:1)集合中的Pod可能會由於某種原因Fail,這時候需要某種機制能夠建立新的Pod以確保有足夠數量的Pod在執行。2)Pod

Kubernetes NodePort、LoadBalancerIngress介紹

最近,有人問我NodePorts,LoadBalancers和Ingress之間有什麼區別。 它

jQuery選擇器引擎Sizzle介紹

document 遞歸 展示 學院 extra 上下文 和源 err sizzle p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Arial; color: #323333 } p.p2 { margin: 0.0

軟中斷tasklet介紹

表示 種類 blog 連接 關系 定義 深入 tor 好的 今天看了下tasklet,重點分析了其和軟中斷的關系,特此記錄 關於軟中斷,在之前的中斷文章中已經有所介紹,這裏就不多說了,只是說明下,系統中默認支持32種軟中斷,而實際上系統定義的軟中斷僅有以下幾種。 e

架構師之路--搜索業務技術介紹及容錯機制

朋友 單節點 adb 一致性 公司 一個 memcache 消息通知 包括  今天和搜索部門一起做了一下MQ的遷移,順便交流一下業務和技術。發現現在90後小夥都挺不錯。我是指能力和探究心。我家男孩,不招女婿。   在前面的文章中也提到,我們有媒資庫(樂視視頻音頻本身內容)

Linux 查看磁盤分區、文件系統、磁盤的使用情況相關的命令工具介紹

rfs partition pan 包含 logical cor name blocks 為什麽 Linux 磁盤分區表、文件系統的查看、統計的工具很多,有些工具是多功能的,不僅僅是查看磁盤的分區表,而且也能進行磁盤分區的操作;但在本文,我們只講磁盤分區的查看,以及分區的

Scanner的概述方法介紹

數據 tint sys 標記 strong new can 取字符 col Scanner的概述和方法介紹 一:Scanner的構造方法原理    1.Scanner(InputStream source)         構造一個新的 Scanner,它

微信小程序 WXML、WXSS JS介紹及詳解

名單 獲取 hang href 直接 last 1.2 data sub 前幾天折騰了下。然後列出一些實驗結果,供大家參考。 百牛信息技術bainiu.ltd整理發布於博客園 0. 使用開發工具模擬的和真機差異還是比較大的。也建議大家還是真機調試比較靠譜。 1. WXML(

【轉】ROCAUC介紹以及如何計算AUC

image 第一個 true 編寫代碼 提前 好的 詳細說明 receiver 展示 轉自:http://alexkong.net/2013/06/introduction-to-auc-and-roc/ ROC(Receiver Operating Character

mysql字符集排序介紹

mysq 簡體 binary set 服務器 客服 result system nic 客服端字符集: character_set_client utf8mb4連接字符集: character_set_connection utf8mb4數據庫字符集: character_

MS Sql Server 中主從庫的配置使用介紹

money mas 篩選 緩存 事務性 添加 com 對象 報表 https://technet.microsoft.com/zh-cn/ff806143.aspx 網站規模到了一定程度之後,該分的也分了,該優化的也做了優化,但是還是不能滿足業務上對性能的要求;這時候我們

IntelliJ IDEA 緩存索引介紹清理方法

and 解決 控制 會有 介紹 查找 搜索 log 歷史 IntelliJ IDEA 的緩存和索引主要是用來加快文件查詢,從而加快各種查找、代碼提示等操作的速度。但是,IntelliJ IDEA 的索引和緩存並不是一直會良好地支持 IntelliJ IDEA 的,這某些特殊

常見的幾種編碼(ANSI、GBK、GB2312、UTF-8、GB18030 UNICODE)介紹

比特流 這一 數學 str odin 似的 英語 信息 繼續 轉載:http://blog.jobbole.com/30526/ 編碼一直是讓新手頭疼的問題,特別是 GBK、GB2312、UTF-8 這三個比較常見的網頁編碼的區別,更是讓許多新手暈頭轉向,怎麽解釋也解釋不清

linux下常見內存異常查證工具方法介紹

linux 內存異常 efence 函數棧linux下常見內存異常查證工具和方法介紹內存異常導致的異常往往很難查證,本文介紹在linux下的各種常見內存異常的查證工具和方法。1、訪問空指針/未初始化指針這個是最簡單的內存異常了,只要能夠生成coredump文件,可以快速定位問題代碼。開啟coredump部分

Puppet 之 相關概念命令介紹

puppet 概念 命令1 概述puppet是一種Linux、Unix、windows平臺的集中配置管理系統,使用自有的puppet描述語言,可管理配置文件、用戶、cron任務、軟件包、系統服務等。puppet把這些系統實體稱之為資源,puppet的設計目標是簡化對這些資源的管理以及妥善處理資源間的依賴關系

ZBrushCore界面導航介紹

3D圖形繪制軟件 ZBrushCore界面 ZBrushCore導航 ZBrush®簡體中文版ZBrushCore的強勢發布,吸引了一眾粉絲的高度關註,英語菜鳥們發出了由衷的感嘆:終於可以毫無壓力地使用ZBrush了。那麽ZBrushCore的界面和導航究竟是什麽樣子的呢?真的如你們

java集合系列——Set之HashSetTreeSet介紹(十)

最大 ... gpo 鏈表 key 同步 中大 nds set接口 一.Set的簡介Set是一個不包含重復元素的 collection。更確切地講,set 不包含滿足 e1.equals(e2) 的元素。對 e1 和 e2,並且最多包含一個為 null 的元素。 Set的類

微服務架構 SpringCloud(一)組件概念介紹

都在 tar 需要 冗余代碼 watermark keep 諸多 註冊 路由配置 一:什麽是微服務(Microservice)  微服務英文名稱Microservice,Microservice架構模式就是將整個Web應用組織為一系列小的Web服務。這些小的Web服務可以獨

XssCsrf介紹

常見 post 接收 一個 spa name down 技術 int Xss和Csrf介紹 Xss Xss(跨站腳本攻擊),全稱Cross Site Scripting,惡意攻擊者向web頁面中植入惡意js代碼,當用戶瀏覽到該頁時,植入的代碼被執行,達到惡意攻擊用戶的目的。

Redis安裝基礎介紹

不同類 src 遠程 inline 不安裝 ora tracking 一個 snippets 一:初識Redis   Redis是一個遠程內存數據庫,它不僅性能強勁,而且還具有復制特性以及為解決問題而生的獨一無二的數據模型。Redis提供了5種不同類型的數據結構,各式各樣的