• K8s: 在Pod中使用亲和性调度节点


    用节点亲和性把 Pods 分配到节点

    • 在 K8s 集群中,如何使用节点亲和性把 Pod 分配到特定节点
    • 机器资源各不相同,配置不同,一些应用对配置有要求的需要部署到相关机器上
    • 应用场景
      • 场景1: 对读写性能要求较高的pod部署到安装ssd的机器上
      • 场景2: 把同一类型的应用部署到一起,比如 db 数据库类的
    • 列出集群中的节点及其标签:$ kubectl get nodes --show-labels
    NAME         STATUS   ROLES                  AGE   VERSION   LABELS
    master.k8s   Ready    control-plane,master   44h   v1.22.4   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master.k8s,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
    node1.k8s    Ready                     44h   v1.22.4   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1.k8s,kubernetes.io/os=linux
    node2.k8s    Ready                     44h   v1.22.4   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2.k8s,kubernetes.io/os=linux
    
    • 1
    • 2
    • 3
    • 4

    1 )场景 1

    • 选择一个节点,给它添加一个标签:

    • $ kubectl label nodes disktype=ssd

      • 这里 是你的一个节点名称,比如: node1.k8s
    • 验证你所选节点具有 disktype=ssd 标签:
      $ kubectl get nodes --show-labels

    • 依据强制的节点亲和性调度 Pod, 下面清单描述了一个 Pod

    • 它有一个节点亲和性配置 requiredDuringSchedulingIgnoredDuringExecution , disktype=ssd

    • 这意味着 pod 只会被调度到具有 disktype=ssd 标签的节点上

    • 亲和性有很多类型,这里是一种节点亲和性

    • 创建 affinity.yaml

      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx
      spec:
        affinity:
          nodeAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              nodeSelectorTerms:
              - matchExpressions:
                - key: disktype
                  operator: In
                  values:
                  - ssd 
        containers:
        - name: aff-nginx
          image: nginx
          imagePullPolicy: IfNotPresent
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
    • $ kubectl create -f affinity.yaml

    • $ kubectl describe pod aff-nginx

    • 可以看到非常准确的部署到 设置了 distype=ssd 的那个节点机器上了

    • 如果有移除相关label, 参考: $ kubectl label nodes node2.k8s disktype-

    2 )场景2: 将数据库类型的应用部署到 db 类型的节点上

    • 类似的,比如想要把某个数据库应用部署到 node2.k8s上,
    • 为 node2.k8s 设置 相应的 label, 如: $ kubectl label nodes node1.k8s type=db
    • 在 affinity.yaml 中
      spec:
        affinity:
          nodeAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              nodeSelectorTerms:
              - matchExpressions:
                - key: type
                  operator: In
                  values:
                  - db
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    • 这样,应用就会被部署到相应设置节点的机器上
  • 相关阅读:
    rdkit 力场优化UFFOptimizeMolecule、MMFFOptimizeMolecule
    ubuntu 22.04 flameshot 截图异常的问题
    C#堆排序算法
    标准C库IO函数和Linux系统IO函数
    手把手教你写Linux线程池
    【精华】ubuntu编译openpose
    乐观型人格分析,性格乐观的优缺点和职业发展分析
    java运算操作符示例大全
    Amazon云计算AWS(二)
    SpringBoot + Mybatis + log4j2 + SpringSecurity
  • 原文地址:https://blog.csdn.net/Tyro_java/article/details/137948861