成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

干貨速遞 ▎Kubernetes有狀態(tài)集群服務(wù)部署與管理(下)

BDEEFE / 3572人閱讀

摘要:千呼萬喚始出來,有狀態(tài)集群服務(wù)部署與管理下將著重介紹與有狀態(tài)集群服務(wù)相關(guān)的兩個(gè)新特性和。把這些特性和有狀態(tài)集群服務(wù)關(guān)聯(lián)起來串一下,我們可以用來管理一個(gè)有狀態(tài)服務(wù)集群,里每個(gè)對應(yīng)集群的一個(gè)成員,集群的初始化可以用來完成。

千呼萬喚始出來,《Kubernetes有狀態(tài)集群服務(wù)部署與管理(下)》將著重介紹Kubernetes與有狀態(tài)集群服務(wù)相關(guān)的兩個(gè)新特性:Init Container Pet Set 。

Tips: 關(guān)注公眾號(hào):tenxcloud2(時(shí)速云訂閱號(hào)),回復(fù) "1206"即可下載現(xiàn)場PPT。

什么是Init Container?

從名字來看就是做初始化工作的容器。可以有一個(gè)或多個(gè),如果有多個(gè),這些 Init Container 按照定義的順序依次執(zhí)行,只有所有的Init Container 執(zhí)行完后,主容器才啟動(dòng)。由于一個(gè)Pod里的存儲(chǔ)卷是共享的,所以 Init Container 里產(chǎn)生的數(shù)據(jù)可以被主容器使用到。

Init Container可以在多種 K8S 資源里被使用到如 Deployment、Daemon Set, Pet Set, Job等,但歸根結(jié)底都是在Pod啟動(dòng)時(shí),在主容器啟動(dòng)前執(zhí)行,做初始化工作。

我們在什么地方會(huì)用到 Init Container呢?

第一種場景是等待其它模塊Ready,比如我們有一個(gè)應(yīng)用里面有兩個(gè)容器化的服務(wù),一個(gè)是Web Server,另一個(gè)是數(shù)據(jù)庫。其中Web Server需要訪問數(shù)據(jù)庫。但是當(dāng)我們啟動(dòng)這個(gè)應(yīng)用的時(shí)候,并不能保證數(shù)據(jù)庫服務(wù)先啟動(dòng)起來,所以可能出現(xiàn)在一段時(shí)間內(nèi)Web Server有數(shù)據(jù)庫連接錯(cuò)誤。為了解決這個(gè)問題,我們可以在運(yùn)行Web Server服務(wù)的Pod里使用一個(gè)Init Container,去檢查數(shù)據(jù)庫是否準(zhǔn)備好,直到數(shù)據(jù)庫可以連接,Init Container才結(jié)束退出,然后Web Server容器被啟動(dòng),發(fā)起正式的數(shù)據(jù)庫連接請求。

第二種場景是做初始化配置,比如集群里檢測所有已經(jīng)存在的成員節(jié)點(diǎn),為主容器準(zhǔn)備好集群的配置信息,這樣主容器起來后就能用這個(gè)配置信息加入集群。

還有其它使用場景,如將pod注冊到一個(gè)中央數(shù)據(jù)庫、下載應(yīng)用依賴等。

這些東西能夠放到主容器里嗎?從技術(shù)上來說能,但從設(shè)計(jì)上來說,可能不是一個(gè)好的設(shè)計(jì)。首先不符合單一職責(zé)原則,其次這些操作是只執(zhí)行一次的,如果放到主容器里,還需要特殊的檢查來避免被執(zhí)行多次。

這是Init Container的一個(gè)使用樣例

這個(gè)例子創(chuàng)建一個(gè)Pod,這個(gè)Pod里跑的是一個(gè)nginx容器,Pod里有一個(gè)叫workdir的存儲(chǔ)卷,訪問nginx容器服務(wù)的時(shí)候,就會(huì)顯示這個(gè)存儲(chǔ)卷里的index.html 文件。

而這個(gè)index.html 文件是如何獲得的呢?是由一個(gè)Init Container從網(wǎng)絡(luò)上下載的。這個(gè)Init Container 使用一個(gè)busybox鏡像,起來后,執(zhí)行一條wget命令,獲取index.html文件,然后結(jié)束退出。

由于Init Container和nginx容器共享一個(gè)存儲(chǔ)卷(這里這個(gè)存儲(chǔ)卷的名字叫workdir),所以在Init container里下載的index.html文件可以在nginx容器里被訪問到。

可以看到 Init Container 是在 annotation里定義的。Annotation 是K8S新特性的實(shí)驗(yàn)場,通常一個(gè)新的Feature出來一般會(huì)先在Annotation 里指定,等成熟穩(wěn)定了,再給它一個(gè)正式的屬性名或資源對象名。

