【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

  • 2020-05-18
  • 本文字数:1876 字

    阅读完需:约 6 分钟

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

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


微服务和容器的运作方式也适合当下的 CI/CD 工作流程,即无需关闭整个系统进行更新,因为可以分别更新每个微服务(容器)。但是,这会使容器或 pod 的生命周期缩短,其 IP 地址会发生变化。


在应用程序及其微服务的生命周期中,其中某些部分可能会出现错误,无法运行,进而导致意外状况,IP 地址也很有可能发生变化。此时,服务网格可以帮助应用程序重新路由、提升安全性。

动态 IP 分配

在我们了解如何管理服务以及如何高效建立服务发现之前,我们必须了解服务发现所面临的首要挑战:IP 分配问题。具体而言,Kubernetes 将 IP 地址动态分配给 Pod 和服务的方式。


我们固然可以为单个 Pod 和服务定义 IP 地址,但这样做会限制 Kubernetes 环境的可伸缩性。在默认情况下,环境在每次重新启动集群、pod 或服务时,任意资源都会获得新的 IP 地址,因此我们只能对服务使用唯一的名称。


为了克服这一问题,你可以使用两种方法。其一,查看服务的环境变量。与 Docker 允许容器相互通信的方式类似,Kubernetes 允许你扫描注入到容器中的环境变量。


如果你有在多个端口上运行的服务,你可以运行 kubectl exec memcached-rm58b env 命令,然后对服务名称进行快速 grep 操作,之后将会显示分配给该服务的可用 IP 地址和端口。不过,这并不是管理服务发现的最有效方法。因为,这种方法中依赖的服务必须在 pod 启动之前就存在,不然是不会出现在环境变量中的。

Kube-DNS 救场

长远来看,以下阐述的第二种方法通常被认为效率更高,这得益于 Kubernetes 的插件 Kube-DNS。我们先来了解什么是 Kube-DNS。顾名思义,Kube-DNS 是充当内部 DNS 解析器的附加组件。它是一个数据库,其中包含用于查找的键值对。键是 Kubernetes 服务的名称,值是服务所运行的 IP 地址。


Kube-DNS 仅依赖命名空间,无需以其他方式配置 Pod 和服务,甚至无需修改集群、Pod 和服务的配置文件即可进行基于 DNS 的服务发现。


Kube-DNS 同时也支持高级 DNS 查询以及 DNS 策略。例如,你可以对每个 Pod 进行配置,将其配置为遵循与其运行的节点不同的 DNS 属性。这意味着你可以使用私有 DNS 空间来自定义 pod 之间如何进行通信。


这一方法还能更进一步,在每个 pod 的基础上配置 DNS 策略。你需要做的就是将节点 DNS 策略设置为“None”,然后手动配置每个 Pod 以满足你的特定需求。

Label 和 Selectors

正如前文所述,你可以使用参数来进一步影响 Pod 之间和服务之间的通信方式。Kubernetes 服务发现支持对高级控件使用 label 和 selector,特别是在管理复杂集群时,label 尤为方便。你可以将 label 分配给组件和容器,以便于识别。


Kubernetes 处理 label 和 selector 的方式使得这些参数更易于使用。本质上,它们时添加到元数据中的简单键值参数。也就是说,它们实际上并不会影响系统或环境中的其他部分,你可以在复杂的环境中跨 pod 和服务(甚至跨节点)自由使用 label 和 selector。


接下来,我们要使用副本控制器。同样,顾名思义,它是一个可以使 Kubernetes 的系统具有高可用性和可伸缩性的工具。你可以使用副本控制器来创建和管理 pod 副本并且维护高可用。同时,你也可以轻松地一次性删除 pod 及其副本。

Service Mesh 和高度弹性伸缩系统

要完成设置,我们需要使用与现有基础架构和平台相关的高级服务发现方法。AWS Cloud Map 是一个十分有意思的例子。AWS 环境中的应用程序资源可以拥有唯一的名称,并且那些资源会被 Cloud Map 自动映射。它们注册完成后,服务会自动变为可发现的,并且在启动 Pod 或服务后立即进行注册过程。


