云原生Kubernetes:pod亲和性与反亲和性

【k8s】pod调度——亲和,反亲和,污点,容忍 但我们可以在 Pod 上设置容忍(Tolerations),意思是设置了容忍的 Pod 将可以容忍污点的存在,可以被调度到存在污点的 Node 上。//由于指定 Pod 所在的 node01 节点上具有带有键 kgc 和标签值 a 的标签,node02 也有这个kgc=a的标签,所以 node01 和 node02 是在一个拓扑域中,反亲和要求新 Pod 与指定 Pod 不在同一拓扑域,所以新 Pod 没有可用的 node 节点,即为 Pending 状态。调度器试图在每个拓扑域中放置数量均衡的 Pod。 阅读详情

目录

一、理论

1.调度策略

2.Pod 拓扑分布约束

3.调度场景详解

4.亲和性与反亲和性案例

二、实验

1.亲和性与反亲和性

三、问题

1.节点批次打标签错误

2.for循环批量创建pod报错

3.比较 podAffinity 和 podAntiAffinity

四、总结


一、理论

1.调度策略

(1)对比

2.Pod 拓扑分布约束

(1)概念

使用 拓扑分布约束(Topology Spread Constraints) 来控制 Pod在集群内故障域之间的分布, 例如区域(Region)、可用区(Zone)、节点和其他用户自定义拓扑域。 这样做有助于实现高可用并提升资源利用率。

(2)拓扑分布约束 (涉及K8S v1.25及以上版本)

Pod 拓扑分布约束使你能够以声明的方式进行配置。

topologySpreadConstraints 字段,Pod API 包括一个 spec.topologySpreadConstraints 字段。这个字段的用法如下所示:

---
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  # 配置一个拓扑分布约束
  topologySpreadConstraints:
    - maxSkew: <integer>
      minDomains: <integer> # 可选;自从 v1.25 开始成为 Beta
      topologyKey: <string>
      whenUnsatisfiable: <string>
      labelSelector: <object>
      matchLabelKeys: <list> # 可选;自从 v1.27 开始成为 Beta
      nodeAffinityPolicy: [Honor|Ignore] # 可选;自从 v1.26 开始成为 Beta
      nodeTaintsPolicy: [Honor|Ignore] # 可选;自从 v1.26 开始成为 Beta
  ### 其他 Pod 字段置于此处

(3) 示例

① 节点标签

拓扑分布约束依赖于节点标签来标识每个节点所在的拓扑域。 例如,某节点可能具有标签:

说明:
为了简便,此示例未使用众所周知的标签键 topology.kubernetes.io/zone 和 topology.kubernetes.io/region。 但是,建议使用那些已注册的标签键,而不是此处使用的私有(不合格)标签键 region 和 zone。

无法对不同上下文之间的私有标签键的含义做出可靠的假设。

②有一个 4 节点的集群且带有以下标签

③从逻辑上看集群如下

④一致性

应该为一个组中的所有 Pod 设置相同的 Pod 拓扑分布约束。

通常,如果正使用一个工作负载控制器,例如 Deployment,则 Pod 模板会帮你解决这个问题。 如果混合不同的分布约束,则 Kubernetes 会遵循该字段的 API 定义; 但是,该行为可能更令人困惑,并且故障排除也没那么简单。

运维人员需要一种机制来确保拓扑域(例如云提供商区域)中的所有节点具有一致的标签。 为了避免运维人员需要手动为节点打标签,大多数集群会自动填充知名的标签, 例如 kubernetes.io/hostname。检查运维人员的集群是否支持此功能。

⑤一个拓扑分布约束

假设拥有一个 4 节点集群,其中标记为 foo: bar 的 3 个 Pod 分别位于 node1、node2 和 node3 中:

希望新来的 Pod 均匀分布在现有的可用区域,则可以按如下设置其清单:

kind: Pod
apiVersion: v1
metadata:
  name: mypod
  labels:
    foo: bar
spec:
  topologySpreadConstraints:
  - maxSkew: 1
    topologyKey: zone
    whenUnsatisfiable: DoNotSchedule
    labelSelector:
      matchLabels:
        foo: bar
  containers:
  - name: pause
    image: registry.k8s.io/pause:3.1

