首页 > 其他分享 >在K8S中,Pod亲和性和反亲和性作用区别有哪些?该如何使用?

在K8S中,Pod亲和性和反亲和性作用区别有哪些?该如何使用?

时间:2024-02-26 09:25:17浏览次数:29  
标签:Node kubernetes 亲和性 调度 io Pod K8S

1.Pod亲和性 (Pod Affinity)

作用

  • 资源协同:当Pod需要与具有特定标签的Node或已经在特定Node上运行的Pod紧密合作时,比如共享硬件加速器或者进行高效的数据交互,可以利用Pod亲和性将这些Pod调度到一起。
  • 负载分片:在大规模集群中,可以根据业务需求,将相似类型的Pod调度到同一组Node上,以实现数据局部性、减少网络开销或优化整体性能。

如何使用
Pod亲和性通过affinity字段中的podAffinitynodeAffinity设置。例如,创建一个Deployment时,可以在其YAML配置文件中添加以下内容:

spec:
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values: ["myapp"]
        topologyKey: "kubernetes.io/hostname"
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: zone
            operator: In
            values: ["us-west1-a"]

在这个例子中,我们设置了两个亲和性规则:

  • Pod亲和性:要求Pod被调度到那些已经运行了标签为app=myapp的Pod的节点上,且依据kubernetes.io/hostname这一拓扑键进行判断。
  • Node亲和性:强制Pod只能被调度到标签为zone=us-west1-a的节点上。
2.Pod反亲和性 (Pod Anti-Affinity)

作用

  • 高可用性:为了确保服务的冗余性和容错性,可以设置Pod反亲和性,让相同服务的不同实例分布在不同的Node上,以避免单一节点故障影响整个服务。
  • 资源隔离:当一些Pod消耗大量资源,为了避免资源竞争或达到更好的负载均衡效果,可以设置反亲和性,确保这些Pod不会被调度到同一台机器上。

如何使用
同样在affinity字段中设置podAntiAffinitynodeAntiAffinity。例如:

spec:
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values: ["myapp"]
        topologyKey: "kubernetes.io/hostname"
    nodeAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: failure-domain.beta.kubernetes.io/zone
            operator: NotIn
            values: ["us-west1-a"]

这个例子中,我们指定了两个反亲和性规则:

  • Pod反亲和性:强制当前Pod不能与标签为app=myapp的Pod调度到同一台机器上,依然是基于kubernetes.io/hostname拓扑键判断。
  • Node反亲和性:强制Pod不能被调度到标签为failure-domain.beta.kubernetes.io/zone=us-west1-a的节点上,从而实现跨Zone的高可用部署。
3.区别:
  • 方向性: Pod亲和性强调的是Pod间的聚集或关联调度,而反亲和性则是强调Pod间的分离或避免共同调度。
  • 目的: 亲和性通常用于提高服务间协作效率或平衡资源分布;反亲和性更多是为了增强服务的冗余性和故障恢复能力。
  • 效果: 设置亲和性可能导致相关Pod在物理上或逻辑上更加接近;设置反亲和性则促使Pod尽可能远离某些特定的Pod或节点。

综上所述,在实际应用中,Kubernetes 的Pod亲和性和反亲和性提供了灵活的调度策略,帮助运维人员更好地管理分布式系统的可靠性和性能。

标签:Node,kubernetes,亲和性,调度,io,Pod,K8S
From: https://www.cnblogs.com/huangjiabobk/p/18033618

