首页 > 其他分享 >49、K8S-调度机制-拓朴调度-topologySpreadConstraints

49、K8S-调度机制-拓朴调度-topologySpreadConstraints

时间:2023-04-06 16:02:20浏览次数:42  
标签:49 调度 preferred 拓朴 5ffdc5975b 10.244 Running affinity pod

1、基础知识

1.1、回顾

我们知道,对于pod来说,其在定义pod亲和性和反亲和的时候,有一个 topologyKey的属性,但是默认情况下,
pod的亲和性调度,仅仅针对单一的拓扑场景,也就是说,要么所有的pod都在这里,要么所有的pod都不要在这里,
这样会导致,应用过于集中,反而导致物理资源的浪费。
那么我们希望在进行正常pod亲和性调度的时候,能够自动识别多个不同的调度节点,然后均匀的分散到多个节点中,从而实现资源的有效利用。而这就是我们接下来要学习的 拓扑调度。 注意: 这个功能是 k8s 1.19版本才有的功能, v1.18 之前版本中,要用 Pod 拓扑扩展,需要在 API 服务器 和调度器 中启用 EvenPodsSpread 特性。

1.2、属性解析

kubectl explain pod.spec.topologySpreadConstraints

labelSelector      # 根据 LabelSelector来选择匹配的pod所在的位置
maxSkew            # 描述了 pod 可能不均匀分布的程度,各节点pod数量比例的最大限制
topologyKey        # 用于指定带有此标签的节点在同一拓扑中。
whenUnsatisfiable  # 指示如果 Pod 不满足扩展约束,如何处理它。默认值是DoNotSchedule

maxSkew 默认值是1,也就是所有节点的分布式 1:1,如果这个值是大的话,则pod的分布可以是不均匀的。

2、拓朴调度-topologySpreadConstraints-实践

2.1、给节点打标签规划拓朴

kubectl label nodes master1 node=master1 zone=zoneA
kubectl label nodes node1 node=node1 zone=zoneA
kubectl label nodes node2 node=node2 zone=zoneB

拓朴结构:
  A区:master1、node1
  B区:node2

2.2、需求

将pod均匀分散到多个节点中

2.2、定义资源清单且应用

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pod-affinity-preferred
spec:
  replicas: 17
  selector:
    matchLabels:
      foo: bar
  template:
    metadata:
      labels:
        foo: bar
    spec:
      containers:
      - name: pod-test
        image: 192.168.10.33:80/k8s/pod_test:v0.1
        imagePullPolicy: IfNotPresent
      topologySpreadConstraints:
      - maxSkew: 7
        topologyKey: zone
        whenUnsatisfiable: DoNotSchedule
        labelSelector:
          matchLabels:
            foo: bar
EOF

2.3、查询

