摘要:阿里云服務也將進一步簡化的用戶體驗,將容器服務集群管理與完美結合在一起。阿里云服務全球首批通過一致性認證,簡化了集群生命周期管理,內置了與阿里云產品集成,也將進一步簡化的開發者體驗,幫助用戶關注云端應用價值創新。
摘要: kubernetes集群讓您能夠方便的部署管理運維容器化的應用。但是實際情況中經常遇到的一些問題,就是單個集群通常無法跨單個云廠商的多個Region,更不用說支持跨跨域不同的云廠商。這樣會給企業帶來一些擔憂,如何應對可用區級別的Fail,以及容災備份?是否會造成廠商鎖定,增加遷移成本?如何應對線上線下突發流量?如何統一管理調度容器資源?單個集群規模的上限等等。
點此查看原文:http://click.aliyun.com/m/43608/
kubernetes集群讓您能夠方便的部署管理運維容器化的應用。但是實際情況中經常遇到的一些問題,就是單個集群通常無法跨單個云廠商的多個Region,更不用說支持跨跨域不同的云廠商。這樣會給企業帶來一些擔憂,如何應對可用區級別的Fail,以及容災備份?是否會造成廠商鎖定,增加遷移成本?如何應對線上線下突發流量?如何統一管理調度容器資源?單個集群規模的上限等等。
Federation集群聯邦可以一定程度上解決這些問題。Federation是可以將分布在多個Region或者多個云廠商的Kubernetes集群整合成一個大的集群,統一管理與調度。
本文檔演示搭建一個杭州和北京的kubernetes集群組成集群聯邦,其中杭州集群作為聯邦的控制平面
準備域名
Federation使用域名將不同子集群的同一個服務暴露出來,因此需要用戶提供一個可配置的域名。您可以通過萬網在阿里云上購買域名然后配置到您的Federation集群上。
以域名spacexnice.xyz為例,請按照購買域名文檔購買好域名。
配置域名
由于Federation在添加域名解析記錄的時候設置域名的TTL為3分鐘,域名層級為5級,因此需要到阿里云上對您剛購買的域名進行設置,使得該域名允許的最小TTL值小于3分鐘,同時域名層級大于5.
進入云解析控制臺選擇您剛剛購買的域名,更多里面選[升級]或者[升級VIP]
在彈出的頁面中更改最低TTL值為60s,子域名級別為7級,然后保存。
創建多個子集群
本示例創建的Federation集群包含兩個子集群,分別在杭州和北京region。我們首先需要在這兩個Region創建出兩個可用的集群,集群創建步驟參考文檔
杭州集群
[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 Ready3d v1.8.4 cn-hangzhou.i-bp18fggko6p3vyr0p0ex Ready 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 Ready3d v1.8.4
部署federation控制平面
選擇杭州的子集群作為Federation的宿主集群,安裝Federation的控制平面。并配置好本地的kubeconfig。通過運行kubefed init命令來初始化主集群。具體步驟如下:
安裝kubefed
在hangzhou集群的master節點安裝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節點中配置hangzhou,beijing兩個集群的context,讓改節點能通過切換context連接不同的子集群。要修改的內容如下:
1.修改hangzhou集群的kubeconfig的cluster,user,context的名字為hangzhou
2.拷貝beijing集群kubeconfig中的cluster,user,context內容到a)步驟中kubeconfig,并修改相應的cluster,user,context名字為beijing
為了方便初學者,我們提供了一個自動化的腳本,可以自動通過ssh從您指定的集群中下載kubeconfig配置文件,并合并成一個整體。
通過執行腳本來自動生成~/.kube/config文件。腳本需要指明從哪些集群上下載kubeconfig文件并合并,格式如下python context.py -H hangzhou:1.1.1.1,beijing:2.2.2.2 注意參數替換成你自己的集群Region和IP,腳本可能會要求您輸入ssh的登錄密碼。
[root@iZbp1bpj58bdzdosdxxf82Z ~]# curl http://aliacs-k8s-cn-hangzhou.oss.aliyuncs.com/tools/context.py > context.py [root@iZbp1bpj58bdzdosdxxf82Z ~]# sudo pip install pyyaml [root@iZbp1bpj58bdzdosdxxf82Z ~]# unset KUBECONFIG [root@iZbp1bpj58bdzdosdxxf82Z ~]# python context.py -H ${HOST} Info: host, hangzhou:118.31.177.21,beijing:47.95.96.234 . Info: file /root/.kube/config successfully generated.
配置結果如下:
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE hangzhou kubernetes-hangzhou kubernetes-admin-hangzhou * beijing kubernetes-beijing kubernetes-admin-beijing
配置alidns.yaml文件
zones填寫您前面申請的域名,注意以點號結尾。并且替換您的accesskeyid和accesskeysecret.
cat >alidns.yaml <access-key-secret = zones = spacexnice.xyz. EOF
初始化控制federation平面
通過本條命令初始化federation控制平面,參數如下:
kubefed init federation # 聯邦的名字 --host-cluster-context=hangzhou # 主集群的context名字 --dns-provider="alidns" # DNS服務提供商 --dns-zone-name="spacexnice.xyz." # 前面注冊好的域名,必須以.結束 --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 # 關閉etcd持久存儲 [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=false Creating 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
目前為止您已經成功的初始化好了Federation的控制平面。接下來需要將各個子集群加入到Federation集群中。
添加hangzhou集群
命令行參數解析 kubefed join hangzhou #加入聯邦的集群命名名字 --context=federation #聯邦的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
后面介紹下集群查詢,移除集群,刪除聯邦等命令
集群查詢
查詢注冊到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
刪除集群聯邦
集群聯邦控制平面的刪除功能還在開發中,目前可以通過刪除namespace federation-system的方法來清理(注意pv不會刪除)。命令在host-cluster-context上執行。
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl delete ns federation-system
創建服務
集群聯邦支持以下聯邦資源,這些資源會自動在所有注冊的kubernetes集群中創建.
Federated ConfigMap
Federated Service
Federated DaemonSet
Federated Deployment
Federated Ingress
Federated Namespaces
Federated ReplicaSets
Federated Secrets
Federated Events(僅存在federation控制平面)
創建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
您還可以通過kubectl scale deploy nginx --replicas=3 --context=federation來擴展nginx副本,然后觀察nginx應用在各個子集群中的分布情況。
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl get deploy --context=beijing [root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl get deploy --context=hangzhou
創建deployment
[root@iZbp1bpj58bdzdosdxxf82Z ~]# cat deployment-nginx.yaml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - 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:Session Affinity: None Events:
通過域名訪問服務:
[root@iZbp1bpj58bdzdosdxxf82Z ~]# curl nginx.default.fed.svc.spacexnice.xyzWelcome to nginx! Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.Thank you for using nginx.
查看云解析dns的record記錄
我們可以在阿里云云解析控制臺看見剛剛添加的nginx的dns記錄。
總結
Federation為您提供一種多集群管理的途徑,統一管理多云(multi-cloud)資源,并提供了一種災備的新途徑。阿里云Kubernetes服務也將進一步簡化Federation的用戶體驗,將容器服務Kubernetes集群管理與Federation完美結合在一起。也歡迎您的意見和建議,幫助我們迭代產品能力。
阿里云Kubernetes服務 全球首批通過Kubernetes一致性認證,簡化了Kubernetes集群生命周期管理,內置了與阿里云產品集成,也將進一步簡化Kubernetes的開發者體驗,幫助用戶關注云端應用價值創新。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25214.html
摘要:作為本次大會的白金贊助商,華為云作為容器技術的領導者之一,將如何展現自身能力讓小編先帶你一睹為快。華為云如何參與本次峰會技術直擊熱點自去年以來,存儲一直是大會的熱點。今日,2018年容器領域最大的峰會之一KubeCon + CloudNativeCon于丹麥哥本哈根召開。云計算業界領先公司和技術大牛將齊聚童話王國一同交流和分享容器技術。作為本次大會的白金贊助商,華為云作為容器技術的領導者之一...
摘要:跨集群服務能夠分布在不同的地理位置,使得混合和多云成為可能,相對于單一集群多可用區部署,更好地保證高可用。注例子中,我們利用谷歌容器引擎提供的集群,在該平臺上,你可以把部署到想要的地區。 編者按:這篇文章是關于Kubernetes 1.3新功能的一系列深入文章的一部分。本文是第七篇。 用戶使用Kubernetes 對生產環境上的部署進行彈性伸縮,同時我們聽到一個明確的聲音:希望跨區域、...
摘要:正在加速以容器技術運行有狀態服務在生產環境中的采用,這時我們就更需要關心性能和易于部署。這些運行有狀態服務的容器需要特殊處理就帶來了新的需求,包括更長的生命周期,配置依賴,有狀態的故障轉移以及對性能的要求。 編者按:本文作者是 Diamanti 的產品 VP Mark Balch,他將更多的分享他們向 Kubernetes做出的一些貢獻。這篇文章是關于 Kubernetes 1.3 新...
摘要:正在加速以容器技術運行有狀態服務在生產環境中的采用,這時我們就更需要關心性能和易于部署。這些運行有狀態服務的容器需要特殊處理就帶來了新的需求,包括更長的生命周期,配置依賴,有狀態的故障轉移以及對性能的要求。 編者按:本文作者是 Diamanti 的產品 VP Mark Balch,他將更多的分享他們向 Kubernetes做出的一些貢獻。這篇文章是關于 Kubernetes 1.3 新...
閱讀 2692·2023-04-25 19:13
閱讀 4010·2021-09-22 15:34
閱讀 3052·2019-08-30 14:23
閱讀 1461·2019-08-29 17:17
閱讀 1603·2019-08-29 16:05
閱讀 1537·2019-08-29 13:26
閱讀 1217·2019-08-29 13:19
閱讀 553·2019-08-29 13:16