聊聊k8s服务发现的优缺点

本文主要研究一下使用k8s服务发现的优缺点

spring cloud vs kubernetes

spring-cloud-kubernetes.jpg

这里有张spring cloud与kubernetes的对比,如果将微服务部署到kubernetes上面,二者有不少功能是重复的,可否精简。
这里主要是讲述一下如果不使用独立的服务发现,而是使用k8s的服务发现的优缺点

k8s服务发现原理

service与pod

service通过selector将标签符合指定条件的pod关联在一起

endpoints

endpoints用来记录一个service对应的pod的访问地址,存储在etcd中

endpoints controller

当用户创建service和对应的pod时,Endpoints Controller会监控pod的状态变化,当pod处于running和就绪状态时,Endpoints Controller会生成Endpoints对象

kube-proxy

运行在每个节点上的kube-proxy会监控service和endpoints的更新,并调用其load balancer模块在主机上刷新路由转发规则。当pod的liveness probe或者readiness probe检测不通过,pod处于非准备就绪状态时,kube-proxy会删除对应的转发规则。kube-proxy的load balancer模块实现有userspace、iptables、IPVS三种方式,iptables的方式在大规模(比如节点大于5000)场景下会有性能问题,一般使用IPVS方式。IPVS模式是基于LVS的负载均衡,即基于netfilter的方式,使用的是NAT模式,默认采用的是round-robin(rr)的负载均衡算法。

ClusterIP

service默认的type为ClusterIP,一旦service和endpoints场景,IPVS模式的kube-proxy会:

  • 确保一块dummp网卡(kube-ipvs0)存在,将service的访问ip绑定在dummy网卡上,让内核认为是本机ip,从而进入netfilter的INPUT链
  • 通过socket调用,创建IPVS的virtual server和real server,分别对应k8s的service和endpoints

ipvs-nat.png

示例

# kubectl describe svc nginx-serviceName: nginx-service    Type: ClusterIP    IP:            10.102.128.4    Port: http    3080/TCP    Endpoints:     10.244.0.235:8080,10.244.1.237:8080    Session Affinity: None    ...    # ip addr    
73: kube-ipvs0: <BROADCAST, NOARP> mtu 1500 qdisc noop state DOWN qlen 1000        link/ether 1a:ce:f5:5f:c1:4d brd ff:ff:ff:ff:ff:ff        inet 10.102.128.4/32 scope global kube-ipvs0          valid lft forever preferred lft forever    ...    # ipvsadm -ln    
IP Virtual Server version 1.2.1 (size=4096)    
Prot LocalAddress:Port Scheduler Flags      -> RemoteAddress:Port          Forward Weight ActiveConn InActConn    TCP  10.102.128.4:3080 rr      -> 10.244.0.235:8080           Masq    1     0         0      -> 10.244.1.237:8080           Masq    1     0         0

来源于<<Kubernetes 网络权威指南:基础、原理与实践>>

整体链路

假设serviceA的pod0在node0上,serviceB有3个pod,pod1在node1上,pod2在node2,pod3在node3上,若此时serviceA对serviceB发起请求,其链路如下
pod0 (node0) -> DNS 解析获取 serviceB ClusterIP -> 根据iptables/ipvs规则 -> 路由至 serviceB 后端的pod1或者pod2或者pod3

如图ClusterIp.png

这里有两个链路:
1是client访问的时候解析到clusterip,走底层网络的IPVS规则路由到server端的某个pod
2是每个node的kube-proxy监听service和endpoints的更新然后更新对应的IPVS路由规则(virtual server和real server)

优缺点

优点

不用自己再部署一套服务发现,直接复用k8s的服务发现,省事

缺点

学习成本大

使用k8s的服务发现其实是将服务发现的中间件下沉到了基础设施(使用了IPVS或者iptables模式),需要有人对此原理比较精通,不然出问题了需要忙活半天

东西流量治理比较困难

k8s的服务发现本质是类似服务端的负载均衡,默认是rr轮询的方式(其他的支持lc最小连接、dh目标地址哈希、sh源地址哈希、sed最短时延),如果需要定制的比如加权,比如根据服务上线时间动态权重等,需要重新定制开发;再比如要进行灰度路由就需要依赖service mesh之类的

追踪困难

由于是服务端的负载均衡,如果没有加上分布式追踪,其实从调用方角度看很难知道最后调用了哪个实例,难度有点大

相关生态缺失或复杂