从此清单看,topologyKey: zone 意味着均匀分布将只应用于存在标签键值对为 zone: <any value> 的节点 (没有 zone 标签的节点将被跳过)。如果调度器找不到一种方式来满足此约束, 则 whenUnsatisfiable: DoNotSchedule 字段告诉该调度器将新来的 Pod 保持在 pending 状态。

如果该调度器将这个新来的 Pod 放到可用区 A,则 Pod 的分布将成为 [3, 1]。 这意味着实际偏差是 2(计算公式为 3 - 1),这违反了 maxSkew: 1 的约定。 为了满足这个示例的约束和上下文,新来的 Pod 只能放到可用区 B 中的一个节点上:

或者:

可以调整 Pod 规约以满足各种要求:

将 maxSkew 更改为更大的值,例如 2,这样新来的 Pod 也可以放在可用区 A 中。
将 topologyKey 更改为 node,以便将 Pod 均匀分布在节点上而不是可用区中。 在上面的例子中,如果 maxSkew 保持为 1,则新来的 Pod 只能放到 node4 节点上。
将 whenUnsatisfiable: DoNotSchedule 更改为 whenUnsatisfiable: ScheduleAnyway, 以确保新来的 Pod 始终可以被调度(假设满足其他的调度 API)。但是,最好将其放置在匹配 Pod 数量较少的拓扑域中。 请注意,这一优先判定会与其他内部调度优先级(如资源使用率等)排序准则一起进行标准化。

3.调度场景详解

kube-scheduler 给一个 pod 做调度选择包含两个步骤: 1.过滤(节点预选),2.打分(节点优选,节点选定)

(1)Deployment/RC:全自动调度

Deployment/RC主要是自动部署应用的多个副本,并持续监控,以维持副本的数量。默认是使用系统Master的Scheduler经过一系列算法计算来调度,用户无法干预调度过程与结果。

(2)NodeSelector:定向调度
通过Node的标签和Pod的nodeSelector属性相匹配,可以达到将pod调度到指定的一些Node上。

 

(3)Node亲和性调度
目前有两种亲和性表达,NodeAffinity语法支持的操作符包括In/NotIn/Exists/DoesNotExist/Gt/Lt。

该pod可以被调度到key为“env”,值为“node01”或“node02”的节点。另外,在满足该条件的节点中,优先使用具有“disk”标签,且值为“ssd”的节点。

(4)POD亲和性调度

POD亲和性表示POD部署到满足某些label的pod所在的NODE上。pod需要被调度到某个NODE节点上,该节点属于kubernetes.io/hostname 这个域,并且上面运行了这样的 pod:这个pod 有一个app=nginx的 label。

(5)POD反亲和性调度

POD反亲和性表示POD不能部署到满足某些label的pod所在的NODE上。

该pod不能被调度到某个NODE节点上,该节点属于kubernetes.io/hostname 这个域,并且上面运行了这样的 pod:这个pod 有一个app=nginx的 label。

(6) Taints与Tolerations(污点与容忍)
Taints与前面的Affinity相反,它让Node拒绝Pod的运行。为node添加一个Taint,效果是NoSchedule(除了NoSchedule还可以取值PreferNoSchedule/NoExecute)。意味着除非Pod明确声明可以容忍这个Taint,否则不会被调度到该Node上。使用PodToleratesNodeTaints预选策略和TaintTolerationPriority优选函数完成该机制。

该pod容忍env=node02 且 effect 为 NoExecute的节点。可以进行调度

(7)DaemonSet调度

在每个Node上调度一个Pod,管理集群中每个Node上仅运行一份Pod的副本实例。

该pod会在每一个符合调度的node 节点上启动一个实例。该节点必须存在fluentd=true 的标签。

4.亲和性与反亲和性案例

(1)环境准备

node01、 node02 都有标签 test=a,有个pod1 运行在node01上, 标签为app=myapp01

#设置node01和node02节点,拥有标签 test=a
[root@master demo]# kubectl  label nodes node{01,02} test=a --overwrite
node/node01 labeled
node/node02 labeled