介紹完Init Container,千呼萬喚始出來,主角Pet Set該出場了。

什么是Pet Set?在數(shù)據(jù)結(jié)構(gòu)里Set是集合的意思,所以顧名思義Pet Set就是Pet的集合,那什么是Pet呢?我們提到過Cattle和Pet的概念,Cattle代表無狀態(tài)服務(wù),而Pet代表有狀態(tài)服務(wù)。具體在K8S資源對象里,Pet是一種需要特殊照顧的Pod。它有狀態(tài)、有身份、當(dāng)然也比普通的Pod要復(fù)雜一些。

具體來說,一個(gè)Pet有三個(gè)特征。

一是有穩(wěn)定的存儲(chǔ),這是通過我們前面介紹的PV/PVC 來實(shí)現(xiàn)的。

二是穩(wěn)定的網(wǎng)絡(luò)身份,這是通過一種叫 Headless Service 的特殊Service來實(shí)現(xiàn)的。要理解Headless Service是如何工作的,需要先了解Service是如何工作。我們提到過Service可以為多個(gè)Pod實(shí)例提供一個(gè)穩(wěn)定的對外訪問接口。這個(gè)穩(wěn)定的接口是如何實(shí)現(xiàn)的的呢,是通過Cluster IP來實(shí)現(xiàn)的,Cluster IP是一個(gè)虛擬IP,不是真正的IP,所以穩(wěn)定。K8S會(huì)在每個(gè)節(jié)點(diǎn)上創(chuàng)建一系列的IPTables規(guī)則,實(shí)現(xiàn)從Cluster IP到實(shí)際Pod IP的轉(zhuǎn)發(fā)。同時(shí)還會(huì)監(jiān)控這些Pod的IP地址變化,如果變了,會(huì)更新IP Tables規(guī)則,使轉(zhuǎn)發(fā)路徑保持正確。所以即使Pod IP有變化,外部照樣能通過Service的ClusterIP訪問到后面的Pod。

普通Service的Cluster IP 是對外的,用于外部訪問多個(gè)Pod實(shí)例。而Headless Service的作用是對內(nèi)的,用于為一個(gè)集群內(nèi)部的每個(gè)成員提供一個(gè)唯一的DNS名字,這樣集群成員之間就能相互通信了。所以Headless Service沒有Cluster IP,這是它和普通Service的區(qū)別。

Headless Service為每個(gè)集群成員創(chuàng)建的DNS名字是什么樣的呢?右下角是一個(gè)例子,第一個(gè)部分是每個(gè)Pet自己的名字,后面foo是Headless Service的名字,default是PetSet所在命名空間的名字,cluser.local是K8S集群的域名。對于同一個(gè)Pet Set里的每個(gè)Pet,除了Pet自己的名字,后面幾部分都是一樣的。所以要有一個(gè)穩(wěn)定且唯一的DNS名字,就要求每個(gè)Pet的名字是穩(wěn)定且唯一的。

三是序號(hào)命名規(guī)則。Pet是一種特殊的Pod,那么Pet能不能用Pod的命名規(guī)則呢?答案是不能,因?yàn)镻od的名字是不穩(wěn)定的。Pod的命名規(guī)則是,如果一個(gè)Pod是由一個(gè)RC創(chuàng)建的,那么Pod的名字是RC的名字加上一個(gè)隨機(jī)字符串。為什么要加一個(gè)隨機(jī)字符串,是因?yàn)镽C里指定的是Pod的模版,為了實(shí)現(xiàn)高可用,通常會(huì)從這個(gè)模版里創(chuàng)建多個(gè)一模一樣的Pod實(shí)例,如果沒有這個(gè)隨機(jī)字符串,同一個(gè)RC創(chuàng)建的Pod之間就會(huì)由名字沖突。

如果說某個(gè)Pod由于某種原因死掉了,RC會(huì)新建一個(gè)來代替它,但是這個(gè)新建里的Pod名字里的隨機(jī)字符串與原來死掉的Pod是不一樣的。所以Pod的名字跟它的IP一樣是不穩(wěn)定的。

為了解決名字不穩(wěn)定的問題,K8S對Pet的名字不再使用隨機(jī)字符串,而是為每個(gè)Pet分配一個(gè)唯一不變的序號(hào),比如 Pet Set 的名字叫 mysql,那么第一個(gè)啟起來的Pet就叫 mysql-0,第二個(gè)叫 mysql-1,如此下去。

當(dāng)一個(gè)Pet down 掉后,新創(chuàng)建的Pet 會(huì)被賦予跟原來Pet一樣的名字。由于Pet名字不變所以DNS名字也跟以前一樣,同時(shí)通過名字還能匹配到原來Pet用到的存儲(chǔ),實(shí)現(xiàn)狀態(tài)保存。

