摘要:只有谷歌的和亞馬遜的目前被自動的支持盡管通過給節(jié)點(diǎn)和數(shù)據(jù)卷安排添加適當(dāng)?shù)臉?biāo)簽來給其他云或者裸機(jī)加入類似的支持很容易。當(dāng)建立持久數(shù)據(jù)卷時,管理控制器自動會把標(biāo)簽加給數(shù)據(jù)卷。因?yàn)閿?shù)據(jù)卷都不能跨區(qū),這意味著只能被創(chuàng)建在和數(shù)據(jù)卷同區(qū)內(nèi)。
導(dǎo)論
Kubernetes 1.2增加的一個新的功能是把一個集群跑在多個failure zone里(谷歌GCE管它叫“zone”,亞馬遜AWS管它們叫“availability zones”,這里我們統(tǒng)稱它們?yōu)椤皕ones”)。這是把多個K8S集群聯(lián)合起來(被稱為“Ubernetes”)的一個輕便的版本。Ubernetes會允許把在多個云或者不同地區(qū)的多個K8S集群聯(lián)合起來。然而,很多開發(fā)者近是簡單地想把他們云上地K8S集群跑在不同zone里,這就是K8S的1.2版本所提供的multizone(多區(qū))支持(我們稱之為“Ubernetes Lite”)。
K8S 1.2特意對多區(qū)支持做了一些限制:一個簡單的K8S集群可以跑在多區(qū),但只能是在同一個地區(qū)(和同一個云上)。只有谷歌的GCE和亞馬遜的AWS目前被自動的支持(盡管通過給節(jié)點(diǎn)和數(shù)據(jù)卷安排添加適當(dāng)?shù)臉?biāo)簽來給其他云或者裸機(jī)加入類似的支持很容易)。
功能當(dāng)節(jié)點(diǎn)啟動之后,kubelet自動給它們添加zone信息的標(biāo)簽。K8S會自動在單個區(qū)的單個集群的冗余控制器(RC)內(nèi)平均分布pods或者在節(jié)點(diǎn)上分布服務(wù)(來減少失敗帶來的影響)。對于多區(qū)集群來說,這種平均分布的行為也應(yīng)該是跨區(qū)(來減少區(qū)掛掉的影響)。(這是通過SelectorSpreadPriority來實(shí)現(xiàn)的)。這是最理想的方式,但如果你集群所在的zone是不同的(比如,節(jié)點(diǎn)數(shù)量不同,節(jié)點(diǎn)類型不同或者不同的節(jié)點(diǎn)資源要求),這些都會有可能導(dǎo)致無法完美的跨區(qū)平均分布pods。如果可以的話,你可以使用同一個區(qū)(同樣的節(jié)點(diǎn)數(shù)量和節(jié)點(diǎn)類型)來減少不平均分配的概率。
當(dāng)建立持久數(shù)據(jù)卷時,PersistentVolumeLabel管理控制器自動會把zone標(biāo)簽加給數(shù)據(jù)卷。調(diào)度器(通過VolumeZonePredicate)會確保pod和分配給這個pod的數(shù)據(jù)卷在同一個zone里,因?yàn)閿?shù)據(jù)卷不能跨區(qū)。
對于多區(qū)支持有如下幾個限制
我們假定不同的區(qū)互相距離很近,所以我們不做任何路由。尤其,通過服務(wù)過來的請求可能是跨區(qū)的(即使在一些pods里的pod是支持這些服務(wù)的且這些pods和client同區(qū)),這可能會導(dǎo)致額外的延遲和開銷。
數(shù)據(jù)卷對區(qū)有粘性,只能以PersistentVolume來工作,比如說如果你特地在pod的參數(shù)里指定一個EBS數(shù)據(jù)卷是無法奏效的。
集群不能跨云跨地區(qū)(這個功能要靠K8S完整版的集群聯(lián)合支持)。
盡管你的節(jié)點(diǎn)在多個區(qū),kube-up現(xiàn)在默認(rèn)是跑一個單一的master node。盡管服務(wù)是高可用,能在一個區(qū)內(nèi)容忍一些損失,控制層是在某個單一區(qū)內(nèi)。需要高可用控制層的開發(fā)者需留意關(guān)于K8S高可用方面的指南。
代碼梳理現(xiàn)在來梳理一下如何在GCE和AWS上建立和使用一個多區(qū)集群。你需要建一個完整的集群(指定MULTIZONE=1),然后通過再跑kube-up在其他區(qū)增加節(jié)點(diǎn)(設(shè)定KUBE_USE_EXISTING_MASTER=true)
1. 建立你的集群
和往常一樣來建立集群,傳入MULTIZONE讓集群知道去管理多區(qū),在us-central1-a里創(chuàng)建節(jié)點(diǎn):
GCE:
curl -sS https://get.k8s.io | MULTIZONE=1 KUBERNETES_PROVIDER=gce KUBE_GCE_ZONE=us-central1-aNUM_NODES=3 bash
AWS:
curl -sS https://get.k8s.io | MULTIZONE=1 KUBERNETES_PROVIDER=aws KUBE_AWS_ZONE=us-west-2a NUM_NODES=3 bash
通過這步就常規(guī)建立了一個集群,仍然在單區(qū)跑(但通過 MULTIZONE=1 賦予了多區(qū)的能力)
2 節(jié)點(diǎn)打標(biāo)簽
看下節(jié)點(diǎn),你能看到它們被打了zone信息的標(biāo)簽。它們目前都在us-central1-a (GCE) 或者在 us-west-2a (AWS) 。這些標(biāo)簽,對地區(qū)來說,是failure-domain.beta.kubernetes.io/region ;對zone來說是 failure-domain.beta.kubernetes.io/zone
3 在第二個區(qū)內(nèi)再加一些節(jié)點(diǎn)
現(xiàn)在讓我們在一個不同的zone內(nèi)(us-central1-b 或者 us-west-2b)利用已有的master,在現(xiàn)有的集群里再加入一些節(jié)點(diǎn)。我們可以再跑一下kube-up,但如果指定KUBE_USE_EXISTING_MASTER=1 的話,kube-up不會創(chuàng)建一個新的master,但會重復(fù)使用之前已有的。
GCE:
KUBE_USE_EXISTING_MASTER=true MULTIZONE=1 KUBERNETES_PROVIDER=gce KUBE_GCE_ZONE=us-central1-b NUM_NODES=3 kubernetes/cluster/kube-up.sh
在AWS上我們也需要給子網(wǎng)指定網(wǎng)絡(luò)CIDR,和master內(nèi)部的IP地址:
KUBE_USE_EXISTING_MASTER=true MULTIZONE=1 KUBERNETES_PROVIDER=aws KUBE_AWS_ZONE=us-west-2b NUM_NODES=3 KUBE_SUBNET_CIDR=172.20.1.0/24 MASTER_INTERNAL_IP=172.20.0.9 kubernetes/cluster/kube-up.sh
這時候再看下節(jié)點(diǎn),應(yīng)該增加了三個節(jié)點(diǎn),在us-central1-b里。
4 數(shù)據(jù)卷和zone的粘性
通過新的動態(tài)數(shù)據(jù)卷創(chuàng)建來創(chuàng)立一個數(shù)據(jù)卷(只有持久數(shù)據(jù)卷才能保證數(shù)據(jù)卷和zone的粘性)
持久數(shù)據(jù)卷也被打了標(biāo)簽,標(biāo)明了它被創(chuàng)建的地區(qū)和zone。在K8S 1.2版本里,動態(tài)的持久數(shù)據(jù)卷總是被建在集群master同區(qū)(在現(xiàn)在這個例子里,是在us-centaral1-a / us-west-2a);這在完整版中會提高。
所以,現(xiàn)在我們要來創(chuàng)建一個pod,來使用持久數(shù)據(jù)卷。因?yàn)镚CE PDS/AWS EBS數(shù)據(jù)卷都不能跨區(qū),這意味著pod只能被創(chuàng)建在和數(shù)據(jù)卷同區(qū)內(nèi)。
5 Pods跨區(qū)的分布
在冗余控制器(RC)里的pod或者服務(wù)會被自動地跨區(qū)分布。首先,讓我們在第三個區(qū)內(nèi)再生成一些節(jié)點(diǎn)
GCE:
KUBE_USE_EXISTING_MASTER=true MULTIZONE=1 KUBERNETES_PROVIDER=gce KUBE_GCE_ZONE=us-central1-f NUM_NODES=3 kubernetes/cluster/kube-up.sh
AWS:
KUBE_USE_EXISTING_MASTER=true MULTIZONE=1 KUBERNETES_PROVIDER=aws KUBE_AWS_ZONE=us-west-2c NUM_NODES=3 KUBE_SUBNET_CIDR=172.20.2.0/24 MASTER_INTERNAL_IP=172.20.0.9 kubernetes/cluster/kube-up.sh
檢查一下你在三個區(qū)里有節(jié)點(diǎn):
kubectl get nodes --show-labels
建立一個K8S教程里guestbook-go例子,包含一個RC,數(shù)量寫3,跑一個簡單的web應(yīng)用:
find kubernetes/examples/guestbook-go/ -name "*.json" | xargs -I {} kubectl create -f {}
pods應(yīng)該跨三個區(qū)分布:
負(fù)載均衡器在一個集群之內(nèi)跨區(qū),在K8S標(biāo)準(zhǔn)教程guestbook-go里有這個負(fù)載均衡器服務(wù)的例子:
負(fù)載均衡器目前指向所有的pods,盡管它們在不同的區(qū)里。
6 關(guān)閉集群
結(jié)束之后,清理一下
GCE:
KUBERNETES_PROVIDER=gce KUBE_USE_EXISTING_MASTER=true KUBE_GCE_ZONE=us-central1-f kubernetes/cluster/kube-down.shKUBERNETES_PROVIDER=gce KUBE_USE_EXISTING_MASTER=true KUBE_GCE_ZONE=us-central1-b kubernetes/cluster/kube-down.shKUBERNETES_PROVIDER=gce KUBE_GCE_ZONE=us-central1-a kubernetes/cluster/kube-down.sh
AWS:
KUBERNETES_PROVIDER=aws KUBE_USE_EXISTING_MASTER=true KUBE_AWS_ZONE=us-west-2c kubernetes/cluster/kube-down.shKUBERNETES_PROVIDER=aws KUBE_USE_EXISTING_MASTER=true KUBE_AWS_ZONE=us-west-2b kubernetes/cluster/kube-down.shKUBERNETES_PROVIDER=aws KUBE_AWS_ZONE=us-west-2a kubernetes/cluster/kube-down.sh
原文鏈接點(diǎn)這里
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/32447.html
摘要:到現(xiàn)在為止,部署有狀態(tài)應(yīng)用比如分布式數(shù)據(jù)庫已經(jīng)是一個棘手的問題,但是其實(shí)也不是做不到。我們也會展示如何在本地更加輕松地部署分布式數(shù)據(jù)庫在我們與客戶目前正在積極處理的區(qū)域內(nèi)。 伴隨著5000多次的提交,以及大約350位貢獻(xiàn)者在社區(qū)以及該行業(yè)的貢獻(xiàn),Kubernetes現(xiàn)在已經(jīng)到1.3版本了,已于上周發(fā)布!網(wǎng)址:點(diǎn)這里。 Kubernetes的首次發(fā)布要追溯到兩年前。這個項(xiàng)目的社區(qū)參與度和...
摘要:創(chuàng)建你的谷歌云項(xiàng)目如果你還沒有谷歌賬號,那么在你繼續(xù)步驟之前先創(chuàng)建一個。一個集群包括了由谷歌和一套節(jié)點(diǎn)主導(dǎo)的服務(wù)器。點(diǎn)擊查看完美結(jié)語我們今天帶大家一起來看了一下谷歌云平臺,開啟計費(fèi)功能,打開相關(guān),然后在上面創(chuàng)建一個集群。 你可能已經(jīng)了解過Kubernetes和Google云平臺,但是可能還并沒有真正創(chuàng)建過一個集群。在這里,我們會帶領(lǐng)大家梳理一些基礎(chǔ)知識,跟著這個教程一步步來,你就會自己...
摘要:我們希望能夠讓應(yīng)用的開發(fā)者在里充分使用這樣的模式。盡管允許類似于驗(yàn)證信息和秘鑰這些信息從應(yīng)用當(dāng)中分離,但在過去并沒有為了普通的或者非配置而存在的對象。從數(shù)據(jù)角度來看,的類型只是鍵值組。 容器的配置管理——把應(yīng)用的代碼和配置區(qū)分開,是一個好的操作。我們希望能夠讓應(yīng)用的開發(fā)者在Kubernetes里充分使用這樣的模式。盡管Secrets API允許類似于驗(yàn)證信息和秘鑰這些信息從應(yīng)用當(dāng)中分離...
摘要:的工作就是為作出的修改查看我們的配置文件,并且運(yùn)行讀取配置文件的新版本回調(diào)函數(shù),使用設(shè)置新的。它的目標(biāo)是使任意額外的成為一個單獨(dú)更新的,這樣我們只要執(zhí)行一次回調(diào)函數(shù)。 Kubernetes 1.2版本添加了一個叫ConfigMap的新功能。這個功能提供給容器注入應(yīng)用程序數(shù)據(jù)的方式。注入配置文件對于大部分應(yīng)用程序來說很強(qiáng)大,但是新的ConfigMap功能不僅可以在容器開啟時提供初始配置功...
摘要:使用很多應(yīng)用程序的配置需要通過配置文件,命令行參數(shù)和環(huán)境變量的組合配置來完成。舉個例子,思考以下的我們可以像這樣在一個中來使用這個的鍵當(dāng)這個運(yùn)行的時候,它的輸出將包括以下幾行使用案例用設(shè)置命令行參數(shù)也可以被使用來設(shè)置容器中的命令或者參數(shù)值。 使用ConfigMap 很多應(yīng)用程序的配置需要通過配置文件,命令行參數(shù)和環(huán)境變量的組合配置來完成。這些配置應(yīng)該從image內(nèi)容中解耦,以此來保持容...
閱讀 2950·2021-11-23 09:51
閱讀 3776·2021-11-22 15:29
閱讀 3226·2021-10-08 10:05
閱讀 1552·2021-09-22 15:20
閱讀 952·2019-08-30 15:56
閱讀 1069·2019-08-30 15:54
閱讀 732·2019-08-26 11:54
閱讀 2635·2019-08-26 11:32