阿里云上Kubernetes集群聯邦

摘要: 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   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。通過運行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                    NAMESPACEhangzhou   kubernetes-hangzhou   kubernetes-admin-hangzhou
*         beijing    kubernetes-beijing    kubernetes-admin-beijing

配置alidns.yaml文件

zones填寫您前面申請的域名,注意以點號結尾。并且替換您的accesskeyid和accesskeysecret.

cat >alidns.yaml <<EOF
[Global]
access-key-id = <Your-key-id>
access-key-secret = <Your-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=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

目前為止您已經成功的初始化好了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: 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>

通過域名訪問服務:

[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記錄

我們可以在阿里云云解析控制臺看見剛剛添加的nginx的dns記錄。

圖片描述

總結

Federation為您提供一種多集群管理的途徑,統一管理多云(multi-cloud)資源,并提供了一種災備的新途徑。阿里云Kubernetes服務也將進一步簡化Federation的用戶體驗,將容器服務Kubernetes集群管理與Federation完美結合在一起。也歡迎您的意見和建議,幫助我們迭代產品能力。
阿里云Kubernetes服務 全球首批通過Kubernetes一致性認證,簡化了Kubernetes集群生命周期管理,內置了與阿里云產品集成,也將進一步簡化Kubernetes的開發者體驗,幫助用戶關注云端應用價值創新。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452407.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452407.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452407.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

缺氧游戲計算機,缺氧PC最低什么配置一覽 你覺得高嗎

缺氧PC最低什么配置一覽&#xff0c;你覺得高嗎。游戲對于電腦有不同程度的要求&#xff0c;缺氧這款游戲也有著自己的配置要求&#xff0c;看看下面的缺氧PC最低什么配置一覽&#xff0c;你的硬件夠得上嗎。缺氧最低配置&#xff1a;首先公布的是官 方配置需求&#xff0c;目前…

Diango博客--14.使用 Django 項目中的 ORM 編寫偽造測試數據腳本

文章目錄0.思路引導1.腳本目錄結構2.使用 Faker 快速生成測試數據3.批量生成測試數據4.執行腳本5.效果展示0.思路引導 1&#xff09;為了防止博客首頁展示的文章過多以及提升加載速度&#xff0c;可以對文章列表進行分頁展示。 2&#xff09;不過這需要比較多的文章才能達到分…

基于Sql Server 2008的分布式數據庫的實踐

配置Sql Server 2008&#xff08;Win7&#xff09; 1.打開SQL server2012&#xff0c;使用windows身份登錄 2.登錄后&#xff0c;右鍵選擇“屬性”。左側選擇“安全性”&#xff0c;選中右側的“SQL Server 和 Windows 身份驗證模式”以啟用混合登錄模式 3.選擇“連接”&#x…

橫向技術分析C#、C++和Java優劣

本文將從技術人員的角度橫向分析C#、C和Java優劣&#xff0c;其實選擇Java陣營還是.NET陣營&#xff0c;大家可以根據自己的實際需要來確定。 C#誕生之日起&#xff0c;關于C#與Java之間的論戰便此起彼伏&#xff0c;至今不輟。拋卻Microsoft與Sun之間的恩怨與口角&#xff0c;…

軟件測試中的存根程序

存根程序用來代替被測試的模塊所調用的模塊&#xff0c;因此存根程序也稱為“虛擬子程序”&#xff0c;它利用被它代替的模塊的接口&#xff0c;只做盡可能少的數據操作。

計算機網絡應用云計算,計算機網絡云計算的類型

原標題&#xff1a;計算機網絡云計算的類型隨著現代計算機網絡技術的不斷發展&#xff0c;越來越多的與計算機網絡有關的現代化技術得以出現&#xff0c;并且有著廣泛的應用&#xff0c;其中云計算技術就是比較常見的一種&#xff0c;在實際應用中發揮著較高的價值。在信息時代…

sublime_text快捷鍵

1、注釋&#xff1a;選中文本后&#xff0c;CTRL / 2、CTRL N,CTRLS&#xff0c;保存成.html文件后&#xff0c;只需要輸入感嘆號&#xff01;&#xff0c;然后tab鍵&#xff0c;即可打印出基本的html格式&#xff01;轉載于:https://www.cnblogs.com/JAVA-STUDYER/p/855040…

Diango博客--15.通過 Django Pagination 實現簡單分頁(一)

文章目錄0.思路引導1.Paginator 類的常用方法2.用 Paginator 給文章列表分頁3.在模板中設置分頁導航4.效果展示0.思路引導 1&#xff09;當博客上發布的文章越來越多時&#xff0c;通常需要進行分頁顯示&#xff0c;以免所有的文章都堆積在一個頁面&#xff0c;影響用戶體驗。…

SpringMVC 測試 mockMVC

SpringMVC測試框架 基于RESTful風格的SpringMVC的測試&#xff0c;我們可以測試完整的Spring MVC流程&#xff0c;即從URL請求到控制器處理&#xff0c;再到視圖渲染都可以測試。 一 MockMvcBuilder MockMvcBuilder是用來構造MockMvc的構造器&#xff0c;其主要有兩個實現&…

自頂向下和自底向上測試的優缺點

自頂向下測試方法的主要優點是不需要測試驅動程序&#xff0c;能夠在測試階段的早期實現并驗證系統的主要功能&#xff0c;而且能在早期發現上層模塊的接口錯誤。 自頂向下測試方法的主要缺點是需要存根程序&#xff0c;可能遇到與此相聯系的測試困難&#xff0c;低層關鍵模塊中…

C++ class中的靜態(static)成員

C class中的靜態(static)成員 &#xff08;1&#xff09; 靜態數據成員 ①一般地靜態數據成員在該類定義之外被初始化&#xff0c;如同一個成員函數被定義在類定義之外一樣。在這種定義中的靜態成員的名字必須被其類名限定修飾&#xff0c;例如下面是_interestRate的初始…

用計算機彈可惜不是你,可惜不是你 還是幸虧不是你

一、 你沒有再挽留 我也沒有再回頭 就這樣 無風無雨也無晴 無疾而終二、 是我孤陋寡聞不知你心有人三、 如果作業有葬禮,全體學生定當盛裝出席.四、 縱使我有千般好 你也看不到 因為你沒有一雙愛我的眼睛五、 原來暫時共你沒緣分 來年先會變得更合襯六、 真的別回頭 你有未來 你…

PHP 完整實戰23種設計模式

PHP實戰創建型模式 單例模式 工廠模式 抽象工廠模式 原型模式 建造者模式 PHP實戰結構型模式 橋接模式 享元模式 外觀模式 適配器模式 裝飾器模式 組合模式 代理模式 過濾器模式 PHP實戰行為型模式 模板模式 策略模式 狀態模式 觀察者模式 責任鏈模式 訪問者模…

Diango博客--16.穩定易用的 Django 分頁庫,完善分頁功能(二)

文章目錄0.思路引導1.分頁效果概述2.分頁思路3.Django 第三方拓展&#xff1a;django-pure-pagination4.自定義模板0.思路引導 1&#xff09;在前面我們通過 Django Pagination 實現簡單分頁 中&#xff0c;我們實現了一個簡單的分頁導航。但效果有點差強人意&#xff0c;我們…

回歸測試

在集成測試過程中&#xff0c;每當一個新模塊結合進來時&#xff0c;程序就發生了變化&#xff1a;建立了新的數據流路徑&#xff0c;可能出現了新的I/O操作&#xff0c;激活了新的控制邏輯。在集成測試的范疇中&#xff0c;回歸測試是指重新執行已經做過的測試的某個子集&…

不同的寫法 其中 1 2 (試了下 沒有效果 ,先記載這里把)

轉載于:https://www.cnblogs.com/kaibindirver/p/9145455.html

美國西北大學 計算機工程專業排名,[轉載]美國西北大學計算機工程研究生最新專業排名...

對于打算去美國西北大學讀研究生的學生來講&#xff0c;美國西北大學研究生申請要求及美國西北大學研究生專業介紹是學生最關心的問題。本文香港介紹美國西北大學研究生申請要求及美國西北大學研究生的專業介紹&#xff0c;幫助更多的學生更好的了解美國西北大學。2016年西北大…

析構函數virtual與非virtual區別

作為通常的原則&#xff0c;如果一個類定義了虛函數&#xff0c;那么它的析構函數就應當是virtual的。因為定義了虛函數則隱含著&#xff1a;這個類會被繼承&#xff0c;并且會通過基類的指針指向子類對象&#xff0c;從而得到多態性。 這個類可能會被繼承&#xff0c;并且會…

Python:字典列表字符串方法測試

測試的一些Python中的關于字典、列表、字符串的使用方法&#xff0c;放在這里備查。整個測試代碼和說明如下&#xff1a; # -*- coding: utf-8 -*- """Python:函數中全是指針傳遞&#xff0c;而任何變量都是給予一個指針指向一個內存空間"""impo…

什么是確認測試

確認測試也稱為驗收測試&#xff0c;它的目標是驗證軟件的有效性。 通常&#xff0c;驗證指的是保證軟件正確地實現了某個特定要求的一系列活動&#xff1b;確認指的是為了保證軟件確實滿足了用戶需求而進行的一系列活動。 軟件有效性的一個簡單定義是&#xff1a;如果軟件的功…