這些是Pet Set 相關(guān)的一些操作:

Peer discovery,這和我們上面的Headless Service有密切關(guān)系。通過Pet Set的 Headless Service,可以查到該Service下所有的Pet 的 DNS 名字。這樣就能發(fā)現(xiàn)一個(gè)Pet Set 里所有的Pet。當(dāng)一個(gè)新的Pet起來后,就可以通過Peer Discovery來找到集群里已經(jīng)存在的所有節(jié)點(diǎn)的DNS名字,然后用它們來加入集群。

更新Replicas的數(shù)目、實(shí)現(xiàn)擴(kuò)容和縮容。

更新Pet Set里Pet的鏡像版本,實(shí)現(xiàn)升級。

刪除 Pet Set。刪除一個(gè)Pet Set 會(huì)先把這個(gè)Pet Set的Replicas數(shù)目縮減為0,等到所有的Pet都被刪除了,再刪除 Pet Set本身。注意Pet用到的存儲(chǔ)不會(huì)被自動(dòng)刪除。這樣用戶可以把數(shù)據(jù)拷貝走了,再手動(dòng)刪除。

以上,與有狀態(tài)服集群服務(wù)相關(guān)的K8S特性就介紹完了。

把這些特性和有狀態(tài)集群服務(wù)關(guān)聯(lián)起來串一下,我們可以用Pet Set來管理一個(gè)有狀態(tài)服務(wù)集群,Pet Set里每個(gè)Pet對應(yīng)集群的一個(gè)成員,集群的初始化可以用 Init Container來完成。集群里每個(gè)成員的狀態(tài)由Volume, Persistent Volume來存儲(chǔ),集群里每個(gè)Pet 唯一的DNS名字通過Headless Service來提供,集群里的成員之間就可以通過這個(gè)名字,相互通信。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/32529.html

相關(guān)文章

  • 干貨速遞Kubernetes狀態(tài)集群服務(wù)部署管理(上)

    摘要:有狀態(tài)集群服務(wù),與普通有狀態(tài)服務(wù)相比,它多了集群管理的需求。為此開發(fā)了一套以為核心的全新特性,方便了有狀態(tài)集群服務(wù)在上的部署和管理。 2016年12月2日,時(shí)速云架構(gòu)師張壽紅應(yīng)邀參加ArchSummit2016全球架構(gòu)師峰會(huì),并在微服務(wù)與容器實(shí)踐專場做了《Kubernetes有狀態(tài)集群服務(wù)部署與管理》的干貨分享。 showImg(https://segmentfault.com/img...

    Pink 評論0 收藏0
  • 干貨分享】云服務(wù)平臺(tái)的架構(gòu)及優(yōu)勢(上)

    摘要:來源商業(yè)新知網(wǎng),原標(biāo)題干貨分享云服務(wù)平臺(tái)的架構(gòu)及優(yōu)勢上前言我們通常所說的云服務(wù)或云平臺(tái)廣義上是一個(gè)概念,但其實(shí)內(nèi)部是兩個(gè)部分。本期我們?yōu)槟庾x云平臺(tái)的業(yè)界概況和優(yōu)勢。來源商業(yè)新知網(wǎng),原標(biāo)題:【干貨分享】云服務(wù)平臺(tái)的架構(gòu)及優(yōu)勢(上)前言 我們通常所說的云服務(wù)或云平臺(tái)廣義上是一個(gè)概念,但其實(shí)內(nèi)部是兩個(gè)部分。 1.支撐云服務(wù)運(yùn)行的硬件和軟件系統(tǒng)環(huán)境(云架構(gòu)平臺(tái),簡稱云平臺(tái)); 2.實(shí)現(xiàn)業(yè)務(wù)邏輯,支...

    xcc3641 評論0 收藏0
  • 超長干貨 | Kubernetes命名空間詳解

    摘要:使用命名空間的概念幫助解決集群中在管理對象時(shí)的復(fù)雜性問題。命名空間為集群中的對象名稱賦予作用域。同樣,命名空間范圍的策略允許運(yùn)維人員為生產(chǎn)環(huán)節(jié)設(shè)置嚴(yán)格的權(quán)限。這會(huì)修改操作在活躍時(shí)應(yīng)用到的命名空間。 K8s使用命名空間的概念幫助解決集群中在管理對象時(shí)的復(fù)雜性問題。在本文中,會(huì)討論命名空間的工作原理,介紹常用實(shí)例,并分享如何使用命名空間來管理K8s對象。最后,介紹名為projects的Ra...

    wpw 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<