k8s学习--sessionAffinity会话保持(又称会话粘滞)详细解释与应用

文章目录

  • sessionAffinity简介
    • 什么是sessionAffinity
    • 模式介绍
    • 应用场景
    • 工作原理
    • 优势
  • 应用
    • 环境
    • 步骤
      • 2. 给服务打补丁,增加会话粘滞
    • 设置回sessionAffinity为None


sessionAffinity简介

什么是sessionAffinity

简单理解
确保把来自同一客户的一个完整会话的请求转发至后台同一台服务器进行处理。


详细解释
在Kubernetes中,sessionAffinity是指Service的一种设置,用于控制外部流量如何在后端Pod之间分发。具体来说,sessionAffinity可以配置为"None"、“ClientIP"或者"ClientIP”。这些设置决定了负载均衡器如何将来自相同客户端的请求路由到后端的Pods上。


模式介绍

None
这是sessionAffinity的默认设置。当设置为"None"时,负载均衡器会根据负载均衡算法(如轮询、最少连接数等)将每个新的请求独立地分发到后端的Pods上,与之前的请求无关。

ClientIP
当设置为"ClientIP"时,负载均衡器会根据客户端的IP地址来将来自同一个客户端的请求路由到同一个后端的Pod上。这样可以确保来自同一个客户端的多次请求都被发送到同一个后端Pod上,用于保持会话一致性。

ClientIP模式的会话粘滞
这种方式通常用于需要保持会话状态的应用程序,如基于HTTP的应用程序,以确保用户在整个会话期间都能被路由到同一个后端Pod上。


应用场景

简单理解
举个大家每天都会遇到的例子,大家在淘宝或者京东上购物时,从完成用户身份认证到浏览店铺,选择心仪商品加入购物车,一直到最后下单完成支付,需要经过很多次和服务器的交互过程才能完成整个交易。由于这几次交互过程从顺序上和逻辑上是密切相关的,服务器在进行这些交互过程的某一个交互步骤时需要一个上下文(Context),即上一次交互过程的输出,因此要求这些相关的交互过程都由一台服务器完成。
在这种情况下,假设负载均衡器仍然把这些相关交互session分散到不同的服务器实例上,就会带来很糟糕的用户体验,比如客户在浏览器上每点击一次,都会弹出登录页面。或者即使用户输入了正确的验证码,却仍然提示验证码错误。由于服务器处理实例不一样,也有可能造成客户放入购物车的物品丢失。


详细解释

有状态应用程序
对于一些有状态的应用程序,比如基于HTTP协议的Web应用或者需要保持会话状态的应用,使用ClientIP模式的sessionAffinity可以确保来自同一个客户端的请求都被路由到同一个后端Pod上,从而保持会话的一致性。这对于需要在多次请求之间共享状态或者会话信息的应用程序是非常重要的。

避免会话中断
在一些情况下,如果同一个用户的请求被路由到了不同的后端Pod上,可能会导致会话中断或者状态丢失。通过使用sessionAffinity来保持会话粘滞,可以避免这种情况的发生,确保用户的体验和应用的正确性。

缓存一致性
在一些需要使用缓存的应用场景下,比如使用了本地缓存的应用或者分布式缓存系统,通过将来自同一个客户端的请求路由到同一个后端Pod上,可以提高缓存命中率,并确保缓存数据的一致性。

有序处理
对于一些需要按照顺序处理请求的应用场景,比如消息队列、任务调度等,使用sessionAffinity可以确保来自同一个客户端的请求按照顺序被发送到同一个后端Pod上进行处理,从而保证处理的顺序性。


工作原理

创建 Service
当创建一个类型为 LoadBalancer 的 Service 时,Kubernetes 控制平面会请求云服务提供商创建一个外部负载均衡器。

负载均衡器配置
外部负载均衡器被配置为监听指定的端口(或由 Service 定义的端口)。
负载均衡器将流量转发到 Kubernetes 集群内部的所有健康 Pods,这些 Pods 通过 Endpoints 对象与 Service 关联。

流量分发
当外部用户或系统访问负载均衡器的公共 IP 地址和端口时,负载均衡器根据预定义的策略(如轮询或最少连接)将流量分发到后端的 Pods。
这种分发机制确保了负载的平衡分配,并有助于处理高流量。

健康检查
大多数负载均衡器会进行健康检查,以确保流量只被转发到健康的 Pods。
如果一个 Pod 因故障停止服务,负载均衡器将自动停止向该 Pod 发送流量,直到它再次被标记为健康。

