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打造跨多云管理服务的更多相关文章

  1. 实现Kubernetes跨集群服务应用的高可用

    在Kubernetes 1.3版本,我们希望降低跨集群跨地区服务部署相关的管理和运营难度.本文介绍如何实现此目标. 注意:虽然本文示例使用谷歌容器引擎(GKE)来提供Kubernetes集群,您可以在 ...

  2. Kubernetes服务发现入门:如何高效管理服务?

    愈发复杂的应用程序正在依靠微服务来保持可扩展性和提升效率.Kubernetes为微服务提供了完美的环境,并能够让其与Kubernetes的工具组件和功能兼容.当应用程序的每个部分放置在一个容器中,整个 ...

  3. 容器服务kubernetes federation v2实践五:多集群流量调度

    概述 在federation v2多集群环境中,通过前面几篇文章的介绍,我们可以很容易的进行服务多集群部署,考虑到业务部署和容灾需要,我们通常需要调整服务在各个集群的流量分布.本文下面简单介绍如何在阿 ...

  4. IBM推出新一代云计算技术来解决多云管理

    IBM 云计算论坛在南京举行,推出了一项全新的开放式技术,使用户能够更加便捷地跨不同云计算基础架构来管理.迁移和整合应用. IBM 多云管理解决方案(Multicloud Manager)控制面板 据 ...

  5. K8S中如何跨namespace 访问服务?为什么ping不通ClusterIP?

    1.K8S中如何跨namespace 访问服务? 2.在Pod中为什么ping不通ClusterIP? 简述: Rancher2.0中的一个用户,在K8S环境中,创建两个namespace,对应用进行 ...

  6. 手动集成 Ironic 裸金属管理服务(Rocky)

    目录 文章目录 目录 前文列表 横向扩展裸金属管理服务节点 配置基础设施 安装 Ironic(BareMetal) 安装 Nova Compute(BareMetal) 配置 Neutron 提供 P ...

  7. 2022Gartner容器预测:2025年85%的企业将使用容器管理服务

    近日,国际知名权威分析机构Gartner发布了最新<全球容器管理预测>.预测中指出:在加速的数字化转型驱动下,到2025年全球容器管理领域市场规模将突破14亿美元,预计年复合增长率将达到2 ...

  8. 在 Kubernetes 容器集群,微服务项目最佳实践

    转载自:https://mp.weixin.qq.com/s/WYu3gDwKKf06f_FYbO9YRg 本文主要介绍我个人在使用 Kubernetes 的过程中,总结出的一套「Kubernetes ...

  9. 基于kubernetes构建Docker集群管理详解-转

    http://blog.liuts.com/post/247/ 一.前言        Kubernetes 是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度 ...

随机推荐

  1. EasyNVR网页Chrome无插件播放安防摄像机视频流是怎么做到web浏览器延时一秒内

    背景说明 由于互联网的飞速发展,传统安防摄像头的视频监控直播与互联网直播相结合是大势所趋.传统安防的直播大多在一个局域网内,在播放的客户端上也是有所限制,一般都需要OCX Web插件进行直播.对于安防 ...

  2. Excel如何输入负数

    一般红字发票很少开,以前都是单独把红字发票摘出来放到一行里,然后加减一下,前段时间有个客户因为普票无法报销,改要了专票,因为是电子发票,无法作废,开了张红字.虽然红字很少开,但是想着百度一下如何在ex ...

  3. [LeetCode] 77. Combinations 全组合

    Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl ...

  4. 【Python学习之一】Python安装、IDE安装配置

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python2.X python3.X 所谓安装Python,安装的是 ...

  5. 如何确定垃圾?JVM GC ?

    如何确定垃圾? 正文 如何确定垃圾? 前面已经提到 JVM 可以采用 引用计数法 与 可达性分析算法 来确定需要回收的垃圾,我们来具体看一下这两种算法: 引用计数法 该方法实现为:给每个对象添加一个引 ...

  6. Python代码编码规范

    目录 1. Introduction 介绍 2. A Foolish Consistency is the Hobgoblin of Little Minds 尽信书,则不如无书 3. Code la ...

  7. 罗辑思维首席架构师:Go微服务改造实践

    转自:http://www.infoq.com/cn/news/2018/05/luojisiwei 方圆 曾先后在 Cisco,新浪微博从事基础架构研发工作.十多年一直专注于后端技术的研发,在消息通 ...

  8. VMware vSphere6.0 服务器虚拟化部署安装图解(最全,最详细)-搭建的所有步骤

    VMware vSphere6.0 服务器虚拟化部署安装图解 一 .VMware vSphere部署的前期规划要点 1.vSphere的优点 (略) 2如何利用现在的设备架构虚拟化环境 在虚拟化过程中 ...

  9. LeetCode 513. 找树左下角的值(Find Bottom Left Tree Value)

    513. 找树左下角的值 513. Find Bottom Left Tree Value 题目描述 给定一个二叉树,在树的最后一行找到最左边的值. LeetCode513. Find Bottom ...

  10. Python的运算符和编码

    1.格式化输出 1.有两种方式: 1.1.%的方式 addr = "我家住在%s" % ("黄土高坡") 1.2.format()的方式 addr = &quo ...