#查看拥有标签test=a的节点
[root@master demo]# kubectl  get nodes -l test=a
NAME     STATUS   ROLES    AGE    VERSION
node01   Ready    <none>   7d6h   v1.15.1
node02   Ready    <none>   7d6h   v1.15.1
[root@master demo]# vim test.yaml
apiVersion: v1
kind: Pod
metadata:
  name: myapp01
  labels:
    app: myapp01
spec:
  containers:
  - name: with-node-affinity
    image: soscscs/myapp:v1
#声明式创建pod 
[root@master demo]# kubectl  apply  -f test.yaml 
pod/myapp01 created

#查看pod myapp01的详细信息的标签
[root@master demo]# kubectl  get pods  myapp01  -o wide --show-labels 
NAME      READY   STATUS    RESTARTS   AGE   IP             NODE     NOMINATED NODE   READINESS GATES   LABELS
myapp01   1/1     Running   0          26s   10.244.1.112   node01   <none>           <none>            app=myapp01

(2) 亲和性+ In 测试

[root@master demo]# vim a.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: myapp10
  labels:
    app: myapp03
spec:
  containers:
  - name: myapp03
    image: soscscs/myapp:v1
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - myapp01
        topologyKey: test

pod拥有app=myapp01 标签(设这个pod为x),则把新pod调度到和 pod x 拥有同一个拓扑域test=a 的 节点上。

[root@master demo]# for i in myapp{11..15}; do kubectl apply -f a.yaml; sed -ri "4s#myapp1[0-9]#$i#" a.yaml; done
pod/myapp10 created
pod/myapp11 created
pod/myapp12 created
pod/myapp13 created
pod/myapp14 created
[root@master demo]# kubectl  get pods -o wide --show-labels 
NAME      READY   STATUS    RESTARTS   AGE   IP             NODE     NOMINATED NODE   READINESS GATES   LABELS
myapp01   1/1     Running   0          88m   10.244.1.112   node01   <none>           <none>            app=myapp01
myapp10   1/1     Running   0          6s    10.244.2.104   node02   <none>           <none>            app=myapp03
myapp11   1/1     Running   0          6s    10.244.1.138   node01   <none>           <none>            app=myapp03
myapp12   1/1     Running   0          5s    10.244.2.105   node02   <none>           <none>            app=myapp03
myapp13   1/1     Running   0          5s    10.244.1.139   node01   <none>           <none>            app=myapp03
myapp14   1/1     Running   0          5s    10.244.2.106   node02   <none>           <none>            app=myapp03

因为拓扑域test=a内,已经有了pod存在于node01节点上,所以把新pod调度到和 pod x 拥有同一个拓扑域test=a 的 节点上。

(3)亲和性+NotIn 测试

[root@master demo]# vim a.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: myapp10
  labels:
    app: myapp03
spec:
  containers:
  - name: myapp03
    image: soscscs/myapp:v1
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: NotIn
            values:
            - myapp01
        topologyKey: test
[root@master demo]# kubectl delete pod myapp{10..14};for i in myapp{11..15}; do kubectl apply -f a.yaml; sed -ri "4s#myapp1[0-9]#$i#" a.yaml; done
pod "myapp10" deleted
pod "myapp11" deleted
pod "myapp12" deleted
pod "myapp13" deleted
pod "myapp14" deleted
pod/myapp10 created
pod/myapp11 created
pod/myapp12 created
pod/myapp13 created
pod/myapp14 created
[root@master demo]# kubectl  get pods -o wide --show-labels 
NAME      READY   STATUS    RESTARTS   AGE   IP             NODE     NOMINATED NODE   READINESS GATES   LABELS
myapp01   1/1     Running   0          91m   10.244.1.112   node01   <none>           <none>            app=myapp01
myapp10   1/1     Running   0          5s    10.244.1.140   node01   <none>           <none>            app=myapp03
myapp11   1/1     Running   0          5s    10.244.2.107   node02   <none>           <none>            app=myapp03
myapp12   1/1     Running   0          4s    10.244.1.141   node01   <none>           <none>            app=myapp03
myapp13   1/1     Running   0          4s    10.244.2.108   node02   <none>           <none>            app=myapp03
myapp14   1/1     Running   0          4s    10.244.1.142   node01   <none>           <none>            app=myapp03