现在有一个新的方法,通过使用服务网格让管理微服务的复杂阵列变得容易。服务网格标准化了服务和 Pod 的通信方式。如果你要创建一个高可用的系统,那么在环境中使用服务网格来维护 Pod 的可见性是一个完美的解决方案。


但是,如果你的环境在 AWS 上,则可以以 AWS App Mesh 的形式利用其服务网格功能。它会自动处理所有事情,包括流量路由、流量均衡、调用以及使用 API 调用的 circuit breaking。所有微服务都能够启用 API Mesh,以简化管理。由于此工具是 Amazon 生态的一部分,因此它会自动和 Amazon EKS、IAM 等其他工具一起使用。


Kubernetes 服务发现使得容器平台具有强大功能以及灵活性,服务网格等方法无疑通过标准化使 Kubernetes 服务发现更加强大。只要服务在运行,就可以使正确的 API 调用在每个 Pod 之前来回传递数据而不会中断。


2020-05-18 18:07546

评论

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

长安链源码分析之交易过程分析(3)

web技术分享| 虚拟 tree

anyRTC开发者

Vue 前端 Web tree antDesign vue

【译】深究 Go CPU profiler

非晓为骁

Go 翻译 pprof

HashMap源码分析(七)

知识浅谈

hashmap 10月月更

在线问题反馈模块实战(二十):实现文件批量导出到zip压缩包中功能

bug菌

springboot 项目实战 10月月更

从输入URL到渲染的过程中到底发生了什么?

loveX001

JavaScript

CLIP-as-service 0.8.0 版本发布:新增支持大型 ONNX 模型文件

Jina AI

开源 工程师 开发工具

CLIP-as-service 0.8.0 版本发布:新增支持大型 ONNX 模型文件

Jina AI

开源 工程师 开发工具 开源软件

长安链源码分析之交易过程分析(5)

Opencv 图像处理:图像基础操作与灰度转化

timerring

OpenCV 计算机视觉 10月月更

Redis数据结构(一)-Redis的数据存储及String类型的实现

京东科技开发者

二进制 哈希算法 数据存储 结构化 Redis 数据结构

Java中的final关键字详解😁

共饮一杯无

Java final 10月月更

关于JavaScript的本地存储方案

CoderBin

JavaScript 前端 LocalStorage 本地存储 10月月更

1024 分享|如何打造围绕开源理念的团队工程师文化

Jina AI

人工智能 开源 1024 1024我在现场

长安链源码分析之交易过程分析(4)

一次 Redis 事务使用不当引发的生产事故

悟空聊架构

redis 事务 悟空聊架构 10月月更 @Transactional

1024,我们干了点儿大事 | StarRocks 2.4 新版本特性介绍

StarRocks

数据库

长安链源码分析之交易过程分析(6)

百度前端高频react面试题总结

beifeng1996

React

长安链源码分析之交易过程分析(2)

房产|9月全国70城房价出炉!快来看看你的城市房价变化

前嗅大数据

数据 房地产 房产

社招前端必会面试题(附答案)

loveX001

JavaScript

长安链源码分析之交易过程分析(1)

在线问题反馈模块实战(二十一):完结篇

bug菌

springboot 项目实战 10月月更

从输入URL到渲染的过程中到底发生了什么?

loveX001

JavaScript

一天梳理完React所有面试考察知识点

beifeng1996

React

在线问题反馈模块实战(十九):实现数据批量导出到excel文件中功能

bug菌

springboot 项目实战 10月月更

快递单信息抽取【二】基于ERNIE1.0至ErnieGram + CRF预训练模型

汀丶人工智能

nlp 算法、

一道React面试题把我整懵了

beifeng1996

React

Opencv 图像处理:图像通道、直方图与色彩空间

timerring

OpenCV 图像处理 10月月更

房产|1-9月份全国房地产开发投资下降8.0%

前嗅大数据

数据 房地产业 房地产

Kubernetes服务发现入门:如何高效管理服务?_文化 & 方法_Rancher_InfoQ精选文章