动态更新
当新的 Pods 被创建或现有的 Pods 被销毁时,Service 的 Endpoints 列表会动态更新,而负载均衡器也将相应地更新其转发规则。


优势

易于使用
用户只需声明 Service 类型为 LoadBalancer,并不需要进行复杂的配置。

自动化
负载均衡器的创建、配置和更新都是自动进行的,这减少了维护负担。

高可用性
负载均衡器提供了故障转移能力,增强了服务的可靠性。

应用

环境

Ip主机名cpu内存硬盘
192.168.10.11master012cpu双核4G100G
192.168.10.12worker012cpu双核4G100G
192.168.10.13worker022cpu双核4G100G

已部署k8s-1.27

步骤

1.创建测试用的deployment,service
这里使用yaml文件创建

vim sessionAffinity.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-server1
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
     metadata:
       labels:
         app: nginx
     spec:
       containers:
       - name: c1
         image: nginx:1.20
         imagePullPolicy: IfNotPresent
         ports:
         - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  type: ClusterIP
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  selector:
    app: nginx

创建deployment和service并查看

kubectl apply -f sessionAffinity.yaml
kubectl get pods

在这里插入图片描述

进入pod,创建网页web1(根据name进入)

kubectl exec -it nginx-server1-855bbbf689-lmw92 -- bash
root@nginx-server1-855bbbf689-lmw92:/# echo web1 > /usr/share/nginx/html/index.html
root@nginx-server1-855bbbf689-lmw92:/# exit

进入pod,创建网页web2

kubectl exec -it nginx-server1-855bbbf689-xczvl -- bash
root@nginx-server1-855bbbf689-xczvl:/# echo web2 > /usr/share/nginx/html/index.html
root@nginx-server1-855bbbf689-xczvl:/# exit

查看服务

kubectl get svc

在这里插入图片描述

测试默认的负载均衡

curl 10.108.198.133

正常
在这里插入图片描述

2. 给服务打补丁,增加会话粘滞

设置为ClientIP模式

kubectl patch svc nginx-svc -p '{"spec":{"sessionAffinity":"ClientIP"}}'

测试

curl 10.108.198.133

效果实现
一系列相关联的访问请求会分配到一台服务器上。
在这里插入图片描述

设置回sessionAffinity为None

kubectl patch svc nginx-svc -p '{"spec":{"sessionAffinity":"None"}}'

测试

curl 10.108.198.133

在这里插入图片描述
成功恢复轮询效果

实验完成

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

喜讯丨泰迪智能科技实力中标“健康大数据与人工智能实验室建设”项目

泰迪智能科技以健康数据分析与应用为主题的实验中心,为学校大健康产业大数据与人工智能应用人才培养提供载体,并基于培养中心根据学生专业的不同,提供不同的健康大数据学习资源,实现健康大数据技术和数据分析应用能力培养普遍提升…

深入理解计算机系统 家庭作业5.13

A:关键路径在xmm0那条路,书中几条关键路径全部是xmm0,有xmm1时,xmm1也是 B:3 C:1 D:按书中的定义: 关键路径才是下界!按书上的方法根据 图5-12 算出关键路径的CPE即可. 非关键路径把它视为黑盒子.因为是乱序和超标量的,没办法搞清楚处理器具体怎么处理这些指令.

c# 开发的wpf程序闪退,无法用try catch捕获异常

之前开发的一个程序是c#wpf开发,基于.net framework 4.6.1的,一切都是正常的,但是在我重新装了win11后在程序logo出现后直接闪退,报错 返回值为 -1073740791 (0xc0000409),而且定位到代码时发现是, publi…

LabVIEW2017破解安装教程

LabVIEW2017破解安装教程: 1、新版LabVIEW2017分为32位和64位两个平台,多种语言版本(需要LabVIEW2017中文版的朋友请选择WinChn版本),大家选择自行选择符合系统的版本下载并解压 2、本次安装以Win 7 64位系统为例,运行“2017LV-64…

accelerate 笔记:梯度同步的时间效率

1 介绍 PyTorch 的分布式模块通过在系统中所有GPU之间进行来回通信来操作。 这种通信需要时间,并且确保所有进程了解彼此的状态在使用ddp模块时会在特定的触发点发生 这些触发点被添加到PyTorch模型中,特别是它们的 forward() 和 backward() 方法中当通…

宝德电脑文件删除了怎么恢复?提供详细恢复指南

