Kubernetes+Federation打造跨多云管理服务
Kubernetes日渐普及,在公有云、私有云等多个环境中部署kubernetes集群已是常规做法,而随着环境的复杂多样和集群数量增长,如何高效地管理这些集群成为新的问题。于是跨多云管理服务应运而生。
华为云高级工程师Fisher在Cloud Native Days China 2019杭州站发表了名为《Kubernetes+Federation打造跨多云管理服务》的议题,介绍了基于Federation的多云管理现状及未来计划。本文整理自Fisher现场分享实录。
大家好,我是华为云的Fisher。今天和大家分享基于Kubernetes+Federation打造跨多云服务。跨多云概念在2018年比较火,相信大家或多或少都听说过,今天主要介绍如何打造跨多云管理,包括公有云和私有云。
首先介绍场景——PAAS混合云典型场景。它的需求第一是高可用,业务负载从集群故障中快速恢复;第二是资源容量溢出,单个集群的扩容速度或者是机房的机器扩容速度跟不上应用扩容速度,利用多云可进行快速扩容;第三是避免厂商绑定,服务只是在一家云厂商里,假如厂商宕机服务就会中断,而在多云上更加保险;第四就是资源池划分,用于私有云和公有云,数据根据敏感程度分布到线上或者线下。
这4个需求,也是跨多云管理服务主要解决的问题。

如上图场景,就是我刚刚所说的私有云和公有云联动的状态。运维人员统一应用交付。对于APP用户来说,是一个平面,可以进行统一访问控制。
V1版本
接下来和大家一起看看Federation项目以及Multicluster SIG的发展历程。
Kubernetes Federation发展历程中,15—17年是前期的V1版本。如下图所示,上面是管理面,下面是被管理的集群。Federated APIServer 兼容Kubernetes的API,通过Federated Controller驱动,将对象同步到各集群。


上图为V1中RepicaSet的配置,把联邦的所有配置信息都写到annotations里,整个创建流程与Kubernetes类似。配置信息先到Federated APIServer,再通过Federated Schduler调度,最后通过Federated Controller把应用创建到各子集群。Federated Schduler会根据各集群的配置比重与集群中资源的使用情况进行综合调度。
这个版本的问题是:
联邦层重新实现K8S API ——导致对象携带许多Federation专属的Annotation;
缺少独立的API对象版本控制——K8S Deployment GA,但是Federation v1中的Deployment仍是Beta;
原封不动映射K8S API——联邦层对象在调度、生命周期管理等方面可做的增强点很受限;
V2版本
Federation V2版本,吸取V1的教训做了很多改进。架构上采用了流行的CRD+Controller模型,其可以运行在任意Kubernetes集群中。把Federation专用的Annotation剥离出来作为独立的API对象,通过CRD来定义,将K8S对象封装到Federation API对象里,这样不会影响Federation层API的演进。

V2版本整体架构如上图,有4种类型的CRD:CLuster,Type,Schedule,DNS。
Cluster configuration
首先看集群注册,通过Kubefed2 join向联邦添加集群,Controller读取集群的Context信息,转化为Cluster Registry项目定义的Kubernetes Cluster API并保存。Cluster Registry项目对Cluster API对象标准化和增强,将作为后续多集群发展的基础模块,管理了member集群的API Endpoint及认证信息等。
Type configuration
再介绍一下Type Configuration,其定义了Federation可以处理哪些资源对象(在v1版本中靠独立APIServer来过滤),例如使Federation处理Deployment,就创建一个Deployment Type Configuration,其中包含三个比较重要的点:
① Template:Federated API 中封装的K8S对象
② Plocement:配置对象实例分布到哪些集群
③ Overider:指定集群中的特定字段定制化,用于解决不同的云厂商之间的配置差异。
Schedule
调度的关键是配置了集群的比重,比重决定了调度时实例的分布。主要分为按权重分配和按资源利用情况分配。
MultiClusterDNS

上图是服务发现—Multicluster DNS。服务发现主要基于Federation的设计规则,即认为多个集群之间的网络不一定是通的,因此现在主要是把服务发现的规则配置在华为的DNS服务器上,多个集群通过DNS实现服务发现。
未来计划
后续我们打算结合Istio实现K8S多云上多集群的流量治理。第一种方案如下图,这要求底层是互通的,只需部署一个Istio控制面,就可以watch所有集群的Service。目前这个方案的限制还比较多,因为不同集群的Service网段不能冲突,现阶段方案还在规划中。

Istio还有如下图所示的另外一种方案:每个集群都部署一个Istio控制面板,把其他集群的服务配置成本集群的外部服务,跨集群群服务类似Istio访问外部服务,显然配置是比较繁琐的,当前也在规划中。