如果要使用全面的服务治理能力,需要套上service mesh,技术栈的复杂度更大,需要有这方面的人才,如果没有则相当于缺乏了服务治理;相较于nacos这类专业的服务发现的中间件来讲,它会配套ui界面,都是现成的,如果使用k8s的服务发现,相关的生态是缺失的

小结

使用K8S的服务发现看是挺好的,可以少维护一个服务发现的中间件,但是实际使用起来并不是那么美好。

doc

  • SpringCloud和Kubernetes在微服务层面对比
  • 虚拟 IP 和服务代理
  • 服务(Service)
  • Service 与 Pod 的 DNS
  • istio流量路由小试牛刀
  • Nacos 在云原生架构下的演进

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/780242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC注解及使用规则

文章目录 前言一、SpringMVC注解是什么&#xff1f;二、使用步骤1.注解使用2创建JSP3 SpringMVC视图1. 逻辑视图&#xff08;Logical View&#xff09;2. 物理视图&#xff08;Physical View&#xff09;区别和关系 4 SpringMVC注解总结 总结 前言 提示&#xff1a;这里可以添…

建立一个简单的网页音乐盒模型效果#css#h5

“音乐盒”可以看做一个大盒子&#xff0c;用<div>标签进行定义。大盒子的上面为文本内容&#xff0c;可以在<div>标签中嵌套<h2>和<p>标签来实现&#xff1b;大盒子下面为图像&#xff0c;通过在<div>标签中嵌套<img/>标签来实现。 样式…

[Python人工智能] 四十五.命名实体识别 (6)利用keras构建CNN-BiLSTM-ATT-CRF实体识别模型(注意力问题探讨)

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前文讲解融合Bert的实体识别研究,使用bert4keras和kears包来构建Bert+BiLSTM-CRF模型。这篇文章将详细结合如何利用keras和tensorflow构建基于注意力机制的CNN-BiLSTM-ATT-CRF模型,并实现中文实体识别…

notepad++里安装32位和64位的16进制编辑器Hex-Editor

这个16进制编辑器确实是个好东西&#xff0c;平时工作种会经常用到&#xff0c; 这是hex-editor的官网。这个里边只能下载32位的(64位的看最下边)&#xff0c;选一个合适的版本&#xff0c;我当时选的是最新的版本 https://sourceforge.net/projects/npp-plugins/files/Hex%20E…

ARP协议定义及工作原理

