阿里云上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.mzph.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…

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;其主要有两个实现&…

Diango博客--16.稳定易用的 Django 分页库,完善分页功能(二)

文章目录0.思路引导1.分页效果概述2.分页思路3.Django 第三方拓展&#xff1a;django-pure-pagination4.自定义模板0.思路引导 1&#xff09;在前面我们通过 Django Pagination 实现简单分页 中&#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…

Diango博客--17.统计各个分类和标签下的文章数

文章目录0.思路引导1.Model 回顾2.数据库数据聚合3.使用 Annotate4.在模板中引用新增的属性0.思路引导 在我们的博客侧边栏有分类列表和标签列表&#xff0c;显示博客已有的全部文章分类。现在想在分类名和标签名后显示该分类或者标签下有多少篇文章&#xff0c;该怎么做呢&am…

HTTP协议中request报文请求方法和状态响应码

一个HTTP请求报文由4部分组成&#xff1a; 请求行&#xff08;request line&#xff09;请求头部&#xff08;header&#xff09;空行请求数据下图给出了请求报文的一般格式&#xff1a; 请求行中包括了请求方法&#xff0c;常见的请求方法有&#xff1a; GET&#xff1a;从服务…

bmon:一个强大的网络带宽监视和调试工具

bmon 是类 Unix 系统中一个基于文本&#xff0c;简单但非常强大的 网络监视和调试工具&#xff0c;它能抓取网络相关统计信息并把它们以用户友好的格式展现出来。它是一个可靠高效的带宽监视和网速估测工具。 它能使用各种输入模块读取输入&#xff0c;并以各种输出模式显示输出…

计算机d盘无法格式化,四种方法解决D盘无法格式化问题

不少朋友系统出现故障&#xff0c;几乎都是选择重装系统的方法来解决问题。系统重装后&#xff0c;不少朋友觉得D盘没有什么重要的东西&#xff0c;就想将其格式化&#xff0c;可是系统出现windows无法格式该驱动器的提示&#xff0c;这是怎么回事呢&#xff1f;D盘无法格式化要…

sqlserver视图

作用 ①简化了操作&#xff0c;把经常使用的数据定义为视图。 ②安全性&#xff0c;用户只能查询和修改能看到的数据。 ③逻辑上的独立性&#xff0c;屏蔽了真实表的结构带来的影响。 对视图的修改&#xff1a;单表视图一般用于查询和修改&#xff0c;会改变基本表的数据&#…

Diango博客--18.使用 Fabric 自动化部署 Django 项目

文章目录1.本地安装 Fabric2.部署过程回顾3.完善项目配置4.修改 BASE_DIR 配置项5.设置 Supervisor 环境变量6.编写 Fabric 脚本7.执行 Fabric 自动部署脚本1.本地安装 Fabric $ pipenv install fabric --dev 报错&#xff1a; An error occurred while installing django-pure…

自断前程,未来80%IT工作将实现自动化

技术人员革了自己的命&#xff1f; 在上周的Structure大会上&#xff0c;硅谷著名风险投资人、亿万富翁唯诺德称未来80%的IT工作都将被AI系统所替代。不过&#xff0c;唯诺德好像并不担心&#xff0c;相反他补充了一句“我觉得很兴奋。”唯诺德表示自己并非危言耸听&#xff0c…

转://Linux Multipath多路径配置与使用案例

在Linux平台一部分存储产品使用操作系统自带的多路径软件&#xff0c;包括最常见的HP和IBM的部分存储产品&#xff0c;在Linux自带的多路径软件叫做multipath&#xff0c;这篇文章以HP EVA系列存储在Linux平台的使用为例&#xff0c;详细的在Linux平台配置和使用多路径。 那么问…

Windows中安装MongoDB以及studio3t

文章目录1.安装MongoDB2.配置并启动MongoDB3.使用studio3t连接mongodb1.安装MongoDB 运行 mongodb-win32-x86_64-2008plus-ssl-v3.4-latest-signed.msi 2.配置并启动MongoDB 创建几个文件夹具体如下&#xff1a; 1&#xff09;数据库路径&#xff08;data目录&#xff09; 2…

为旗下硬件产品服务,LG推出基于SLAM技术的3D摄像头

LG官方则表示&#xff0c;集成了LG的3D摄像头和SLAM技术的单个模块性价比很高。 今年3月份的时候&#xff0c;LG在MWC 2017上展示其和Valve合作的VR头显&#xff0c;最近他们宣布将基于AR公司Augmented Pixels的技术开发一个3D摄像头模块&#xff0c;来辅助他们的各种硬件产品…