(4)非亲和性+In 测试

[root@master demo]# vim a.yaml
apiVersion: v1
kind: Pod
metadata:
  name: myapp10
  labels:
    app: myapp03
spec:
  containers:
  - name: myapp03
    image: soscscs/myapp:v1
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - myapp01
        topologyKey: test
[root@master demo]# kubectl delete pod myapp{10..14};for i in myapp{11..15}; do kubectl apply -f a.yaml; sed -ri "4s#myapp1[0-9]#$i#" a.yaml; done
pod "myapp10" deleted
pod "myapp11" deleted
pod "myapp12" deleted
pod "myapp13" deleted
pod "myapp14" deleted
pod/myapp10 created
pod/myapp11 created
pod/myapp12 created
pod/myapp13 created
pod/myapp14 created
[root@master demo]# kubectl  get pods -o wide --show-labels 
NAME      READY   STATUS    RESTARTS   AGE   IP             NODE     NOMINATED NODE   READINESS GATES   LABELS
myapp01   1/1     Running   0          96m   10.244.1.112   node01   <none>           <none>            app=myapp01
myapp10   0/1     Pending   0          4s    <none>         <none>   <none>           <none>            app=myapp03
myapp11   0/1     Pending   0          3s    <none>         <none>   <none>           <none>            app=myapp03
myapp12   0/1     Pending   0          3s    <none>         <none>   <none>           <none>            app=myapp03
myapp13   0/1     Pending   0          3s    <none>         <none>   <none>           <none>            app=myapp03
myapp14   0/1     Pending   0          3s    <none>         <none>   <none>           <none>            app=myapp03


[root@master demo]# kubectl  describe  pod myapp10

(5)非亲和性 + NotIn 测试

[root@master demo]# vim a.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: myapp10
  labels:
    app: myapp03
spec:
  containers:
  - name: myapp03
    image: soscscs/myapp:v1
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: NotIn
            values:
            - myapp01
        topologyKey: test
[root@master demo]# kubectl delete pod myapp{10..14};for i in myapp{11..15}; do kubectl apply -f a.yaml; sed -ri "4s#myapp1[0-9]#$i#" a.yaml; done
pod "myapp10" deleted
pod "myapp11" deleted
pod "myapp12" deleted
pod "myapp13" deleted
pod "myapp14" deleted
pod/myapp10 created
pod/myapp11 created
pod/myapp12 created
pod/myapp13 created
pod/myapp14 created
[root@master demo]# kubectl  get pods -o wide --show-labels 
NAME      READY   STATUS    RESTARTS   AGE    IP             NODE     NOMINATED NODE   READINESS GATES   LABELS
myapp01   1/1     Running   0          102m   10.244.1.112   node01   <none>           <none>            app=myapp01
myapp10   1/1     Running   0          8s     10.244.2.109   node02   <none>           <none>            app=myapp03
myapp11   0/1     Pending   0          8s     <none>         <none>   <none>           <none>            app=myapp03
myapp12   0/1     Pending   0          7s     <none>         <none>   <none>           <none>            app=myapp03
myapp13   0/1     Pending   0          7s     <none>         <none>   <none>           <none>            app=myapp03
myapp14   0/1     Pending   0          7s     <none>         <none>   <none>           <none>            app=myapp03


[root@master demo]# kubectl  describe  pod myapp11

二、实验

1.亲和性与反亲和性

(1)环境准备

node01、 node02 都有标签 test=a,有个pod1 运行在node01上, 标签为app=myapp01

编写资源清单

声明式创建pod

查看pod myapp01的详细信息的标签

pod myapp01 拥有标签app=myapp01,且被调度到了node01上

(2) 亲和性+ In 测试

pod拥有app=myapp01 标签(设这个pod为x),则把新pod调度到和 pod x 拥有同一个拓扑域test=a 的 节点上。

创建pod myapp10-myapp14

因为拓扑域test=a内,已经有了pod存在于node01节点上,所以把新pod调度到和 pod x 拥有同一个拓扑域test=a 的 节点上。

pod从node01节点开始在两个节点上依次循环创建pod

