Replication Controller腿短、Replica Set

Replication Controller炒瘸、Replica Set

假如我們現(xiàn)在有一個Pod正在提供線上的服務膘滨,我們來想想一下我們可能會遇到的一些場景:

  • 某次運營活動非常成功,網(wǎng)站訪問量突然暴增
  • 運行當前Pod的節(jié)點發(fā)生故障了捶枢,Pod不能正常提供服務了

第一種情況握截,可能比較好應對,一般活動之前我們會大概計算下會有多大的訪問量烂叔,提前多啟動幾個Pod川蒙,活動結(jié)束后再把多余的Pod殺掉,雖然有點麻煩长已,但是應該還是能夠應對這種情況的畜眨。

第二種情況,可能某天夜里收到大量報警說服務掛了术瓮,然后起來打開電腦在另外的節(jié)點上重新啟動一個新的Pod康聂,問題也很好的解決了。

如果我們都人工的去解決遇到的這些問題胞四,似乎又回到了以前刀耕火種的時代了是吧恬汁,如果有一種工具能夠來幫助我們管理Pod就好了,Pod不夠了自動幫我新增一個辜伟,Pod掛了自動幫我在合適的節(jié)點上重新啟動一個Pod氓侧,這樣是不是遇到上面的問題我們都不需要手動去解決了。

幸運的是导狡,Kubernetes就為我們提供了這樣的資源對象:

  • Replication Controller:用來部署约巷、升級Pod
  • Replica Set:下一代的Replication Controller
  • Deployment:可以更加方便的管理PodReplica Set

Replication Controller(RC)

Replication Controller簡稱RCRCKubernetes系統(tǒng)中的核心概念之一旱捧,簡單來說独郎,RC可以保證在任意時間運行Pod的副本數(shù)量踩麦,能夠保證Pod總是可用的。如果實際Pod數(shù)量比指定的多那就結(jié)束掉多余的氓癌,如果實際數(shù)量比指定的少就新啟動一些Pod谓谦,當Pod失敗、被刪除或者掛掉后贪婉,RC都會去自動創(chuàng)建新的Pod來保證副本數(shù)量反粥,所以即使只有一個Pod,我們也應該使用RC來管理我們的Pod疲迂。

我們想想如果現(xiàn)在我們遇到上面的問題的話才顿,可能除了第一個不能做到完全自動化,其余的我們是不是都不用擔心了鬼譬,運行Pod的節(jié)點掛了娜膘,RC檢測到Pod失敗了逊脯,就會去合適的節(jié)點重新啟動一個Pod就行优质,不需要我們手動去新建一個Pod了。如果是第一種情況的話在活動開始之前我們給Pod指定10個副本军洼,結(jié)束后將副本數(shù)量改成2巩螃,這樣是不是也遠比我們手動去啟動、手動去關(guān)閉要好得多匕争,而且我們后面還會給大家介紹另外一種資源對象HPA可以根據(jù)資源的使用情況來進行自動擴縮容避乏,這樣以后遇到這種情況,我們就真的可以安心的去睡覺了甘桑。

現(xiàn)在我們來使用RC來管理我們前面使用的NginxPod拍皮,YAML文件如下:

apiVersion: v1
kind: ReplicationController
metadata:
  name: rc-demo
  labels:
    name: rc
spec:
  replicas: 3
  selector:
    name: rc
  template:
    metadata:
     labels:
       name: rc
    spec:
     containers:
     - name: nginx-demo
       image: nginx
       ports:
       - containerPort: 80

上面的YAML文件相對于我們之前的Pod的格式:

  • kind:ReplicationController
  • spec.replicas: 指定Pod副本數(shù)量,默認為1
  • spec.selector: RC通過該屬性來篩選要控制的Pod
  • spec.template: 這里就是我們之前的Pod的定義的模塊跑杭,但是不需要apiVersionkind
  • spec.template.metadata.labels: 注意這里的Podlabels要和spec.selector相同铆帽,這樣RC就可以來控制當前這個Pod了。

這個YAML文件中的意思就是定義了一個RC資源對象德谅,它的名字叫rc-demo爹橱,保證一直會有3個Pod運行,Pod的鏡像是nginx鏡像窄做。

