真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么實(shí)現(xiàn)Kubernetes跨集群服務(wù)應(yīng)用的高可用-創(chuàng)新互聯(lián)

本篇文章給大家分享的是有關(guān)怎么實(shí)現(xiàn)Kubernetes跨集群服務(wù)應(yīng)用的高可用,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)建站長期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為尼木企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計,尼木網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

在Kubernetes 1.3版本,我們希望降低跨集群跨地區(qū)服務(wù)部署相關(guān)的管理和運(yùn)營難度。

注意:雖然本文示例使用谷歌容器引擎(GKE)來提供Kubernetes集群,您可以在任何的其他環(huán)境部署Kubernetes。

我們正式開始。第一步是在谷歌的四個云平臺地區(qū)通過GKE創(chuàng)建Kubernetes集群。

asia-east1-b
europe-west1-b
us-east1-b
us-central1-b

我們通過下面的創(chuàng)建集群:

gcloud container clusters create gce-asia-east1 \
--scopes cloud-platform \
--zone asia-east1-b
gcloud container clusters create gce-europe-west1 \
--scopes cloud-platform \
--zone=europe-west1-b
gcloud container clusters create gce-us-east1 \
--scopes cloud-platform \
--zone=us-east1-b
gcloud container clusters create gce-us-central1 \
--scopes cloud-platform \
--zone=us-central1-b

驗(yàn)證創(chuàng)建的集群

gcloud container clusters list 
NAME              ZONE            MASTER_VERSION  MASTER_IP       NUM_NODES  STATUS 
gce-asia-east1    asia-east1-b    1.2.4           104.XXX.XXX.XXX 3          RUNNING
gce-europe-west1  europe-west1-b  1.2.4           130.XXX.XX.XX   3    RUNNING
gce-us-central1   us-central1-b   1.2.4          104.XXX.XXX.XX  3          RUNNING 
gce-us-east1      us-east1-b      1.2.4           104.XXX.XX.XXX  3          RUNNING

怎么實(shí)現(xiàn)Kubernetes跨集群服務(wù)應(yīng)用的高可用

下一步是起動集群并在創(chuàng)建的其中一個集群中部署聯(lián)邦控制模塊(Control Plane)。您可以參考和依照Kelsey Hightower的示例進(jìn)行這步配置。

聯(lián)邦服務(wù)

從聯(lián)邦A(yù)PI獲取信息,因此您可以通過聯(lián)邦A(yù)PI制定服務(wù)屬性。

當(dāng)服務(wù)創(chuàng)建后,聯(lián)邦服務(wù)自動進(jìn)行如下操作:

在聯(lián)邦中注冊的所有Kubernetes集群中創(chuàng)建服務(wù);

監(jiān)控服務(wù)碎片(以及它們所在集群)的健康狀況;

在公NS提供商上面創(chuàng)建 DNS記錄(如谷歌Cloud DNS,或者AWS Route 53),以此確定你的服務(wù)客戶端能夠在任何時候無縫的獲得相關(guān)的健康服務(wù)終端,即使當(dāng)集群,可用區(qū)或者地區(qū)出現(xiàn)服務(wù)中斷的情況時。

在注冊到聯(lián)邦的Kubernetes集群中的服務(wù)客戶端,當(dāng)聯(lián)邦服務(wù)在本地集群碎片工作正常時,會優(yōu)先使用本地服務(wù)碎片,否則會在最近的其他集群中選取健康的服務(wù)碎片。

Kubernetes集群聯(lián)邦能夠聯(lián)合不同的云供應(yīng)商(比如GCP、AWS)以及私有云(如OpenStack)。您只需在相應(yīng)的云供應(yīng)商和位置創(chuàng)建您的集群,并且將每個集群的API Server地址和證書信息注冊到聯(lián)邦集群中。

在我們的示例中,我們在四個區(qū)域創(chuàng)建了集群,并且在其中的一個集群中部署了聯(lián)邦控制模塊,我們會用這個環(huán)境來部署我們的服務(wù)。具體請參考下圖。
怎么實(shí)現(xiàn)Kubernetes跨集群服務(wù)應(yīng)用的高可用