2.3.1、查看运行状态

]# kubectl  get pods -o wide
NAME                                      READY   STATUS    RESTARTS   AGE     IP             NODE    NOMINATED NODE   READINESS GATES
pod-affinity-preferred-5ffdc5975b-2qfhx   1/1     Running   0          2m25s   10.244.3.71    node1   <none>           <none>
pod-affinity-preferred-5ffdc5975b-4w9vp   1/1     Running   0          2m25s   10.244.3.72    node1   <none>           <none>
pod-affinity-preferred-5ffdc5975b-6b7x4   1/1     Running   0          2m25s   10.244.3.70    node1   <none>           <none>
pod-affinity-preferred-5ffdc5975b-6bsz8   1/1     Running   0          2m25s   10.244.3.73    node1   <none>           <none>
pod-affinity-preferred-5ffdc5975b-8rb7h   1/1     Running   0          2m25s   10.244.4.103   node2   <none>           <none>
pod-affinity-preferred-5ffdc5975b-9nxmh   1/1     Running   0          2m25s   10.244.4.104   node2   <none>           <none>
pod-affinity-preferred-5ffdc5975b-9x5mr   1/1     Running   0          2m25s   10.244.4.99    node2   <none>           <none>
pod-affinity-preferred-5ffdc5975b-9xkp6   1/1     Running   0          2m25s   10.244.4.101   node2   <none>           <none>
pod-affinity-preferred-5ffdc5975b-hkf9q   1/1     Running   0          2m25s   10.244.4.102   node2   <none>           <none>
pod-affinity-preferred-5ffdc5975b-nxnc2   1/1     Running   0          2m25s   10.244.4.100   node2   <none>           <none>
pod-affinity-preferred-5ffdc5975b-qs4qc   1/1     Running   0          2m25s   10.244.3.66    node1   <none>           <none>
pod-affinity-preferred-5ffdc5975b-s6pfw   1/1     Running   0          2m25s   10.244.3.68    node1   <none>           <none>
pod-affinity-preferred-5ffdc5975b-sn2ks   1/1     Running   0          2m25s   10.244.4.96    node2   <none>           <none>
pod-affinity-preferred-5ffdc5975b-ss29v   1/1     Running   0          2m25s   10.244.3.67    node1   <none>           <none>
pod-affinity-preferred-5ffdc5975b-t5fkn   1/1     Running   0          2m25s   10.244.4.97    node2   <none>           <none>
pod-affinity-preferred-5ffdc5975b-vjd6x   1/1     Running   0          2m25s   10.244.3.69    node1   <none>           <none>
pod-affinity-preferred-5ffdc5975b-z9rsf   1/1     Running   0          2m25s   10.244.4.98    node2   <none>           <none>

2.3.2、为什么没有往master1节点调度

原因:节点上有打了NoSchedule污点,所以不会往那里调度

master2 ~]# kubectl get nodes master1 -o jsonpath='{.spec.taints}'
[{"effect":"NoSchedule","key":"node-role.kubernetes.io/control-plane"}]

2.3.3、分布情况

分别调度的数量,还算比较平均
master2 ~]# kubectl  get pods -o wide | grep node1| wc -l
8

master2 ~]# kubectl  get pods -o wide | grep node2| wc -l
9

2.4、修改maxSkew=3、replicas=7观察分配的情况

2.4.1、修改配置清单且应用

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pod-affinity-preferred
spec:
  replicas: 7
  selector:
    matchLabels:
      foo: bar
  template:
    metadata:
      labels:
        foo: bar
    spec:
      containers:
      - name: pod-test
        image: 192.168.10.33:80/k8s/pod_test:v0.1
        imagePullPolicy: IfNotPresent
      topologySpreadConstraints:
      - maxSkew: 3
        topologyKey: zone
        whenUnsatisfiable: DoNotSchedule
        labelSelector:
          matchLabels:
            foo: bar
EOF

2.4.2、查看分配情况

master2 ~]# kubectl  get pods -o wide
NAME                                      READY   STATUS    RESTARTS   AGE     IP             NODE    NOMINATED NODE   READINESS GATES
pod-affinity-preferred-7799cc85f6-2m2hw   1/1     Running   0          2m21s   10.244.4.107   node2   <none>           <none>
pod-affinity-preferred-7799cc85f6-8gc6w   1/1     Running   0          2m18s   10.244.3.76    node1   <none>           <none>
pod-affinity-preferred-7799cc85f6-8jbl7   1/1     Running   0          2m19s   10.244.3.74    node1   <none>           <none>
pod-affinity-preferred-7799cc85f6-fmw4j   1/1     Running   0          2m18s   10.244.3.77    node1   <none>           <none>
pod-affinity-preferred-7799cc85f6-g9bqq   1/1     Running   0          2m19s   10.244.3.75    node1   <none>           <none>
pod-affinity-preferred-7799cc85f6-h9xjn   1/1     Running   0          2m21s   10.244.4.105   node2   <none>           <none>
pod-affinity-preferred-7799cc85f6-jzt9f   1/1     Running   0          2m21s   10.244.4.106   node2   <none>           <none>

# node1:4个pod node2:3个pod,节点数量调度按3:3的分配。

 

标签:49,调度,preferred,拓朴,5ffdc5975b,10.244,Running,affinity,pod
From: https://www.cnblogs.com/ygbh/p/17292913.html

