阿里云上Kubernetes集群联邦
摘要: kubernetes集群讓您能夠方便的部署管理運(yùn)維容器化的應(yīng)用。但是實(shí)際情況中經(jīng)常遇到的一些問(wèn)題,就是單個(gè)集群通常無(wú)法跨單個(gè)云廠商的多個(gè)Region,更不用說(shuō)支持跨跨域不同的云廠商。這樣會(huì)給企業(yè)帶來(lái)一些擔(dān)憂(yōu),如何應(yīng)對(duì)可用區(qū)級(jí)別的Fail,以及容災(zāi)備份?是否會(huì)造成廠商鎖定,增加遷移成本?如何應(yīng)對(duì)線上線下突發(fā)流量?如何統(tǒng)一管理調(diào)度容器資源?單個(gè)集群規(guī)模的上限等等。
點(diǎn)此查看原文:http://click.aliyun.com/m/43608/
kubernetes集群讓您能夠方便的部署管理運(yùn)維容器化的應(yīng)用。但是實(shí)際情況中經(jīng)常遇到的一些問(wèn)題,就是單個(gè)集群通常無(wú)法跨單個(gè)云廠商的多個(gè)Region,更不用說(shuō)支持跨跨域不同的云廠商。這樣會(huì)給企業(yè)帶來(lái)一些擔(dān)憂(yōu),如何應(yīng)對(duì)可用區(qū)級(jí)別的Fail,以及容災(zāi)備份?是否會(huì)造成廠商鎖定,增加遷移成本?如何應(yīng)對(duì)線上線下突發(fā)流量?如何統(tǒng)一管理調(diào)度容器資源?單個(gè)集群規(guī)模的上限等等。
Federation集群聯(lián)邦可以一定程度上解決這些問(wèn)題。Federation是可以將分布在多個(gè)Region或者多個(gè)云廠商的Kubernetes集群整合成一個(gè)大的集群,統(tǒng)一管理與調(diào)度。
本文檔演示搭建一個(gè)杭州和北京的kubernetes集群組成集群聯(lián)邦,其中杭州集群作為聯(lián)邦的控制平面
準(zhǔn)備域名
Federation使用域名將不同子集群的同一個(gè)服務(wù)暴露出來(lái),因此需要用戶(hù)提供一個(gè)可配置的域名。您可以通過(guò)萬(wàn)網(wǎng)在阿里云上購(gòu)買(mǎi)域名然后配置到您的Federation集群上。
以域名spacexnice.xyz為例,請(qǐng)按照購(gòu)買(mǎi)域名文檔購(gòu)買(mǎi)好域名。
配置域名
由于Federation在添加域名解析記錄的時(shí)候設(shè)置域名的TTL為3分鐘,域名層級(jí)為5級(jí),因此需要到阿里云上對(duì)您剛購(gòu)買(mǎi)的域名進(jìn)行設(shè)置,使得該域名允許的最小TTL值小于3分鐘,同時(shí)域名層級(jí)大于5.
進(jìn)入云解析控制臺(tái)選擇您剛剛購(gòu)買(mǎi)的域名,更多里面選[升級(jí)]或者[升級(jí)VIP]
在彈出的頁(yè)面中更改最低TTL值為60s,子域名級(jí)別為7級(jí),然后保存。
創(chuàng)建多個(gè)子集群
本示例創(chuàng)建的Federation集群包含兩個(gè)子集群,分別在杭州和北京region。我們首先需要在這兩個(gè)Region創(chuàng)建出兩個(gè)可用的集群,集群創(chuàng)建步驟參考文檔
杭州集群
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl get no NAME STATUS ROLES AGE VERSION cn-hangzhou.i-bp11ajet2v9o3tp0o2uw Ready master 3d v1.8.4 cn-hangzhou.i-bp15pt2475mgw64k72ma Ready master 3d v1.8.4 cn-hangzhou.i-bp18fggko6p3vyr0p0ew Ready <none> 3d v1.8.4 cn-hangzhou.i-bp18fggko6p3vyr0p0ex Ready <none> 3d v1.8.4 cn-hangzhou.i-bp1bpj58bdzdosdxxf82 Ready master 3d v1.8.4北京集群
[root@iZze7z98ssc50pfzt6be9 ~]# kubectl get no NAME STATUS ROLES AGE VERSION cn-beijing.i-2ze7z98ssc50pfzt6be9 Ready master 3d v1.8.4 cn-beijing.i-2ze8hr6k03ccroopicd2 Ready master 3d v1.8.4 cn-beijing.i-2zeipodwz2junslmihqz Ready master 3d v1.8.4 cn-beijing.i-2zeipodwz2junyipunrf Ready <none> 3d v1.8.4部署federation控制平面
選擇杭州的子集群作為Federation的宿主集群,安裝Federation的控制平面。并配置好本地的kubeconfig。通過(guò)運(yùn)行kubefed init命令來(lái)初始化主集群。具體步驟如下:
安裝kubefed
在hangzhou集群的master節(jié)點(diǎn)安裝kubefed
[root@iZze7z98ssc50pfzt6be9 ~]# curl -L http://aliacs-k8s-cn-hangzhou.oss.aliyuncs.com/bin/kubefed-1.8.4 -o kubefed [root@iZze7z98ssc50pfzt6be9 ~]# sudo cp kubefed /usr/bin [root@iZze7z98ssc50pfzt6be9 ~]# sudo chmod +x /usr/bin/kubefed [root@iZze7z98ssc50pfzt6be9 ~]# kubefed version配置kubeconfig
在杭州集群master節(jié)點(diǎn)中配置hangzhou,beijing兩個(gè)集群的context,讓改節(jié)點(diǎn)能通過(guò)切換context連接不同的子集群。要修改的內(nèi)容如下:
1.修改hangzhou集群的kubeconfig的cluster,user,context的名字為hangzhou
2.拷貝beijing集群kubeconfig中的cluster,user,context內(nèi)容到a)步驟中kubeconfig,并修改相應(yīng)的cluster,user,context名字為beijing
為了方便初學(xué)者,我們提供了一個(gè)自動(dòng)化的腳本,可以自動(dòng)通過(guò)ssh從您指定的集群中下載kubeconfig配置文件,并合并成一個(gè)整體。
通過(guò)執(zhí)行腳本來(lái)自動(dòng)生成~/.kube/config文件。腳本需要指明從哪些集群上下載kubeconfig文件并合并,格式如下python context.py -H hangzhou:1.1.1.1,beijing:2.2.2.2 注意參數(shù)替換成你自己的集群Region和IP,腳本可能會(huì)要求您輸入ssh的登錄密碼。
配置結(jié)果如下:
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACEhangzhou kubernetes-hangzhou kubernetes-admin-hangzhou * beijing kubernetes-beijing kubernetes-admin-beijing配置alidns.yaml文件
zones填寫(xiě)您前面申請(qǐng)的域名,注意以點(diǎn)號(hào)結(jié)尾。并且替換您的accesskeyid和accesskeysecret.
cat >alidns.yaml <<EOF [Global] access-key-id = <Your-key-id> access-key-secret = <Your-key-secret> zones = spacexnice.xyz. EOF初始化控制federation平面
通過(guò)本條命令初始化federation控制平面,參數(shù)如下:
kubefed init federation \ # 聯(lián)邦的名字--host-cluster-context=hangzhou \ # 主集群的context名字--dns-provider="alidns" \ # DNS服務(wù)提供商--dns-zone-name="spacexnice.xyz." \ # 前面注冊(cè)好的域名,必須以.結(jié)束--dns-provider-config="alidns.yaml" \ # alidns配置文件--image="registry.cn-hangzhou.aliyuncs.com/google-containers/hyperkube-amd64:v1.8.4-4_99c084ce" \ # hyperkube鏡像--etcd-image='registry.cn-hangzhou.aliyuncs.com/google-containers/etcd-amd64:3.1.11' \ #etcd 鏡像--etcd-persistent-storage=false # 關(guān)閉etcd持久存儲(chǔ) [root@iZbp1bpj58bdzdosdxxf82Z ~]# kubefed init federation \--host-cluster-context=hangzhou \--dns-provider="alidns" \--dns-zone-name="spacexnice.xyz." \--dns-provider-config="alidns.yaml" \--image="registry.cn-hangzhou.aliyuncs.com/google-containers/hyperkube-amd64:v1.8.4-4_99c084ce" \--etcd-image='registry.cn-hangzhou.aliyuncs.com/google-containers/etcd-amd64:3.1.11' \--etcd-persistent-storage=falseCreating a namespace federation-system for federation system components... done Creating federation control plane service..... done Creating federation control plane objects (credentials, persistent volume claim)... done Creating federation component deployments... done Updating kubeconfig... done Waiting for federation control plane to come up..................................................................................................................................................... done Federation API server is running at: 120.55.196.1添加集群至federation
目前為止您已經(jīng)成功的初始化好了Federation的控制平面。接下來(lái)需要將各個(gè)子集群加入到Federation集群中。
添加hangzhou集群
命令行參數(shù)解析kubefed join hangzhou \ #加入聯(lián)邦的集群命名名字--context=federation \ #聯(lián)邦的context--cluster-context=hangzhou \ #要添加集群的context--host-cluster-context=hangzhou #主集群的context [root@iZbp1bpj58bdzdosdxxf82Z ~]# kubefed join hangzhou \--context=federation \--cluster-context=hangzhou \--host-cluster-context=hangzhou[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl get cluster --context=federation NAME STATUS AGE hangzhou Ready 28s添加beijing集群
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubefed join beijing \--context=federation \--cluster-context=beijing \--host-cluster-context=hangzhou[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl get cluster --context=federation NAME STATUS AGE hangzhou Ready 4m beijing Ready 59s后面介紹下集群查詢(xún),移除集群,刪除聯(lián)邦等命令
集群查詢(xún)
查詢(xún)注冊(cè)到Federation的kubernetes集群列表
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl get cluster --context=federation NAME STATUS AGE hangzhou Ready 4m beijing Ready 59s移除集群
移除beijing集群
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubefed unjoin beijing --host-cluster-context=hangzhou --context=federation[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl get clusters --context=federation NAME STATUS AGE hangzhou Ready 1d刪除集群聯(lián)邦
集群聯(lián)邦控制平面的刪除功能還在開(kāi)發(fā)中,目前可以通過(guò)刪除namespace federation-system的方法來(lái)清理(注意pv不會(huì)刪除)。命令在host-cluster-context上執(zhí)行。
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl delete ns federation-system創(chuàng)建服務(wù)
集群聯(lián)邦支持以下聯(lián)邦資源,這些資源會(huì)自動(dòng)在所有注冊(cè)的kubernetes集群中創(chuàng)建.
Federated ConfigMap
Federated Service
Federated DaemonSet
Federated Deployment
Federated Ingress
Federated Namespaces
Federated ReplicaSets
Federated Secrets
Federated Events(僅存在federation控制平面)
創(chuàng)建service
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl run nginx --image nginx --context=federation [root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl expose deploy nginx --port 80 --target-port 80 --type LoadBalancer --context=federation [root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl get svc --context=federation您還可以通過(guò)kubectl scale deploy nginx --replicas=3 --context=federation來(lái)擴(kuò)展nginx副本,然后觀察nginx應(yīng)用在各個(gè)子集群中的分布情況。
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl get deploy --context=beijing [root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl get deploy --context=hangzhou創(chuàng)建deployment
[root@iZbp1bpj58bdzdosdxxf82Z ~]# cat deployment-nginx.yaml apiVersion: extensions/v1beta1 kind: Deployment metadata:name: nginx-deployment spec:replicas: 3template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.7.9ports:- containerPort: 80 [root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl create -f deployment-nginx.yaml --context=federation查看federation service
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl describe svc nginx --context=federation Name: nginx Namespace: default Labels: app=nginx Annotations: federation.kubernetes.io/service-ingresses={"items":[{"cluster":"hangzhou","items":[{"ip":"120.55.149.69"}]},{"cluster":"shanghai","items":[{"ip":"139.196.70.146"}]}]} Selector: app=nginx Type: LoadBalancer IP: LoadBalancer Ingress: 120.55.149.69, 139.196.70.146 Port: http 80/TCP Endpoints: <none> Session Affinity: None Events: <none>通過(guò)域名訪問(wèn)服務(wù):
[root@iZbp1bpj58bdzdosdxxf82Z ~]# curl nginx.default.fed.svc.spacexnice.xyz <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;} </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p><p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p> </body> </html>查看云解析dns的record記錄
我們可以在阿里云云解析控制臺(tái)看見(jiàn)剛剛添加的nginx的dns記錄。
總結(jié)
Federation為您提供一種多集群管理的途徑,統(tǒng)一管理多云(multi-cloud)資源,并提供了一種災(zāi)備的新途徑。阿里云Kubernetes服務(wù)也將進(jìn)一步簡(jiǎn)化Federation的用戶(hù)體驗(yàn),將容器服務(wù)Kubernetes集群管理與Federation完美結(jié)合在一起。也歡迎您的意見(jiàn)和建議,幫助我們迭代產(chǎn)品能力。
阿里云Kubernetes服務(wù) 全球首批通過(guò)Kubernetes一致性認(rèn)證,簡(jiǎn)化了Kubernetes集群生命周期管理,內(nèi)置了與阿里云產(chǎn)品集成,也將進(jìn)一步簡(jiǎn)化Kubernetes的開(kāi)發(fā)者體驗(yàn),幫助用戶(hù)關(guān)注云端應(yīng)用價(jià)值創(chuàng)新。
總結(jié)
以上是生活随笔為你收集整理的阿里云上Kubernetes集群联邦的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python数据库操作框架_python
- 下一篇: java接口测试工具_这 5 款实用性能