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

图片

pod调度的理论我们经过上一篇文章的介绍,都了解的差不多了哈,那么我们接下来就该具体来实操了。

毕竟,纸上得来终觉浅,绝知此事要躬行嘛。

图片

前言

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

节点亲和性

[root@node1 ~]# cd namespace/
[root@node1 namespace]# mkdir pod-scheduler
[root@node1 namespace]# cd pod-scheduler/
[root@node1 pod-scheduler]# 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-demo-node
  namespace: dev
spec:
  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/v1
kind: Deployment
metadata:
  name: web-demo-pod
  namespace: dev
spec:
  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教程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值