在数字化时代,电脑已成为我们工作、学习和生活中不可或缺的设备。然而,在使用宝德电脑或其他任何品牌的电脑时,我们都有可能遭遇文件误删的尴尬情况。一旦重要文件丢失,不仅会影响我们的工作效率,还可能造成无法挽回的…

打开C# 大门:Hallo, World!

C# 介绍 C#(C Sharp)是一种面向对象的编程语言,由微软公司开发。它是 .NET Framework 的一部分,用于构建 Windows 应用程序、Web 应用程序、移动应用程序等。C# 语言的设计目标是简单、现代化、易于学习和使用。在本文中&#xf…

26、matlab多项式曲线拟合:polyfit ()函数

1、polyfit 多项式曲线拟合 语法 语法:p polyfit(x,y,n) 返回次数为 n 的多项式 p(x) 的系数,该阶数是 y 中数据的最佳拟合(基于最小二乘指标)。 语法:[p,S] polyfit(x,y,n) 还返回一个结构体 S 语法:[…

铸铁机械5G智能工厂工业物联数字孪生平台,推进制造业数字化转型

铸铁机械5G智能工厂工业物联数字孪生平台,推进制造业数字化转型。工业物联数字孪生平台以5G技术为基础,通过工业物联网连接铸铁机械生产过程中的各个环节,运用数字孪生技术构建虚拟工厂,实现生产过程的实时监测、模拟与优化&#…

花费-效益分析筛选肿瘤标记物最佳组合

基于花费-效益分析的肿瘤标记物最佳组合筛选 本文的想法来自于一篇发表的论文[1]。论文作者有感于临床上存在的不恰当的肿瘤标记物的检测,搜集了各种肿瘤标记物(TM)的价格、检测结果和最终诊断等数据,使用逻辑回归模型分别计算出…

2024-06-05 Android app jni里面c语言函数申请的局部变量数组过大会导致程序崩溃的问题分析

一、下面是一个app jni里面一个函数,函数里面定义一个数组,实际运行的时候发现数组过大的时候会导致app崩溃。 JNIEXPORT jint JNICALL JNI_FUNCTION(native_1getcapture_1data)(JNIEnv *env, jobject obj,jbyteArray des_data,jbyteArray src_data,jin…

视频生成框架EasyAnimate正式开源!

近期,Sora模型的热度持续上涨,社区中涌现了一些类Sora的开源项目,这些项目均基于Diffusion Transformer结构,使用Transformer结构取代了UNet作为扩散模型的基线,旨在生成更长、更高分辨率、且效果更好的视频。EasyAnim…

组合和为N的数量-第13届蓝桥杯选拔赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第78讲。 组合和为N的数量&…

直播用什么领夹麦比较好?轻揭秘无线领夹麦克风哪个品牌音质最好

​在当下自媒体风起云涌的时代,领夹式无线麦克风以其卓越的音质和便携性,已然成为视频博主、直播达人和新闻访谈的得力助手。在短视频、直播互动、在线访谈等多个场景中,它们默默守护着每一声清晰的传递,为内容的呈现增色添彩。面…

AWS EMR Serverless

AWS概述 EMR Serverless 简介 在AWS概述一文中简单介绍过AWS EMR, 它是AWS提供的云端大数据平台。借助EMR可以设置集群以便在几分钟内使用大数据框架处理和分析数据。创建集群可参考官方文档:Amazon EMR 入门。但集群创建之后需要一直运行,用户需要管理…

SSL证书到底怎么选?

在全球CA官方原厂的SSL证书兼容性达到99%的机构仅有4家,其中一家勉强,分别:GlobalSign、DigiCert、Sectigo、Certum,如果不在这个范围的建议都不用看。 【不包括套用品牌的“国产化”SSL证书、山寨SSL证书,这些证书的…

聊一聊 js的事件循环、进程、线程、定时器延迟问题

概括来说是什么? 所谓Event Loop,就是事件循环,其实就是JS管理事件执行的一个流程,具体的管理办法由他具体的运行环境确定。目前JS的主要运行环境有两个,浏览器和Node.js。这两个环境的Event Loop还有点区别&#xff…

Leetcode 力扣107. 二叉树的层序遍历 II (抖音号:708231408)

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[[15,7],[9,20],…

LabVIEW 反向工程的实现与法律地位

什么是LabVIEW反向工程? 反向工程是指从现有的应用程序或软件中推导出其设计、架构、代码等信息的过程。对于LabVIEW而言,反向工程涉及从现有的VI(虚拟仪器)文件、项目或应用程序中提取出设计思路、功能模块、算法实现等。 LabV…