查看资源清单文件,最后一次更改为15后,执行了14,然后修改为15结束for循环,实际是创建pod myapp10-myapp14就结束了

(3)亲和性+NotIn 测试

先修改资源清单文件

批量删除之前的pod myapp10-myapp14,并创建pod myapp10-myapp14

pod从node01节点开始,在两个节点上依次循环创建pod

(4)非亲和性+In 测试

先修改资源清单文件

批量删除之前的pod myapp10-myapp14,并创建pod myapp10-myapp14

查看信息,新创建的pod都处于Pending状态

查看详细信息

两个节点都不匹配pod非亲和规则,又因为使用的是硬限制,因此当找不到合适的node节点调度pod时,就会处于Pending状态

(5)非亲和性 + NotIn 测试

先修改资源清单文件

批量删除之前的pod myapp10-myapp14,并创建pod myapp10-myapp14

查看信息,只有第一个myapp10成功在node02上创建,剩余的4个pod都处于Pending状态

查看详细信息

两个节点都不满足现有的pod反亲和性特征

三、问题

1.节点批次打标签错误

(1)报错

(2)原因分析

语法错误

(3)解决方法

将括号()修改为花括号 { }

修改前:

修改后:

成功:

2.for循环批量创建pod报错

(1)报错

(2)原因分析

“s”命令缺少终止符合#

(3)解决方法

添加终止符#

修改前:

修改后:

成功:

3.比较 podAffinity 和 podAntiAffinity

(1)比较

在 Kubernetes 中, Pod亲和性和反亲和性控制 Pod 彼此的调度方式(更密集或更分散)。

podAffinity
吸引 Pod;你可以尝试将任意数量的 Pod 集中到符合条件的拓扑域中。

podAntiAffinity
驱逐 Pod。如果将此设为 requiredDuringSchedulingIgnoredDuringExecution 模式, 则只有单个 Pod 可以调度到单个拓扑域;如果你选择 preferredDuringSchedulingIgnoredDuringExecution, 则你将丢失强制执行此约束的能力。

要实现更细粒度的控制,你可以设置拓扑分布约束来将 Pod 分布到不同的拓扑域下,从而实现高可用性或节省成本。 这也有助于工作负载的滚动更新和平稳地扩展副本规模。

四、总结

批量删除之前的pod myapp10-myapp14,并创建pod myapp10-myapp14

[root@master]# kubectl delete pod myapp{10..14};for i in myapp{11..15}; do kubectl apply -f a.yaml; sed -ri "4s#myapp1[0-9]#$i#" a.yaml; done

Kubernetes--服务拓扑(Service Topology) 一、服务拓扑 服务拓扑机制从Kubernetes1.17版本开始引入,目标是实现基于Node拓扑的流量路由,例如将发送到某个服务的流量优先路由到与客户端相同Node的Endpoint上,或者路由到与客户端相同的Zone的那些Node的Endpoint上。 在默认情况下,发送到一个Service的流量会被均匀的转发到每个后端Endpoint上,但无法根据复杂的拓扑信息设置复杂的路由策略。服务拓扑机制的引入就是为了实现基于Node拓扑的服务器路由,允许Service创建者根据来源Node和目... 阅读详情

相关推荐

Kubernetes调度艺术:亲和性与反亲和性实战指南

明确业务需求:是抱团取暖还是保持距离?合理使用策略:硬策略保安全,软策略求优化持续监控调整:通过监控数据动态优化策略下次当你面对复杂的调度需求时,不妨把这套"调度兵法"运用起来,让集群资源真正实现智能分配!

weixin_42587823的博客 1314

Pod的亲和性和反亲和性

如何部署pod是重要的集群的调度机制,合理的配置pod调度机制可以实现资源最大化利用。拓扑域:k8s集群节点当中的一个组织结构,可以更具节点的物理关系或者逻辑关系进行划分。可以用来表示节点之间的空间关系。网络关系或者其他类型的关系。这里的亲和性反亲和性都指的是标签。node匹配的是主机的标签而pod匹配的是pod自己的标签。

m0_75209491的博客 2311

Kubernetes反亲和性策略解析

