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. [LeetCode] 137. Single Number II 单独数 II

    Given a non-empty array of integers, every element appears three times except for one, which appears ...

  2. 并行编程架构(指令流水、进程、线程、多核,Pipe and Filter)

    最近在进行DSP软件优化时,查阅文献,看到了几种并行机制,下面予以总结: 关键词一:指令流水 关键词二:多进程 关键词三:多线程 关键词四:多核(多处理器.超线程结构.多核结构.多核超线程架构) 在体 ...

  3. jenkins自动打tag

    思路: 1.手动输入需要tag的版本号,如“build001”,填写svn有权限的密码(账号默认值),填写打tag的说明 2.脚本根据tag的版本号,自动创建目录(版本号为目录名称) 3.将需要打ta ...

  4. Jetson TX2

    NVIDIA Jetson TX2作为一个嵌入式平台的深度学习端,具备不错的GPU性能,可以发现TX2的GPU的计算能力是6.2.这意味着TX2对半精度运算有着良好的支持,因此,完全可以在桌面端训练好 ...

  5. C 风格字符串、string 类要点总结

    1. C风格字符串 1.1 其它 头文件<cstring> 特殊性质:C风格字符串以空字符\0结尾 1.2 读取一行的区别 1.2.1 cin.getline(array1,n,char) ...

  6. 嵌入式02 STM32 实验02 端口输入输出各4种模式

    GPIO(General-purpose input/output 通用目的输入/输出端口) 电压(A模拟量)与电平(D数字量) GPIO 8种工作模式(输入四种.输出四种) 1.GPIO_Mode_ ...

  7. Linux04 目录的相关操作(mkdir、rmdir、rm、cp)

    一.创建目录:mkdir mkdir 目录名 二.删除目录:rmdir / rm rmdir 目录名 rm -r 目录名      每一级子目录都会询问是否删除 rm -rf 目录名     慎用,给 ...

  8. LeetCode第152场周赛(Java)

    这算是我第一次正式参加 LeetCode 的周赛吧.通过两道题.意料之中(通过上次模拟可以看出来).总的来说,脑袋还是不太灵光.想的有点慢.全球第一名 0:10:19 就全部通过...感觉我的智商被狠 ...

  9. NLP自然语言处理的开发环境搭建

    NLP的开发环境搭建主要分为以下几步: Python安装 NLTK系统安装 Python3.5下载安装 下载链接:https://www.python.org/downloads/release/py ...

  10. html5 iframe

    html5 iframe元素:用于在网页中嵌入另一个页面,或嵌入视频 可替换元素 显示内容取决于元素属性 css不能完全控制其中样式 通常是行内块盒子 <a href="" ...