写点什么

Kubernetes 1.5 新功能解析之集群联盟

  • 2020-03-09
  • 本文字数:2205 字

    阅读完需:约 7 分钟

Kubernetes 1.5 新功能解析之集群联盟

最近,Kubernetes 1.5 发布,不难发现,它对于集群联盟的支持正趋于成熟。集群联盟功能是在 Kubernetes1.3 的时候引入的。1.5 版本不仅包含了很多新功能,而且更容易设置,目测不久之后就可以支持所有的 Kubernetes API 对象了。


1.5 版本此次还引入了‘kubefed’命令行工具,用于简化集群开启步骤。同样,该功能处于 Alpha 阶段,用于 Federated DaemonSets,Deployments 和 ConfigMaps。总结如下:


  • DaemonSets——它是 Kubernetes 的部署规则,确保在新的节点被添加到集群的时候,已给的 Pod 可以呈现在任意节点上。

  • Deployments——描述了 Replica Sets 的理想状态。

  • ConfigMaps——它是应用于 Replica Sets 的变量,当镜像参数被外化的时候,它很大程度上提升了镜像的可重复使用率。


Federated DaemonSets,Federated Deployments,Federated ConfigMaps 是下一阶段的核心概念。比如,Federated DaemonSets 确保 pod 部署在新添加集群的每个节点上。


说到这里,到底什么是“federation”?让我们来解释一下。假设现在有一个 service 全球都在用。当然,无论用户是在亚洲、欧洲还是在美国,所有的用户都希望获得相同数量的 service。也就是说,无论在哪里落地,用户们都希望 service 的回应速度跟需求速度能够对等。虽然这听起来非常简单,但是要实现这样的场景,需要不少精力。


这就是 Kubernetes 集群需要去做的事情。


那么,它是如何运作的呢?通过运行 Federation 控制面板,Kubernetes 众多集群中,其中一个必定会变成 master。就实践上来说,这就是一个管理集群健康的 controller,并且为管理提供单一入口点。入口点的功能有点像 Kubernetes 集群,能够创建 Replica Sets,Deployments,Service,但是 Federated 控制面板通过资源到达底层集群。也就是说,如果我们要求 federation 控制面板用 1000 个 replicas 来创建 Replica Set,它就会传播请求到所有集群;如果我们有 5 个集群,那么默认设置下,每个集群都会分享到 200 个 replica 中。


这对于 Kubernetes 本身来说就是一个很强大的机制。但是,这个功能还远远不止于此。这个功能用于创建 Federated Ingress 也是可能的。实际上,这是一个全球应用程序层面的负载均衡器。得益于对应用程序层面的了解,它使得负载均衡器更加“智能化”——比如,将客户端和服务器的地址位置也纳入考虑因素,并且对他们之间的流量用最佳方法进行引导。


总而言之,Kubernetes 集群联盟可以促进对集群(单个访问点)的管理,但是同时也会对全球内容交付进行优化。接下来,我们会展示具体运作细节。

创建 Federation 面板

在以下实践中,我们会将一些集群结成联盟。方便起见,所有的命令会被分成 6 个可用的脚本的组:


  • 0-settings.sh

  • 1-create.sh

  • 2-getcredentials.sh

  • 3-initfed.sh

  • 4-joinfed.sh

  • 5-destroy.sh


首先,我们需要定义几个变量(0-settings.sh)。



获取 kubectl 和 kubefed 变量。


现在,设置已经 OK,接下来就使用 gcloudcontainer cluster create(1-create.sh)创建新的谷歌 GCE 集群。在这个例子里面,一个是在美国,一个是在欧洲,另外一个是在亚洲。



下一步就是用 gcloud -q containercluster get-credentials(2-getcredentials.sh)提取 kubectl 配置。该配置使用 kubectl 命令行来指引当下的内容。



我们来验证设置:



我们有 3 个集群。第一个:由 FED_HOST_CLUSTER 指示环境变量,被用于运行 federated 面板。对于这点,我们会使用 kubefed init federated 命令(3-initfed.sh)。



注意,在执行完以上命令之后,新的 kubectl 内容如下所示:



联盟内容会变成我们的管理入口点。现在该加入集群了(4-joinfed.sh):



注意,集群 gce-us-east1-b 被用于运行 federation 控制面板,并且也被用作 worker 集群。循环依赖可以更加高效地使用资源,它可以通过使用 kubectl –context=federationget clusters 命令来验证。


使用 Federation 运行应用程序

在我们的 repository 中,你会知道如何使用网页服务来创建 Docker 镜像,这个网页服务展示了容器的 hostname 以及谷歌 GCP 地带。


展示一个输出的例子:



