• 用节点亲和性把 Pod 分配到节点


    节点亲和性把 Pod 分配到节点

    在这里插入图片描述

    当前集群信息

    root@k8s-master:~# kubectl get node -o wide
    NAME         STATUS   ROLES                  AGE    VERSION   INTERNAL-IP       EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
    k8s-master   Ready    control-plane,master   683d   v1.22.0   192.168.123.150           Ubuntu 18.04.5 LTS   4.15.0-213-generic   docker://20.10.0
    k8s-node1    Ready                     683d   v1.22.0   192.168.123.151           Ubuntu 18.04.5 LTS   4.15.0-213-generic   docker://20.10.0
    k8s-node2    Ready                     683d   v1.22.0   192.168.123.152           Ubuntu 18.04.5 LTS   4.15.0-213-generic   docker://20.10.0
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    给节点添加标签

    • 列出集群节点及标签

      root@k8s-master:~# kubectl get node --show-labels
      NAME         STATUS   ROLES                  AGE    VERSION   LABELS
      k8s-master   Ready    control-plane,master   683d   v1.22.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
      k8s-node1    Ready                     683d   v1.22.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disk=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux
      k8s-node2    Ready                     683d   v1.22.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disk=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    • 选择一个节点,给它添加标签(这里我选择node1节点):

      root@k8s-master:~# kubectl label nodes k8s-node1 nodetype=dev
      node/k8s-node1 labeled
      root@k8s-master:~# kubectl get node k8s-node1 --show-labels
      NAME        STATUS   ROLES    AGE    VERSION   LABELS
      k8s-node1   Ready       683d   v1.22.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disk=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux,nodetype=dev
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      这里给node1打上nodetype=dev标签

    依据强制的节点亲和性调度 Pod

    下面清单描述了一个 Pod,它有一个节点亲和性配置 requiredDuringSchedulingIgnoredDuringExecutionnodetype=dev。 这意味着 pod 只会被调度到具有 nodetype=dev 标签的节点上。

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: nodetype
                operator: In
                values:
                - dev           
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    通过此yml文件执行,发现刚刚创建的Pod在node1节点执行

    
    root@k8s-master:~# kubectl get pod -o wide | grep k8s-node1
    nginx                                     1/1     Running   0                77s     10.244.36.68     k8s-node1              
    
    • 1
    • 2
    • 3

    使用首选的节点亲和性调度 Pod

    本清单描述了一个 Pod,它有一个节点亲和性设置 preferredDuringSchedulingIgnoredDuringExecutionnodetype=dev。 这意味着 Pod 将首选具有 nodetype=dev 标签的节点。

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: disktype
                operator: In
                values:
                - ssd          
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    SimVODIS++: Neural Semantic Visual Odometry in Dynamic Environments 论文阅读
    嵌入式经验分享:面试薪资直接翻番,我才明白TA的重要性!
    深度学习课后week2 编程(识别猫)
    【node.js】第六章 初识express
    GBASE 8s dbspace配置参数
    910数据结构(2020年真题)
    C++——无锁链表的探索
    java---DFS算法---排列数字(每日一道算法2022.8.19)
    【必看】Midjourney订阅前必看的十件事
    pg数据库加密和解密,对应java的加密和解密
  • 原文地址:https://blog.csdn.net/weixin_51882166/article/details/133974150