注意spec.selectorspec.template.metadata.labels這兩個字段必須相同愧驱,否則會創(chuàng)建失敗的,當然我們也可以不寫spec.selector椭盏,這樣就默認與Pod模板中的metadata.labels相同了组砚。所以為了避免不必要的錯誤的話,不寫為好掏颊。

然后我們來創(chuàng)建上面的RC對象(保存為 rc-demo.yaml):
$ kubectl create -f rc-demo.yaml

查看RC

$ kubectl get rc

查看具體信息:
$ kubectl describe rc rc-demo

然后我們通過RC來修改下Pod的副本數(shù)量為2:
$ kubectl apply -f rc-demo.yaml

或者
$ kubectl edit rc rc-demo

而且我們還可以用RC來進行滾動升級惫确,比如我們將鏡像地址更改為nginx:1.7.9:
$ kubectl rolling-update rc-demo --image=nginx:1.7.9

但是如果我們的Pod中多個容器的話,就需要通過修改YAML文件來進行修改了:
$ kubectl rolling-update rc-demo -f rc-demo.yaml

如果升級完成后出現(xiàn)了新的問題,想要一鍵回滾到上一個版本的話改化,使用RC只能用同樣的方法把鏡像地址替換成之前的掩蛤,然后重新滾動升級。

Replication Set(RS)

Replication Set簡稱RS陈肛,隨著Kubernetes的高速發(fā)展揍鸟,官方已經(jīng)推薦我們使用RSDeployment來代替RC了,實際上RSRC的功能基本一致句旱,目前唯一的一個區(qū)別就是RC只支持基于等式的selector(env=dev或environment!=qa)阳藻,但RS還支持基于集合的selector(version in (v1.0, v2.0)),這對復雜的運維管理就非常方便了谈撒。

kubectl命令行工具中關(guān)于RC的大部分命令同樣適用于我們的RS資源對象腥泥。不過我們也很少會去單獨使用RS,它主要被Deployment這個更加高層的資源對象使用啃匿,除非用戶需要自定義升級功能或根本不需要升級Pod蛔外,在一般情況下,我們推薦使用Deployment而不直接使用Replica Set溯乒。

最后我們總結(jié)下關(guān)于RC/RS的一些特性和作用吧:

  • 大部分情況下夹厌,我們可以通過定義一個RC實現(xiàn)的Pod的創(chuàng)建和副本數(shù)量的控制
  • RC中包含一個完整的Pod定義模塊(不包含apiversionkind
  • RC是通過label selector機制來實現(xiàn)對Pod副本的控制的
  • 通過改變RC里面的Pod副本數(shù)量,可以實現(xiàn)Pod的擴縮容功能
  • 通過改變RC里面的Pod模板中鏡像版本裆悄,可以實現(xiàn)Pod的滾動升級功能(但是不支持一鍵回滾矛纹,需要用相同的方法去修改鏡像地址)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市光稼,隨后出現(xiàn)的幾起案子或南,更是在濱河造成了極大的恐慌,老刑警劉巖艾君,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件采够,死亡現(xiàn)場離奇詭異,居然都是意外死亡腻贰,警方通過查閱死者的電腦和手機吁恍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來播演,“玉大人冀瓦,你說我怎么就攤上這事⌒纯荆” “怎么了翼闽?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長洲炊。 經(jīng)常有香客問我感局,道長尼啡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任询微,我火速辦了婚禮崖瞭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘撑毛。我一直安慰自己书聚,他們只是感情好,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布藻雌。 她就那樣靜靜地躺著雌续,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胯杭。 梳的紋絲不亂的頭發(fā)上驯杜,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機與錄音做个,去河邊找鬼鸽心。 笑死,一個胖子當著我的面吹牛叁温,可吹牛的內(nèi)容都是我干的再悼。 我是一名探鬼主播核畴,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼膝但,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谤草?” 一聲冷哼從身側(cè)響起跟束,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎丑孩,沒想到半個月后冀宴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡温学,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年略贮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仗岖。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡逃延,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出轧拄,到底是詐尸還是另有隱情揽祥,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布檩电,位于F島的核電站拄丰,受9級特大地震影響府树,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜料按,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一奄侠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧载矿,春花似錦魏蔗、人聲如沸权谁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽流炕。三九已至,卻和暖如春瓶您,著一層夾襖步出監(jiān)牢的瞬間舟陆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工敏沉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留果正,地道東北人。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓盟迟,卻偏偏與公主長得像秋泳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子攒菠,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容