在大型分布式系统中,确保服务的稳定性和性能是一个至关重要的任务。以一个电商平台的订单处理服务为例,假设这个服务部署在Kubernetes集群中。由于订单处理服务需要处理高并发请求,如果所有的Pod都部署在同一台节点上,那么当这台节点出现故障时,整个订单处理服务可能会因为资源不足而崩溃。为了解决这个问题,我们需要引入Kubernetes的反亲和性策略。反亲和性是Kubernetes中的一种资源调度策略,它通过避免将Pod调度到同一节点上来提高系统的容错性和资源利用率。

MoneyHacksPro的博客 518

pod亲和性和反亲和性

背景: 实际使用中,如果希望2个pod在一个node上,那么可以用到node的亲和性,或者使用pod亲和性。如果希望2个io密集型或者2个CPU密集型的pod不在一个node上,就可以用到pod的反亲和性。 一般情况下我们部署的 Pod 是通过集群的自动调度策略来选择节点的,默认情况下调度器考虑的是资源足够,并且负载尽量平均,但是有的时候我们需要能够更加细粒度的去控制 Pod 的调度,比如我们内部的一些服务 gitlab 之类的也是跑在Kubernetes集群上的,我们就不希望对外的一些服务和内部的服务跑在

xiongwenwu的专栏 2534

【云原生】Kubernetes中关于污点、亲和性和容忍度的详细用法教程与应用实战

在Kubernetes中,污点(Taints)、亲和性(Affinity)和容忍度(Tolerations)是三个强大的工具,它们允许集群管理员精细控制Pod在节点上的调度。这些机制共同工作,确保Pod被调度到最适合它们的节点上,从而提高集群的效率和稳定性。本文将结合具体案例,详细介绍污点、亲和性和容忍度的用法。

景天科技苑 3万+

实战指南!基于STM32的智能环境监测系统(附完整代码+硬件设计+云端对接)

本文提供了一份基于STM32的智能环境监测系统完整实战指南。详细讲解了从硬件选型、电路设计、传感器驱动到数据采集、本地报警逻辑,以及通过ESP8266模块对接OneNET物联网平台实现数据上云的全过程。项目涵盖嵌入式开发与物联网应用核心技能,并提供了多种手机端数据展示方案,非常适合课程设计或毕业设计参考。

weixin_29193359的博客 347

Kubernetes Pod 调度算法详解

随后,对剩余节点按优先级打分(如资源均衡、拓扑分布),最终选择得分最高的节点运行 Pod。在现代云原生架构中,Kubernetes 作为容器编排领域的标杆,其核心功能之一便是高效调度 Pod 到合适的节点上运行。Kubernetes 支持扩展资源(如 GPU)的调度,通过声明 `resources.requests` 确保关键任务分配到合适硬件。Kubernetes 支持自定义调度器或扩展默认调度器。未来,随着智能调度技术的发展,Kubernetes 的调度能力将进一步增强,为云原生应用提供更强支撑。

wmxszn_395的博客 198

AIDD-人工智能药物设计-构建基于机器学习方法的在线预测平台高准确预测药物诱导骨毒性

在此基础上,提取多种药物分子特征,包括分子指纹(如MACCS、Morgan、RDKit、TopologicalTorsion、AtomPairs与Descriptors)及分子图谱,通过Transformer编码器与神经网络进行机器学习模型训练。最后,将训练好的模型部署为在线Web服务器(BoneToxPD),供用户快速预测药物的骨毒性。本研究不仅在骨毒性预测的准确性方面取得了突破,还在模型解释性方面提供了新的视角,通过注意力机制精准识别出影响骨毒性的关键化学基团,推动药物研发领域更安全、更高效的发展。

itwangyang520的博客 1070

Kubernetes Pod 网络通信优化方案

随着集群规模的扩大,Pod之间的网络通信性能问题逐渐凸显,成为影响应用响应速度和稳定性的关键因素。合理配置Pod的亲和性(Affinity)和反亲和性(Anti-Affinity)规则,可以将通信频繁的Pod调度到同一节点或邻近节点,减少跨节点通信带来的延迟。避免频繁的短连接请求也能降低DNS负载。通过优化服务网格配置,例如调整连接池大小、启用mTLS加密的硬件加速,可以减少网络开销,提高通信效率。通过以上优化方案,可以显著提升Kubernetes集群的网络通信效率,为业务提供更稳定、高效的运行环境。