創(chuàng)建聯(lián)邦服務(wù)

我們先查看聯(lián)邦中所有注冊好的集群:

kubectl --context=federation-cluster get clusters
NAME               STATUS    VERSION   AGE
gce-asia-east1     Ready               1m
gce-europe-west1   Ready               57s
gce-us-central1    Ready               47s
gce-us-east1       Ready               34s

創(chuàng)建聯(lián)邦服務(wù):

kubectl --context=federation-cluster create -f services/nginx.yaml
--context=federation-cluster參數(shù)通知kubectl把帶相關(guān)證書信息的請求提交至聯(lián)邦A(yù)PI服務(wù)器。聯(lián)邦服務(wù)會自動在聯(lián)邦中所有集群創(chuàng)建相應(yīng)的Kubernetes服務(wù)。

你可以通過檢查每一個集群中的服務(wù)進(jìn)行驗(yàn)證,比如:

kubectl --context=gce-asia-east1a get svc nginx
NAME      CLUSTER-IP     EXTERNAL-IP      PORT(S)   AGE
nginx     10.63.250.98   104.199.136.89   80/TCP    9m

上面的 命令 假設(shè)你有一個名為gce-asia-east1a的kubectl的上下文設(shè)置,并且你有集群部署在這個區(qū)(zone)。Kubernetes服務(wù)的名字和名空間自動與你上面創(chuàng)建的集群服務(wù)一致。

聯(lián)邦服務(wù)狀態(tài)會實(shí)時體現(xiàn)Kubernetes對應(yīng)的服務(wù)狀態(tài),例如:

kubectl --context=federation-cluster describe services nginx
Name:                   nginx
Namespace:              default
Labels:                 run=nginx
Selector:               run=nginx
Type:                   LoadBalancer
IP:         
LoadBalancer Ingress:   104.XXX.XX.XXX, 104.XXX.XX.XXX, 104.XXX.XX.XXX, 104.XXX.XXX.XX
Port:                   http    80/TCP
Endpoints:              
Session Affinity:       None
No events.

聯(lián)邦服務(wù)的LoadBalancer Ingress地址會匯總所有注冊的Kubernetes集群服務(wù)的LoadBalancer Ingress地址。為了讓同一聯(lián)邦服務(wù)在不通集群之間以及不同云供應(yīng)商之間的網(wǎng)絡(luò)正確工作,你的服務(wù)需要有外部可見的IP地址,比如Loadbalancer是常見的服務(wù)類型。

請注意我們還沒有部署任何后臺Pod來接收指向這些地址的網(wǎng)絡(luò)流量(比如服務(wù)終端),所以此時聯(lián)邦服務(wù)還不會認(rèn)為這些服務(wù)碎片是健康的,所以聯(lián)邦服務(wù)對應(yīng)的DNS記錄也尚未創(chuàng)建。

增加后臺Pod

為了渲染底層服務(wù)碎片的健康狀況,我們需要為服務(wù)增加后臺Pod。目前需要通過直接操作底層集群的API Server來完成(為節(jié)省您的時間,未來我們可以通過一條命令在聯(lián)邦服務(wù)器中創(chuàng)建)。例如我們在底層集群中創(chuàng)建后臺Pod:

for CLUSTER in asia-east1-a europe-west1-a us-east1-a us-central1-a
do
kubectl --context=$CLUSTER run nginx --image=nginx:1.11.1-alpine --port=80
done

驗(yàn)證公NS記錄

一旦Pod開始成功啟動并開始監(jiān)聽連接,每個集群(通過健康檢查)會匯報服務(wù)的健康終端至集群聯(lián)邦。集群聯(lián)邦會依次認(rèn)為這些服務(wù)碎片是健康的,并且創(chuàng)建相應(yīng)的公NS記錄。你可以使用你喜歡的DNS供應(yīng)商的接口來驗(yàn)證。比如,如果你使用谷歌Cloud DNS配置聯(lián)邦, 你的DNS域?yàn)?‘example.com’:

