6

k8s~service负载到pod的状态保持

 3 years ago
source link: https://www.cnblogs.com/lori/p/15669513.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

nginx或者其它负载均衡软件都有一个能力,就是当客户请求一个网页时,第一次访问的是A服务器,第二次也就会让你访问A服务器,而在k8s里,也有这种机制和能力。

k8s的Session affinity

  1. Service同样也支持Session affinity(粘性会话)机制,可以将来自同一个客户端的请求始终转发至同一个后端的Pod对象,这意味着它会影响调度算法的流量分发功用,进而降低其负载均衡的效果。因此,当客户端访问Pod中的应用程序时,如果有基于客户端身份保存某些私有信息,并基于这些私有信息追踪用户的活动等一类的需求时,那么应该启用session affinity机制。

  2. Service affinity的效果仅仅在一段时间内生效,默认值为10800秒,超出时长,客户端再次访问会重新调度。该机制仅能基于客户端IP地址识别客户端身份,它会将经由同一个NAT服务器进行原地址转换的所有客户端识别为同一个客户端,由此可知,其调度的效果并不理想。Service 资源 通过. spec. sessionAffinity 和. spec. sessionAffinityConfig 两个字段配置粘性会话。 spec. sessionAffinity 字段用于定义要使用的粘性会话的类型,它仅支持使用“ None” 和“ ClientIP” 两种属性值。如下:

查看相关配置

[root@k8s-master mainfests]# kubectl explain svc.spec.sessionAffinity
KIND:     Service
VERSION:  v1

FIELD:    sessionAffinity <string>

DESCRIPTION:
     Supports "ClientIP" and "None". Used to maintain session affinity. Enable
     client IP based session affinity. Must be ClientIP or None. Defaults to
     None. More info:
     https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies

通过sessionAffinity实现客户端与Pod的会话保持

apiVersion: v1
kind: Service
metadata:
  name: myapp
  namespace: default
spec:
  selector:
    app: myapp
    release: canary
  sessionAffinity: ClientIP
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 10800 #默认的过期时间是10800秒,到期后POD从新路由
  type: NodePort
  ports: 
  - port: 80
    targetPort: 80
    nodePort: 30080

测试,同一个客户端IP走一个POD

[root@k8s-master mainfests]# while true;do curl http://192.168.56.11:30080/hostname.html;sleep 1;done
myapp-deploy-69b47bc96d-hwbzt
myapp-deploy-69b47bc96d-hwbzt
myapp-deploy-69b47bc96d-hwbzt
myapp-deploy-69b47bc96d-hwbzt
myapp-deploy-69b47bc96d-hwbzt
myapp-deploy-69b47bc96d-hwbzt
myapp-deploy-69b47bc96d-hwbzt
myapp-deploy-69b47bc96d-hwbzt

参考:https://www.cnblogs.com/linuxk/p/9605901.html


Recommend

  • 30
    • studygolang.com 5 years ago
    • Cache

    k8s核心技术-Pod篇

    Pod详解 Pod介绍 Pod 是k8s的重要概念,要掌握 每个Pod都有一个特殊的被称为“根容器”的Pause容器 Pause容器对应的镜像属于k8s平台的一部分,除了Pause容器还包含一个或多个紧密相关的业务容器

  • 52

    在 Kubernetes 中,为了保证业务不中断或业务SLA不降级,需要将应用进行集群化部署。通过 PodDisruptionBudget 控制器可以设置应用POD集群处于运行状态最低个数,也可以设置应用POD集群处于运行状态的最低百...

  • 12
    • www.cnblogs.com 4 years ago
    • Cache

    k8s之深入解剖Pod(三)

    目录: Pod的调度 Pod的扩容和缩容 Pod的滚动升级 一、Pod的调度 Pod只是容器的载体,通常需要通过RC、Deployment、DaemonSet、Job等对象来完成Pod的调度和自动控制功能。 1、R...

  • 7
    • www.ishells.cn 3 years ago
    • Cache

    k8s pod两问

    aliyun kubernetes观后记: 有了容器,为什么要用Pod呢? 在操作系统中,一个程序的运行实际上由多个线程组成,这多个线程共享进程的资源,相互协作,完成程序的工作,这也是操作系统中进程组的概念。

  • 9

    feininan3天前原文链接:https://www.cnblogs.com/chopper-poet/p/15328054.html...

  • 13
    • www.cnblogs.com 3 years ago
    • Cache

    k8s入门之pod(四) - 景少

    k8s入门之pod(四) pod是k8s项目中的最小编排单位,它是运行中的一组(一个或多个)容器,...

  • 10
    • keys961.github.io 2 years ago
    • Cache

    k8s权威指南笔记:Pod(2)

    1. Pod调度 1.1. Deployment:自动调度 Deployment可以创建指定副本数量的Pod,用于无状态服务。运行时,Pod会被调度到不同Node上,并会自动维持副本数量。 同理还可以推广到StatefulSet等上面

  • 10
    • keys961.github.io 2 years ago
    • Cache

    k8s权威指南笔记:Pod(1)

    0. Pod相关定义 Pod:[Pod Kubernetes](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/) Pod Template:[PodTemplate Kubernetes](https://kub...

  • 11

    K8S实战系列:2-Pod、工作负载与服务_琦彦的博客-CSDN博客

  • 8

    k8s~ingress_service_endpoint_pod四壮士 在Kubernetes...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK