美文网首页linux运维
k8s部署-38-带你了解并自定义pod调度策略(下)

k8s部署-38-带你了解并自定义pod调度策略(下)

作者: 运维家 | 来源:发表于2022-04-25 22:04 被阅读0次

    pod调度的理论我们经过上一篇文章的介绍,都了解的差不多了哈,那么我们接下来就该具体来实操了。毕竟,纸上得来终觉浅,绝知此事要躬行嘛。

    前言

    上一篇是理论,本篇是实操。

    节点亲和性

    [root@node1 ~]# cd namespace/[root@node1 namespace]# mkdir pod-scheduler[root@node1 namespace]# cd pod-scheduler/[root@node1 pod-scheduler]# apiVersion: apps/v1kind: Deploymentmetadata:  name: web-demo-node  namespace: devspec:  selector:    matchLabels:      app: web-demo-node  replicas: 1  template:    metadata:      labels:        app: web-demo-node    spec:      containers:      - name: web-demo-node        image: registry.cn-beijing.aliyuncs.com/yunweijia0909/springboot-web:v1        ports:        - containerPort: 8080      affinity:        nodeAffinity:          requiredDuringSchedulingIgnoredDuringExecution:            nodeSelectorTerms:            - matchExpressions:              - key: beta.kubernetes.io/arch                operator: In                values:                - amd64          preferredDuringSchedulingIgnoredDuringExecution:          - weight: 1            preference:              matchExpressions:              - key: disktype                operator: NotIn                values:                - ssd[root@node1 pod-scheduler]#

    解释:

    就是说我这个pod,想要运行在哪个节点上;主要是affinity那块的东西

          affinity:        nodeAffinity:  # 表示是node亲和性          requiredDuringSchedulingIgnoredDuringExecution: # 是必要条件            nodeSelectorTerms:              - matchExpressions:              - key: beta.kubernetes.io/arch                operator: In                values:                - amd64  # 必须运行在label是:beta.kubernetes.io/arch=amd64上          preferredDuringSchedulingIgnoredDuringExecution:  # 表示最好在这里          - weight: 1            preference:              matchExpressions:              - key: disktype                operator: NotIn                values:                - ssd  # 最好运行在label是:disktype 不等于 ssd上

    如果有两个必要条件,比如同时满足,需要配置和matchExpressions同级。如下:

                - matchExpressions:              - key: beta.kubernetes.io/arch                operator: In                values:                - amd64              - key: type                operatos: In                values:                - blue

    如果说是两个必要条件,满足其一即可的话,需要配置和nodeSelectorTerms同级。如:

              nodeSelectorTerms:            - matchExpressions:              - key: beta.kubernetes.io/arch                operator: In                values:                - amd64          nodeSelectorTerms:            - matchExpressions:              - key: type                operator: In                values:                - blue

    POD亲和性

    [root@node1 pod-scheduler]# vim wed-pod.yaml apiVersion: apps/v1kind: Deploymentmetadata:  name: web-demo-pod  namespace: devspec:  selector:    matchLabels:      app: web-demo-pod  replicas: 1  template:    metadata:      labels:        app: web-demo-pod    spec:      containers:      - name: web-demo-pod        image: registry.cn-beijing.aliyuncs.com/yunweijia0909/springboot-web:v1        ports:        - containerPort: 8080      affinity:        podAffinity:          requiredDuringSchedulingIgnoredDuringExecution:          - labelSelector:              matchExpressions:              - key: app                operator: In                values:                - web-demo            topologyKey: kubernetes.io/hostname          preferredDuringSchedulingIgnoredDuringExecution:          - weight: 100            podAffinityTerm:              labelSelector:                matchExpressions:                - key: app                  operator: In                  values:                  - web-demo-node              topologyKey: kubernetes.io/hostname[root@node1 pod-scheduler]#

    解释:

    表示在一定的范围内,想和某个pod调度在一起,或者说不想和某个pod调度在一起。看下配置:

          affinity:        podAffinity:  # POD亲和性          requiredDuringSchedulingIgnoredDuringExecution:  # 必要条件          - labelSelector:              matchExpressions:              - key: app                operator: In                values:                - web-demo            topologyKey: kubernetes.io/hostname  # 必须和app=web-demo的pod运行在同一个节点上          preferredDuringSchedulingIgnoredDuringExecution:  # 最好条件          - weight: 100            podAffinityTerm:              labelSelector:                matchExpressions:                - key: app                  operator: In                  values:                  - web-demo-node              topologyKey: kubernetes.io/hostname  # 最好和app=web-demo-node的app运行在同一节点

    那万一我们有一个不想和某个pod运行在一起的诉求的时候我们怎么做呢?配置成下面就好了:

          affinity:        podAntiAffinity:  # 这里这里,改的是这里,表示不想,不愿意          requiredDuringSchedulingIgnoredDuringExecution:          - labelSelector:              matchExpressions:              - key: app                operator: In                values:                - web-demo            topologyKey: kubernetes.io/hostname          preferredDuringSchedulingIgnoredDuringExecution:          - weight: 100            podAffinityTerm:              labelSelector:                matchExpressions:                - key: app                  operator: In                  values:                  - web-demo-node              topologyKey: kubernetes.io/hostname

    污点

    是不是还有一种可能性,就是说我这个node就不想给他们使用,或者说我这个node有点儿特殊,比如说我的gpu资源,或者说别的什么,总之就是不想让别人用,这个时候怎么处理呢,那你不能让每一个pod都配置亲和性呀,这个时候我们就引入了“污点”这个概念,当你node打了个污点之后,正常的pod是不会调度到你这个node节点上的。

    剩余内容请转至VX公众号 “运维家” ,回复 “145” 查看。

    ------ 以下内容为防伪内容,忽略即可 ------

    ------ 以下内容为防伪内容,忽略即可 ------

    ------ 以下内容为防伪内容,忽略即可 ------

    电视盒linux怎么查看linux内存linux仿maclinux键盘上怎么打linuxusb复合设备linux文件备份的方法linux添加网关不生效电脑以linux系统启动linux上运行msilinux移动文件怎么操作linux系统检查ntplinux复制代码命令行linux如何下载c语言linux授权sodolinux中lcd显示时间虚拟机linux命令怎么设置linux下存储怎么知道linux连上网了linux怎么删除指定字符串csdn中linux教程

    相关文章

      网友评论

        本文标题:k8s部署-38-带你了解并自定义pod调度策略(下)

        本文链接:https://www.haomeiwen.com/subject/uupqyrtx.html