$ gcloud dns managed-zones describe example-dot-com 
creationTime: '2016-06-26T18:18:39.229Z'
description: Example domain for Kubernetes Cluster Federation
dnsName: example.com.
id: '3229332181334243121'
kind: dns#managedZone
name: example-dot-com
nameServers:
- ns-cloud-a1.googledomains.com.
- ns-cloud-a2.googledomains.com.
- ns-cloud-a3.googledomains.com.
- ns-cloud-a4.googledomains.com.
$ gcloud dns record-sets list --zone example-dot-com
NAME                                                                                                 TYPE      TTL     DATA
example.com.                                                                                       NS     21600  ns-cloud-e1.googledomains.com., ns-cloud-e2.googledomains.com.
example.com.                                                                                      SOA     21600 ns-cloud-e1.googledomains.com. cloud-dns-hostmaster.google.com. 1 21600 3600 1209600 300
nginx.mynamespace.myfederation.svc.example.com.                            A     180     104.XXX.XXX.XXX, 130.XXX.XX.XXX, 104.XXX.XX.XXX, 104.XXX.XXX.XX
nginx.mynamespace.myfederation.svc.us-central1-a.example.com.     A     180     104.XXX.XXX.XXX
nginx.mynamespace.myfederation.svc.us-central1.example.com.
nginx.mynamespace.myfederation.svc.us-central1.example.com.         A    180     104.XXX.XXX.XXX, 104.XXX.XXX.XXX, 104.XXX.XXX.XXX
nginx.mynamespace.myfederation.svc.asia-east1-a.example.com.       A    180     130.XXX.XX.XXX
nginx.mynamespace.myfederation.svc.asia-east1.example.com.
nginx.mynamespace.myfederation.svc.asia-east1.example.com.           A    180     130.XXX.XX.XXX, 130.XXX.XX.XXX
nginx.mynamespace.myfederation.svc.europe-west1.example.com.  CNAME    180   nginx.mynamespace.myfederation.svc.example.com.
... etc.

注意:如果您使用AWS Route53來配置聯(lián)邦,你可以使用相應(yīng)的AWS工具,例如:

$aws route53 list-hosted-zones
$aws route53 list-resource-record-sets --hosted-zone-id Z3ECL0L9QLOVBX

不管您使用什么DNS供應(yīng)商, 您可以使用DNS查詢工具(例如 ‘dig’ 或者 ‘nslookup’)來查看聯(lián)邦為您創(chuàng)建的DNS記錄。

從聯(lián)邦集群內(nèi)部的pod發(fā)現(xiàn)聯(lián)邦服務(wù)

默認(rèn)情況下,Kubernetes集群有內(nèi)置的本地域名服務(wù)器(KubeDNS),并且有智能的DNS搜索路徑確保針對“myservice”、“myservice.mynamespace”、”bobsservice.othernamespace”等等被您運(yùn)行在Pod中的的應(yīng)用軟件自動擴(kuò)展和解析至相應(yīng)的本地集群中的服務(wù)IP。

通過引入聯(lián)邦服務(wù)以及跨集群服務(wù)發(fā)現(xiàn),這個概念被擴(kuò)展至全局,覆蓋您聯(lián)邦中所有的集群。為了利用這個擴(kuò)展帶來的便利性,您只需使用稍微不同的服務(wù)名(比如,myservice.mynamespace.myfederation)進(jìn)行解析。

使用不同的DNS名同時避免了您現(xiàn)有的服務(wù)在您沒有做明確的配置和選擇情況下,意外的被解析到不同區(qū)(zone)或地域(region)網(wǎng)絡(luò),導(dǎo)致額外的網(wǎng)絡(luò)費(fèi)用或延遲。