ARP的定义 地址解析协议(Address Resolution Protocol&#xff0c;ARP)&#xff1a;ARP协议可以将IPv4地址(一种逻辑地址)转换为各种网络所需的硬件地址(一种物理地址)。换句话说&#xff0c;所谓的地址解析的目标就是发现逻辑地址与物理地址的映射关系。 ARP仅用于IPv4协议&a…

Centos服务器Open Gauss 部署

近期很多的项目由于信创要求使用一些国产的数据库&#xff0c;比如OpenGauss。OpenGuass是华为高斯DB的开源版&#xff0c;内核还是PostgreSQL&#xff0c;商业版是收费的。这里记录一下是如何安装部署 的。 官方中文文档 官方下载地址 部署要求 操作系统要求 ARM&#xff…

拆分巨石:将MVPS和MVAS应用于遗留应用程序——可持续架构(六)

前言 MVP 和 MVA 的概念不仅适用于新应用程序&#xff1b;它们提供了一种新颖的方式来审视对遗留系统的范围变更&#xff0c;以防止过快地承担过多的变化 - 参见图1。MVA 可以帮助组织评估和更新其技术标准&#xff0c;通过展示新技术如何真正对支持 MVP 至关重要。创建 MVA 可…

绿联 安装PDF工具

这是一个强大的本地托管的基于 Web 的 PDF 操作工具&#xff0c;使用 docker&#xff0c;允许您对 PDF 文件执行各种操作&#xff0c;例如拆分、合并、转换、重组、添加图像、旋转、压缩等。这个本地托管的 Web 应用程序最初是 100% ChatGPT 制作的应用程序&#xff0c;现已发展…

BaseDao封装增删改查

文章目录 什么是BaseDao操作代码增删改查询单个数据查询多个数据 总结 什么是BaseDao BaseDao是&#xff1a; 数据库里负责增加&#xff0c;删除&#xff0c;修改&#xff0c;查询 具体来说是一种接口代码,公共方法的接口类。 在dao层新建basedao,其他dao层接口继承basedao 相…

代码随想录算法训练营第二十三天(二叉树9)|669. 修剪二叉搜索树、108. 将有序数组转换为二叉搜索树、538. 把二叉搜索树转换为累加树(JAVA)

文章目录 669. 修剪二叉搜索树解题思路源码 108. 将有序数组转换为二叉搜索树解题思路源码 538. 把二叉搜索树转换为累加树解题思路源码 669. 修剪二叉搜索树 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使…

【医学嵌入模型】中文医疗文本处理大模型 PCL-MedBERT

中文医疗文本处理大模型 PCL-MedBERT 提出背景对ELECTRA限制的深入分析eHealth的创新方法实体识别关系抽取 总结 最近再做医学项目&#xff0c;需要从文本中抽取医学概念和关系&#xff0c;通用模型的抽取效果还可以。 但还想找医学嵌入模型&#xff0c;能够更准确地从文本中识…

常见的Nginx+Redis+MQ+DB架构设计

三高&#xff0c;复杂的架构 SQRS CAP 缓存&#xff0c;限流 【Redis&#xff0c;缓存】 cache-aside 缓存cache&#xff1a;数据源的副本 store 1. Read/Write Through Pattern 读写穿透模式 redis&#xff1a;放当前在线用户&#xff0c;热点数据

第十四届蓝桥杯第十题:蜗牛分享

问题描述 输入格式 输出格式 输出共一行&#xff0c;一个浮点数表示答案&#xff08;四舍五入保留两位小数&#xff09;。 样例输入 3 1 10 11 1 1 2 1样例输出 4.20样例说明 蜗牛路线&#xff1a;(0,0)→(1,0)→(1,1)→(10,1)→(10,0)→(11,0)(0,0)→(1,0)→(1,1)→(10,1…

【C语言】结构体详解 (二) 内存函数、结构体传参

目录 1、 结构体的内存对齐 1.1、对齐规则 1.2、练习1、练习2&#xff08;演示对齐规则1、2、3、4&#xff09; 2、为什么存在内存对齐 2.1、平台原因&#xff08;移植原因&#xff09; 2.2、性能原因 2.3、那么如何即满足对齐&#xff0c;又要节省空间呢&#xff1f; …

element-ui inputNumber 组件源码分享

今日简单分享 inputNumber 组件的实现原理&#xff0c;主要从以下四个方面来分享&#xff1a; 1、inputNumber 组件的页面结构 2、inputNumber 组件的属性 3、inputNumber 组件的事件 4、inputNumber 组件的方法 一、inputNumber 组件的页面结构。 二、inputNumber 组件的…

在计算成像中集成物理和学习模型的即插即用方法

即插即用就是把算法的近端算子换成去噪器 摘要 即插即用先验(PnP)是通过物理模型和学习模型的集成来解决计算成像问题的最广泛使用的框架之一。PnP利用高保真物理传感器模型和强大的机器学习方法对数据进行先验建模&#xff0c;以提供最先进的重建算法。PnP算法在最小化数据保…

零基础教程:R语言lavaan结构方程模型(SEM)

查看原文>>>最新基于R语言lavaan结构方程模型&#xff08;SEM&#xff09;实践技术应用 基于R语言lavaan程序包&#xff0c;通过理论讲解和实际操作相结合的方式&#xff0c;由浅入深地系统介绍结构方程模型的建立、拟合、评估、筛选和结果展示的全过程。我们筛选大量…

07-工作流设计:如何设计合理的多人开发模式?

一个企业级项目是由多人合作完成的&#xff0c;不同开发者在本地开发完代码之后&#xff0c;可能提交到同一个代码仓库&#xff0c;同一个开发者也可能同时开发几个功能特性。这种多人合作开发、多功能并行开发的特性如果处理不好&#xff0c;就会带来诸如丢失代码、合错代码、…

echarts 旭日图 层级嵌套

基础的可以直接参考官网进行配置。 Echarts旭日图的特点如下&#xff1a; 1 层次结构展示&#xff1a;旭日图适用于展示层次结构数据&#xff0c;通过不同的扇形区域来表示不同层次的数据。每个扇形区域的大小和位置表示了数据的大小和层次关系。 2 渐进式呈现&#xff1a;旭…

RelayAttention:让大型语言模型更高效地处理长提示符

一、前言 虽然大型语言模型 (LLM) 近年来取得了非常显著的进展&#xff0c;也在各种自然语言处理任务中展现出强大的能力。然而&#xff0c;LLM 的在实际的应用落地层面也面临着一些实际挑战&#xff0c;其中之一就是效率和成本问题&#xff0c;导致了在垂直行业实际落地的应用…