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构建一个容器的调度服务,提供资源调度 ...
随机推荐
- php中类的不定参数使用示例
在类的实例化过程中,可以带或不带参数,那么构造函数将如何处理这些参数呢?为了使构造函数具有通用性,在定义构造函数时,一般不带参数,然后在其内部对参数情况进行处理.下面代码显示了一个完整的通用Perso ...
- [LeetCode] 557. Reverse Words in a String III 翻转字符串中的单词 III
Given a string, you need to reverse the order of characters in each word within a sentence while sti ...
- E: Unable to correct problems, you have held broken packages-之apt-get 下载报依赖问题
今天在新来了一台ubutnu 18.04 在安装zabbix客户端是报依赖问题 root@VM_0_10:~# apt-get install zabbix-agent Reading package ...
- PHP命令行参数
原文地址:http://php.swoole.com/wiki/PHP%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0 PHP命令行参数 目录 [隐藏] ...
- mongoDB主从和集群
主从(windows下的配置) 主服务器设置 mongod --dbpath=F:\mongoDB\db --master \\dbpath是设定数据存放路径 --master是指定为主库 从服务器设 ...
- 【视频开发】OpenCV中Mat,图像二维指针和CxImage类的转换
在做图像处理中,常用的函数接口有OpenCV中的Mat图像类,有时候需要直接用二维指针开辟内存直接存储图像数据,有时候需要用到CxImage类存储图像.本文主要是总结下这三类存储方式之间的图像数据的转 ...
- Linux系统权限设置 - 运用指南
下面对linux系统下的有关权限操作命令进行了梳理总结,并配合简单实例进行说明.linux中除了常见的读(r).写(w).执行(x)权限以外,还有其他的一些特殊或隐藏权限,熟练掌握这些权限知识的使用, ...
- jira中使用eazyBI
参考:https://docs.eazybi.com/eazybijira/set-up-and-administer/set-up-and-administer-for-jira-server/in ...
- 09 Spring的依赖注入
1.依赖注入(Dependency Injection) (1)IOC的作用: 降低程序间的耦合(依赖关系)(2)依赖关系的管理: 以后都交给spring来维护 在当前类需要用到其他类的对象,由spr ...
- 【转帖】处理器史话 | 服务器CPU市场的战役, AMD、Intel和ARM的厮杀
处理器史话 | 服务器CPU市场的战役, AMD.Intel和ARM的厮杀 https://www.eefocus.com/mcu-dsp/377300 说完了个性鲜明的消费类电子,接下来聊一聊通 ...