相关文章

  • 巷道堆垛式立体车库调度算法研究
    在国家质检总局发布的《特种设备目录》中,立体车库分为九大类,分别是:升降横移简易升降垂直循环水平循环多层循环平面移动巷道堆垛垂直升降汽车专用升降影响立体车库运营服务效率主要是控制系统软件部分的存取车调度策略算法,而用户排队时间与车库服务效率息息相关 巷......
  • 48、K8S-调度机制-污点、容忍度调度之节点的Traint、Pod的tolerations
    Kubernetes学习目录1、基础知识1.1、回顾我们之前所学的所有调度策略,都是基于节点调度和pod调度选择我们新的pod资源应该如何创建,而实际的生产角度上,往往会出现基于node节点的属性来选择是否让新的pod资源进行创建,但是对于节点来说,没有所谓的节点反亲和性,但是有一种类似的策略......
  • Laravel 任务调度(计划任务,定时任务)
    一步骤1.生成调用文件。2.定义调度3.启动调动器二 生成调用文件1执行以下命令phpartisanmake:command你的命名该命令会在 app/Console/Commands 目录下创建 你命名的文件  三  定义调度文件修改好以后我们需要在 App\Console\Kernel 类的 schedule 方......
  • 新一代分布式任务调度框架
    本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~Github地址如果访问不了Github,可以访问gitee地址。gitee地址我们先思考......
  • 45、K8S-调度机制-节点调度之nodeAffinity、nodeName、nodeSelector
    Kubernetes学习目录1、配置解析1.1、简介我们知道,默认的调度策略有可能无法满足我们的需求,我们可以根据实际情况,定制自己的调度策略,然后整合到k8s的集群中。1.2、属性解析apiVersion:kubescheduler.config.k8s.io/v1beta1kind:KubeSchedulerConfigurationAlgorithmSou......
  • Springboot+ElasticJob-Lite实现集群任务调度
    前言ElasticJob-Lite是集群环境下应用(比如SpringCloud微服务)任务调度的解决方案。集群部署的时候,一个定时任务会有多个进程执行,如果不进行任何处理,会导致任务触发的时候每个进程重复执行一次。解决办法有两种:一种是加锁,保证同时只有一个进程执行任务,比如用分布式锁,或者用任务调......
  • 44、K8S-调度机制-理论知识
    1、调度体系1.1、流程图1.1.1、架构层面-集群的组成1.1.2、资源层面-k8s集群资源的管控1.1.3、网络层面-k8s集群资源的访问1.1.4、认证层面-k8s集群资源的认证1.1.5、pod周期-pod创建的完整流程1.1.6、pod创建流程  1.1.7、存储层面 1.1.8、创建层面-资源......
  • GaussDB(DWS)网络调度与隔离管控能力
    摘要:调度算法是调度器的核心,设计调度算法要充分考虑业务场景和用户需求,没有万能的调度算法,只有合适的调度算法。本文分享自华为云社区《GaussDB(DWS)网络调度与隔离管控能力》,作者:门前一棵葡萄树。一、常见的调度算法QoS(QualityofService)即服务质量,是一种调度控制机制,是网络设计......
  • Kubernetes——问题与解决方案一、k8s重启报错 :The connection to the server 192.168
    摘要Kubernetes运行过程中出现的各种问题,因此本人整理出本人遇到的有关于的k8s的相关问题和解决方案一、k8s重启报错:Theconnectiontotheserver192.168.102.149:6443wasrefused1.1现象k8s重启报错#kubectlgetpodsTheconnectiontotheserverxxx:6443wasrefused......
  • 分布式定时任务调度框架实践
    vivo互联网技术微信公众号 作者:陈王荣分布式任务调度框架几乎是每个大型应用必备的工具,本文介绍了任务调度框架使用的需求背景和痛点,对业界普遍使用的开源分布式任务调度框架的使用进行了探究实践,并分析了这几种框架的优劣势和对自身业务的思考。一、业务背景1.1为什么需要使......