vgvrex_555的博客 183

薄膜比拟、开口截面扭转承载力以及风电混塔水平缝张开状态下抗扭承载力推导

风电混塔水平缝张开状态下的抗扭承载力推导,从弹性力学说起

George的博客 867

深度解析:LPDDR5 Receiver 的挑战与应对

LPDDR5 的数据速率已经来到Tbit​DataRate1​≈156ps在6400Mbps时也就是说,。👉 这就是为什么成为 LPDDR5 的“标配”。

weixin_43199439的博客 205

Kubernetes Network与Pod Scheduler

集群外部主机可以访问集群内部应用集群内部应用也可以访问集群外部主机各个namespace之间没有做任何的隔离策略如果希望在 IP 地址或端口层面控制网络流量, 考虑使用 Kubernetes 网络策略(NetworkPolicy)。NetworkPolicy 是一种以应用为中心的结构,允许你设置如何允许Pod与网络上的各类网络“实体” 通信。NetworkPolicy 适用于一端或两端与 Pod 的连接,与其他连接无关。**提示:**网络策略通过网络插件来实现。

m0_65060929的博客 249

用 SQL Trace 透视 SAP HANA 执行链路:从会话层到内部语句,一次把性能问题抓个现行

摘要:SAP HANA 的 SQL Trace 是性能分析和故障定位的关键工具,它记录会话层所有执行的 SQL 语句。文章解释了 SQL Trace 的工作原理、使用场景和配置方法,包括图形界面和 SQL 命令两种启用方式。重点讨论了存储过程内部语句的捕获问题,指出需要通过设置 internal 参数才能获取过程体中的详细 SQL 语句。文章还提供了实用的排查建议,强调要精准控制 Trace 范围,避免生成过大文件。最后通过真实案例展示了如何利用 SQL Trace 快速定位性能问题。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1038

云原生架构深度实践:Kubernetes 网络、调度与弹性伸缩核心解析

本文系统梳理了 Kubernetes 集群的核心运维与架构实践。首先,深入剖析了 Flannel、Calico 等主流 CNI 插件的网络模型与性能差异,并详解了 NetworkPolicy 网络策略的配置实践。随后,全面阐述了节点亲和性、污点容忍等高级调度策略,以实现资源的精细化管理。最后,结合 Metrics Server,深入探讨了基于 CPU/内存指标的 HPA 水平自动伸缩机制及其精细化管控策略,为构建高性能、高可用的云原生平台提供了完整的技术指南。

jjkinglove的博客 168

基于PINN求解裂纹扩展问题的优化开发

本文提出了一种基于物理信息神经网络(PINN)的裂纹扩展问题求解方法。通过将线弹性断裂力学控制方程和裂纹尖端场特性嵌入神经网络损失函数,PINN有效克服了传统有限元法在处理裂纹扩展时面临的网格重构困难、计算成本高等问题。文章详细介绍了PINN网络架构设计、裂纹尖端奇异场处理、损失函数构造以及优化策略等关键技术。数值实验表明,该方法能准确预测裂纹扩展路径和应力强度因子,且在处理复杂几何和动态扩展问题时展现出显著优势。相比传统方法,PINN具有无网格、并行计算友好等特点,为断裂力学问题提供了新的求解范式。

huanghm88的专栏 148

SAP Build Work Zone standard edition 订阅报错 OIDC trust missing 的成因与完整解决路径

摘要:用户订阅SAP Build Work Zone时遇到422错误,提示未配置OpenID Connect信任。该错误表明业务用户需通过SAP Cloud Identity Services的OIDC协议认证,而当前子账户仅配置了SAML信任或未配置信任。解决方法是进入子账户的Trust Configuration页面,使用Establish Trust功能建立与SAP Cloud Identity Services的OIDC信任关系。这是SAP新版服务的强制要求,SAML协议已不被支持。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 191

用K8s+Docker打造云原生爬虫集群:弹性扩缩容与故障自愈实践

