2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

评论

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

【论文精读】| 综述:模糊测试的艺术、科学和工程(上)

云起无垠

在本地运行 LLMs 的 6 种方法

SEAL安全

人工智能 开源 LLMs

云平台纳管是什么意思?用什么工具比较好?

行云管家

云计算 云服务 云平台 云管平台 云管理

致 Tapdata 全体用户:2023 年,我们把更多精力集中到了产品能力和稳定性上

tapdata

数据库

一起学Elasticsearch系列-Pipeline

Java随想录

Java 设计模式

强大好用的shell:shell的工作原理

小魏写代码

漏洞处置:HTTP/2 快速重置攻击对 F5 NGINX 的影响

NGINX开源社区

cpu DOS攻击 nginx 开源版 NGINX PLUS HTTP/2

华为云峰会2024,GaussDB扬帆出海,给世界一个更优选择

华为云开发者联盟

数据库 后端 华为云 华为云GaussDB 华为云开发者联盟

测试开发名企定向培养训练营,手把手带你提升核心竞争力!

测试人

软件测试 自动化测试 测试开发

新手程序员必学10大技能

敏捷开发

#编程 #程序员 #数据结构

半小时到秒级,京东零售定时任务优化怎么做的?

京东零售技术

JavaScript MySQL 后端

建木流水线SaaS版已上线,公测免费体验中!!!

都广科技

DevOps DevOps工具

住宅IP代理有什么优势?住宅ip如何购买?

摘星星的猫

超越传统:人工智能赋能的自动化测试新前景

测试人

人工智能 软件测试 测试开发

跨端轻量JavaScript引擎的实现与探索

京东零售技术

JavaScript

访问串是什么?有什么作用?

行云管家

运维 IT运维 访问串

定制开发一款家政小程序,应知应会

天津汇柏科技有限公司

小程序 小程序开发 定制软件开发 app定制开发 软件开发定制

面试官:Redis如何保证高可用?

王磊

Java 面试

用“AI产业顾问”写企业分析报告,五天工作10分钟搞定!

飞桨PaddlePaddle

百度 BAIDU 百度飞桨 文心大模型 文心大模型4.0

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