相关文章

  • 在K8S中,worke节点如何加入K8S高可用集群?
    在Kubernetes(K8S)中,将一个Worker节点加入到高可用集群的过程与加入单Master集群大体相似,但需要注意的是,高可用集群中的Master通常是通过负载均衡器暴露服务端点的,这样无论哪个Master节点宕机,Worker节点都可以连接到活跃的Master节点。以下是加入高可用Kubernetes集群的具体步骤:1.......
  • 在K8S中,kube-proxy的工作模式是什么?
    kube-proxy在Kubernetes集群中负责实现Service的网络代理和负载均衡功能,支持三种不同的工作模式:Userspace模式(已过时):在早期的Kubernetes版本中(1.2之前),kube-proxy默认使用Userspace模式。在此模式下,kube-proxy作为一个用户空间进程运行,为每个Service创建一个......
  • 在K8S中,影响pod调度的因素有哪些?
    在Kubernetes(K8s)中,影响Pod调度的因素非常多,主要包括但不限于以下几个方面:资源需求与限制:资源请求(Requests):Pod在创建时声明需要的最小资源量,如CPU和内存。调度器会寻找至少能满足这些资源请求的Node进行调度。资源限额(Limits):Pod可使用的最大资源量,超过限额可能会被系统限......
  • 在K8S中,"节点亲和性"和"节点选择器"的区别在哪里?
    在Kubernetes(K8s)中,“节点选择器”(NodeSelector)和“节点亲和性”(NodeAffinity)都是用来指导Pod调度到合适节点的机制,但它们在功能和灵活性上有一定的区别:节点选择器(NodeSelector):是较早且较为基础的一种调度策略,用于简单匹配节点的标签(labels)。当在Pod的规范中定义了节点选择......
  • k8s创建容器的两种办法
    1,命令行创建容器1.1kubectlrun通过命令行参数创建容器#从镜像仓库拉取kubectlrunmycentos007--image=centos-test-telnet:latest#从本地拉取kubectlrunmycentos007--image=centos-test-telnet:latest--image-pull-policy=Never1.2kubectlcreate命令创......
  • k8s-flannel网络详解
    1,网卡k8s安装完以后,查看k8s各node节点的网卡,会发现多了4个网卡docker0,flannel.1,cni0,veth,其中docker0纯粹是因为安装了docker服务才生成的网卡,和k8s集群是的逻辑架构没关系1.1docker0网卡docker0充当了一个网桥的功能,就是相当于一个集线器的功能,一个口收到信号......
  • 在K8S中,RS资源如何实现升级和回滚?
    在Kubernetes中,ReplicaSet(简称RS)是工作负载API对象,用于确保指定数量的Pod副本在集群中运行。当需要升级或回滚RS管理的Pod时,可以通过修改ReplicaSet的配置来实现。下面是如何实现RS资源的升级和回滚的步骤:升级RS资源修改ReplicaSet的配置:要升级RS,您需要修改其对应的Deploymen......
  • 在K8S中,SVC资源是否支持在K8S集群外部访问?
    在Kubernetes(K8S)中,Service资源可以通过特定类型支持在集群外部访问。以下是一些可以提供外部访问能力的Service类型:NodePort:NodePort服务会将服务映射到每个节点上的一个静态端口(范围默认为30000-32767)。通过这个端口,集群外部可以直接通过任意节点的IP地址和该NodePort来......
  • 在K8S中,如何实现金丝雀发布(灰度发布)?蓝绿发布?
    在Kubernetes(K8s)中,可以通过不同的策略来实现金丝雀发布(灰度发布)和蓝绿发布。以下是两种发布方式在K8s中的基本实现方法:金丝雀发布(灰度发布)金丝雀发布是一种逐步将新版本应用推送给部分用户群体,以收集反馈并监控新版本表现的方式。在K8s中,可以通过以下步骤实现:基于Deploym......
  • 在K8S中,如何让Pod运行一次?如何解决一次性任务?
    在Kubernetes(K8S)中,要让Pod运行一次并完成一次性任务,可以使用Job资源。Job是Kubernetes中用于运行一次性任务的工作负载API对象。它创建一个或多个Pod,并确保指定数量的Pod成功终止。当Pod成功完成后,Job将跟踪成功完成的情况。当达到指定的成功完成次数时,任务(即Job)就完成了。以下是......