写点什么

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:07809

评论

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

Golang+Vue轻松构建Web应用

golang Vue

一步步搞懂MySQL元数据锁(MDL)

Java-fenn

Java

武汉Java培训哪家靠谱

小谷哥

北京UI设计学校怎么选?

小谷哥

音视频开发成长之路与音视频知识点总结

C++后台开发

WebRTC ffmpeg 音视频开发 流媒体服务器开发 嵌入式音视频开发

什么是RTMP 和 RTSP?它们之间有什么区别?

wljslmz

音视频 流媒体 RTMP RTSP 9月月更

Cloudflare 放弃 Nginx,使用内部 Rust 编写的 Pingora

Java-fenn

Java

Flink 引擎

孤衫

大数据 flink 9月月更

深开鸿荣获“2022 OSCAR尖峰开源技术创新”奖

极客天地

Redux(mvc、flux、react-redux)

Java-fenn

Java

低代码平台选型6大能力:品牌/产品/技术/服务/安全/价值

优秀

低代码平台

哪些人适合在Java培训机构学习

小谷哥

哪款去水印工具好用?6款热门在线去水印工具对比评测

少油少糖八分饱

图片去水印 去水印 水印 水印消除

「云计算」AI如何改变云技术?

Finovy Cloud

实时云渲染 GPU算力 GPU渲染 云渲染农场

量子算法框架 Cirq 与 NISQ 新时代

启科量子开发者官方号

量子计算

“亿”论AI|基于中心化元数据及配置驱动的eBay AI特征工程管理平台

Java-fenn

Java

B站基于Clickhouse的下一代日志体系建设实践

Java-fenn

Java

公排跳排互助模式智能合约dapp系统开发(matic马蹄链)

开发微hkkf5566

关于 NFTScan 支持以太坊合并(The Merge)的公告

NFT Research

以太坊 PoS

状态监测与故障智能诊断技术在能源动力机械内燃机的应用

PreMaint

设备预测性维护 设备状态监测 内燃机状态监测 内燃机故障诊断 设备故障诊断

美图SRE:一次线上大事故,我悟出了故障治理的3步9招

TakinTalks稳定性社区

故障 SRE实践

MySQL 及 jdbc 问题汇总

Java-fenn

Java

MySQL 及 jdbc 问题汇总

Java-fenn

Java

分布式云的扩展自动化需要考虑什么

Java-fenn

Java

UI设计培训主要学习内容是哪些

小谷哥

大数据体系和SQL

孤衫

大数据 后端 sql 9月月更

flink-cdc同步mysql数据到hive

Java-fenn

Java

《广元链介绍及场景应用分享》BSN直播精华回顾

BSN研习社

区块链

上海大数据培训机构哪家好?

小谷哥

阿里P6到P9的技术栈有哪些?Java程序员该如何准备学习?

收到请回复

Java 云计算 开源 架构 编程语言

2022年,移动应用行业有哪些值得关注的技术趋势?

最新动态

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