相关服务请访问:https://support.huaweicloud.com/cce/index.html?utm_content=cce_helpcenter_2019
Kubernetes+Federation打造跨多云管理服务的更多相关文章
- 实现Kubernetes跨集群服务应用的高可用
在Kubernetes 1.3版本,我们希望降低跨集群跨地区服务部署相关的管理和运营难度.本文介绍如何实现此目标. 注意:虽然本文示例使用谷歌容器引擎(GKE)来提供Kubernetes集群,您可以在 ...
- Kubernetes服务发现入门:如何高效管理服务?
愈发复杂的应用程序正在依靠微服务来保持可扩展性和提升效率.Kubernetes为微服务提供了完美的环境,并能够让其与Kubernetes的工具组件和功能兼容.当应用程序的每个部分放置在一个容器中,整个 ...
- 容器服务kubernetes federation v2实践五:多集群流量调度
概述 在federation v2多集群环境中,通过前面几篇文章的介绍,我们可以很容易的进行服务多集群部署,考虑到业务部署和容灾需要,我们通常需要调整服务在各个集群的流量分布.本文下面简单介绍如何在阿 ...
- IBM推出新一代云计算技术来解决多云管理
IBM 云计算论坛在南京举行,推出了一项全新的开放式技术,使用户能够更加便捷地跨不同云计算基础架构来管理.迁移和整合应用. IBM 多云管理解决方案(Multicloud Manager)控制面板 据 ...
- K8S中如何跨namespace 访问服务?为什么ping不通ClusterIP?
1.K8S中如何跨namespace 访问服务? 2.在Pod中为什么ping不通ClusterIP? 简述: Rancher2.0中的一个用户,在K8S环境中,创建两个namespace,对应用进行 ...
- 手动集成 Ironic 裸金属管理服务(Rocky)
目录 文章目录 目录 前文列表 横向扩展裸金属管理服务节点 配置基础设施 安装 Ironic(BareMetal) 安装 Nova Compute(BareMetal) 配置 Neutron 提供 P ...
- 2022Gartner容器预测:2025年85%的企业将使用容器管理服务
近日,国际知名权威分析机构Gartner发布了最新<全球容器管理预测>.预测中指出:在加速的数字化转型驱动下,到2025年全球容器管理领域市场规模将突破14亿美元,预计年复合增长率将达到2 ...
- 在 Kubernetes 容器集群,微服务项目最佳实践
转载自:https://mp.weixin.qq.com/s/WYu3gDwKKf06f_FYbO9YRg 本文主要介绍我个人在使用 Kubernetes 的过程中,总结出的一套「Kubernetes ...
- 基于kubernetes构建Docker集群管理详解-转
http://blog.liuts.com/post/247/ 一.前言 Kubernetes 是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度 ...
随机推荐
- JVM 线上故障排查基本操作--内容问题排查
内存问题排查 说完了 CPU 的问题排查,再说说内存的排查,通常,内存的问题就是 GC 的问题,因为 Java 的内存由 GC 管理.有2种情况,一种是内存溢出了,一种是内存没有溢出,但 GC 不健康 ...
- [LeetCode] 529. Minesweeper 扫雷
Let's play the minesweeper game (Wikipedia, online game)! You are given a 2D char matrix representin ...
- Electron-Vue使用element-ui el-table不显示/卡死
我们需要把element-ui加入到.electron-vue/webpack.renderer.config.js文件中的白名单里面 在这句话let whiteListedModules = ['v ...
- was8.5和aop的问题:JVMVRFY013 违反类装入约束
一.错误日志:Error 500: javax.servlet.ServletException: java.lang.VerifyError: JVMVRFY013 违反类装入约束 类=org/sp ...
- WordPress 设计学习
"One can never be defeated until defeat has been accepted as a reality"----- Bruce Lee 官网免 ...
- Jetson TX2
NVIDIA Jetson TX2作为一个嵌入式平台的深度学习端,具备不错的GPU性能,可以发现TX2的GPU的计算能力是6.2.这意味着TX2对半精度运算有着良好的支持,因此,完全可以在桌面端训练好 ...
- 06 BootStrap前端开发框架(超级好用)
1.BootStrap概念: 一个前端开发的框架,Bootstrap,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JavaScript 的,它简洁灵活 ...
- [转帖]微软宣布加入 OpenJDK 项目
微软宣布加入 OpenJDK 项目 https://news.cnblogs.com/n/646003/ 近日,微软的 Bruno Borges 在 OpenJDK 邮件列表中发布了一条消息,内容包含 ...
- PMBOK(第六版) PMP备考知识总汇!
记录本人学习PMBOK第六版的学习笔记. 备考知识总汇! PMBOK序章 PMP备考指南之相关事项介绍 PMP备考指南之第一章:引论 PMP备考指南之第二章:项目运作环境 PMP备考指南之第三章:项目 ...
- day38——线程queue、事件event、协程
day38 线程queue 多线程抢占资源 只能让其串行--用到互斥锁 线程queue 队列--先进先出(FIFO) import queue q = queue.Queue(3) q.put(1) ...