现在我们要开始部署 Replica Set



以及 Federated Service



正如你所看到的,两个命令行指向“federation”内容,也就是指向 federation 控制面板。几分钟后,你就会发现,以下集群在运行 Replica Set 和 Service 了。

创建 Ingress

在 Service 准备就绪之后,我们创建了 Ingress——全局负载均衡器。命令行如下所示:



文件内容指向我们在之前步骤中创建的 service:



几分钟后,我们就会得到一个 IP 地址:



运行很快,出现回应:



取决于客户端的位置。在美国区域,如下所示是大家期望看到的:



但是如果是在欧洲,我们看到的可能是这样的:



除了上述我们描述过的东西,额外的细节可以参考这个链接。

总结

集群联盟已经被用户投入使用,但是还不通用。一些 API 还在 beta 测试阶段,其余的也还都在 alpha 测试阶段。有些功能丢失了,比如它就不支持跨云负载均衡(federated ingress 目前只在谷歌 GCP 平台上运行,因为它依赖于 GCP HTTP(S)负载均衡


然而,随着功能的成熟,对于所有意在全球市场的公司来说,该功能会变成一个促成者,但是目前就 Netflix 或者 Amazon 使用来看,这个功能还无法支持复杂的管理技术。这也就是为什么我们近观这项技术,会希望它能够按照期望的方向来发展。


PS,部署结束的时候,记得删掉你的集群:



本文转载自才云 Caicloud 公众号。


原文链接:https://mp.weixin.qq.com/s/pIqS38uwlCvjCfWpd3LA4g


2020-03-09 20:58332

评论

发布
暂无评论
发现更多内容

误执行 rm -fr /*,我删删删删库了,要跑路吗?

小林coding

Linux 程序人生 Shell linux命令

Spring Boot Actuator微服务服务监控

xcbeyond

Java 微服务 springboot actuator 服务监控

troubleshoot之:GC调优到底是什么

程序那些事

性能分析 jvm调优 GC调优

深挖502和504

书旅

nginx 服务器 HTTP 状态码

SpringCloud(Netflix)-技术专题-微服务入门介绍

洛神灬殇

音画同步体验有多好,来看看即构的自研互动白板就知道啦

ZEGO即构

在线教育 SVG canvas

国内首家 ABM 营销技术服务商火眼云完成5000万元A轮融资

TE产服

Linux后台开发高频题目总结

我是程序员小贱

直播技术的背后--RTMP协议

soolaugust

直播 RTMP

全球移动服务生态的暗涌与新机

脑极体

计算机网络基础(十九)---传输层-TCP的拥塞控制

书旅

TCP 协议栈 网络层

老张「原创小说」

瓜藤老祖

个人成长

「C++ 篇」答应我,别再 if else 走天下了可以吗

小林coding

c++ 编程 设计模式 编程习惯 编程风格

2020大厂web前端面试常见问题总结

华为云开发者联盟

CSS 面试 响应式 大前端 浏览器

为什么直播系统不用RTP协议

soolaugust

WebRTC 直播 RTMP rtp

HTTP协议-基础

Jaykey

大前端 HTTP

对待一件事,从不喜欢再到喜欢,转变需要多大

良知犹存

程序人生

为什么你做的 Excel 表不好用?

Tony Wu

效率工具 产品设计 Excel ER图

第二次推荐笔记:wolai

申屠鹏会

webbench源码阅读

我是程序员小贱

修改系统时间,导致 sem_timedwait 一直阻塞的问题解决和分析

小林coding

Linux 编程 问题处理

精美前端UI(VUE)界面,ASP.NET通用工作流开发分享

雯雯写代码

工作流 可视化

Newbe.Claptrap 框架如何实现在多种框架之上运行?

newbe36524

Docker 云计算 微服务 .net core ASP.NET Core

gRPC在Spring Cloud中的应用

xcbeyond

Java gRPC SpringCloud

为什么使用Portainer,而不是Docker CLI来管理Docker环境

xcbeyond

Docker 运维 Portainer

Web 全栈开发利器: 强大的在线 Cloud IDE

华为云开发者联盟

Web python3.x 全栈 编码 CloudIDE

字节跳动想招什么样的技术人?

池建强

跟我一起基于 Karma 搭建一个测试环境 (中)

Jack Q

大前端 Karma 测试框架搭建

从根上学习Git

书旅

git 工具 版本控制 版本管理工具

优化教育体验 智微智能高品质录播系统

InfoQ_967a83c6d0d7

学习总结 -- Week 10

吴炳华

Kubernetes 1.5 新功能解析之集群联盟_文化 & 方法_才云科技_InfoQ精选文章