因此,使用我們上面的NGINX 服務(wù),以及剛剛介紹的聯(lián)邦服務(wù)DNS名,我們構(gòu)想一個示例:在可用性區(qū)域us-central1-a的集群中的pod需要訪問我們的NGINX服務(wù)。與其使用傳統(tǒng)的本地集群DNS名 (“nginx.mynamespace”,自動擴(kuò)展為“nginx.mynamespace.svc.cluster.local”),現(xiàn)在可以使用聯(lián)邦服務(wù)名“nginx.mynamespace.myfederation”。此名稱會被自動擴(kuò)展和解析至我的Nginx服務(wù)最近的健康節(jié)點(diǎn),無論它在世界的哪里。如果本地集群存在健康服務(wù)碎片,那么本地集群IP地址(通常是10.x.y.z)會被返回(被集群本地KubeDNS)。這與非聯(lián)邦服務(wù)解析完全一致。

如果服務(wù)在本地集群不存在(或者服務(wù)存在但本地沒有健康的后臺pod),DNS查詢會自動擴(kuò)充至`”nginx.mynamespace.myfederation.svc.us-central1-a.example.com”。實(shí)際的行為是查找離當(dāng)前可用性區(qū)域最近的服務(wù)碎片的外部IP。該擴(kuò)展被KubeDNS自動觸發(fā)執(zhí)行,返回相關(guān)的CNAME記錄。這會遍歷上面示例中的DNS記錄,直到找到本地us-central1 區(qū)域聯(lián)邦服務(wù)的外部IP。

通過明確指定DNS名,直接指向非本地可用區(qū)域(AZ)和地域(region)的服務(wù)碎片,而不依賴于自動DNS擴(kuò)展,是可行的。例如,
“nginx.mynamespace.myfederation.svc.europe-west1.example.com” 會被解析至位于歐洲的所有健康服務(wù)碎片,即使通過nslookup解析出的服務(wù)位于美國,并無論在美國是否有該服務(wù)的健康碎片。這對遠(yuǎn)程監(jiān)控和其它類似應(yīng)用很有用。

從聯(lián)邦集群外部發(fā)現(xiàn)聯(lián)邦服務(wù)

對于外部客戶端,前文描述的DNS自動擴(kuò)展已不適用。外部客戶端需要指定聯(lián)邦服務(wù)的全名(FQDN),可以是區(qū)域,地域或全局名。為方便起見,最好為您的服務(wù)手工創(chuàng)建CNAME記錄,比如:

eu.nginx.acme.com        CNAME nginx.mynamespace.myfederation.svc.europe-west1.example.com.
us.nginx.acme.com        CNAME nginx.mynamespace.myfederation.svc.us-central1.example.com.
nginx.acme.com             CNAME nginx.mynamespace.myfederation.svc.example.com.

這樣您的客戶端可以一直使用左側(cè)的短名形式,并且會被自動解析到它所在大陸的最近的健康節(jié)點(diǎn)上。集群聯(lián)邦會幫您處理服務(wù)的failover。

處理后臺Pod和整個集群的失敗情況

標(biāo)準(zhǔn)Kubernetes服務(wù)集群IP已經(jīng)確保無響應(yīng)的Pod會被及時從服務(wù)中移除。Kubernetes聯(lián)邦集群系統(tǒng)自動監(jiān)控集群以及聯(lián)邦服務(wù)所有碎片對應(yīng)的終端的健康狀況,并按需增加和刪除服務(wù)碎片。

因?yàn)镈NS緩存造成的延遲(緩存超時,或者聯(lián)邦服務(wù)DNS記錄TTL默認(rèn)設(shè)置為三分鐘,但可以調(diào)節(jié)) 可能需要這么長時間才能在某集群或服務(wù)碎片出現(xiàn)問題時,正確將客戶端,請求failover到可用集群上。然而,因?yàn)槊總€服務(wù)終端可以返回多個ip地址,(如上面的us-central1,有三個選擇)很多客戶端會返回其中一個可選地址。

以上就是怎么實(shí)現(xiàn)Kubernetes跨集群服務(wù)應(yīng)用的高可用,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。


網(wǎng)站欄目:怎么實(shí)現(xiàn)Kubernetes跨集群服務(wù)應(yīng)用的高可用-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://weahome.cn/article/cshhgj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部