容器化技术Docker与编排平台Kubernetes(K8s)正在重塑后端服务的部署模式。Docker将应用及依赖封装为标准化镜像,K8s则负责集群内的资源调度与生命周期管理。基于这一组合,爬虫系统可以设计为无状态服务,将任务队列、去重与状态存储外置到Redis,从而获得弹性的扩缩容能力和自动故障恢复机制。结合HorizontalPodAutoscaler实现按CPU/内存负载动态调节Worker副本数,配合探针、优雅退出与反亲和性调度,构建24小时无人值守的高可用云原生爬虫集群。本文从架构设计到实战避坑,

weixin_31742871的博客 304

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

kagent生产环境部署清单:确保高可用性和性能的10个关键步骤

kagent是一款云原生智能代理框架,专为构建高可用、高性能的AI应用而设计。本指南将带你通过10个关键步骤,完成kagent在生产环境中的部署,确保系统稳定运行并发挥最佳性能。 ## 1. 环境准备与依赖检查 在开始部署前,确保你的环境满足以下要求: - Kubernetes集群(v1.24+) - Helm 3.8+ - 至少3个节点,每节点2CPU/4GB内存 - 持久化存储支持 推荐

gitblog_00951的博客 363

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【云原生 | 从零开始学Kubernetes】十、k8sPod节点亲和性和反亲和性

pod的节点亲和性和反亲和性

欢迎关注,一起进步! 1835

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Kubernetes - Pod 的亲和性与反亲和性,实现精准资源调度

在 Kubernetes 中,调度器(Scheduler)负责将待调度的 Pod 分配到集群中合适的 Node 上。默认情况下,调度器根据资源请求(CPU、内存)、节点资源剩余量、污点(Taint)与容忍(Toleration)等条件进行决策。但这些条件是“被动”的——它们只能阻止 Pod 被调度到某些节点,却无法主动引导 Pod 去“喜欢”或“讨厌”某些节点。这就是亲和性与反亲和性的价值所在。不要复制粘贴。每个服务(订单、支付、用户)都有不同需求。Kubernetes 的默认调度器是“静态规则驱动”。

千淘万漉虽辛苦,吹尽狂沙始到金 6568

【云原生】Kubernetes节点亲和性分配 Pod

官方地址:你可以约束一个 Pod 以便其只能在特定的节点上运行, 或优先在特定的节点上运行。有几种方法可以实现这点,推荐的方法都是用来进行选择。通常这样的约束不是必须的,因为调度器将自动进行合理的放置(比如,将 Pod 分散到节点上, 而不是将 Pod 放置在可用资源不足的节点上等等)。但在某些情况下,你可能需要进一步控制 Pod 被部署到哪个节点。例如,确保 Pod 最终落在连接了 SSD 的机器上, 或者将来自两个不同的服务且有大量通信的 Pods 被放置在同一个可用区。

征服Bug的博客 1万+

Kubernetes - 节点亲和性与 Pod 亲和性的配置与差异

fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;是否是否是否是否是否需要控制 Pod 部署在哪类节点?使用节点亲和性需要控制 Pod 和其他 Pod 的分布关系?使用 Pod 亲和性/反亲和性不需要特殊调度是否必须?是否必须同节点?preferred + 权重是否要避免扎堆?不配置🎯终极建议90% 的场景。

千淘万漉虽辛苦,吹尽狂沙始到金 6402

【云原生】Kubernetes----POD调度策略

在Kubernetes集群中,Pod是最小的可部署单元,它封装了应用程序及其依赖的运行环境。然而,Pod并不会自行选择在哪个节点上运行,而是由Kubernetes的调度器(kube-scheduler)来负责。本文将深入探讨Kubernetes中的Pod调度机制,包括其工作原理、调度决策的因素以及如何定义Pod的调度策略

hy199707的博客 2432

K8S集群-Pod资源使用完整版

K8S集群-Pod资源使用完整版

qq_69174109的博客 2018
上一篇: 云原生Kubernetes:K8S集群list-watch机制与 pod调度约束
下一篇: 云原生Kubernetes:K8S资源控制之污点与容忍
cronaldo91
博客等级 码龄16年 2605粉丝 365原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值