目录

POD的资源调度( nodeSelector & nodeAffinity)

 nodeSelector:

案例

nodeAffinity

案例


POD的资源调度( nodeSelector & nodeAffinity

 nodeSelector

                         用于将Pod调度到匹配Label的Node上,如果没有匹配的标签会调度失败。
                         作用: • 约束Pod到特定的节点运行 • 完全匹配节点标签 
       应用场景:• 专用节点:根据业务线将Node分组管理
                        • 配备特殊硬件:部分Node配有SSD硬盘、GPU

案例

现在我的k8s服务器有两类服务器,一种是ssd磁盘的服务器,一种是GPU的,此时我们有一个mysql容器,默认情况下他会随机分配在其中一个节点,但我们现在想把它分配在ssd磁盘服务器上
此时,我们可以在ssd服务器上打一个标签,标签内容为disktype=ssd,在写pod的yaml的时候可以现在将pod分配到这个标签节点
  示例:确保Pod分配到具有SSD硬盘的节点上
第一步:给节点添加标签
格式:kubectl label nodes <node-name> <label-key>=<label-value>
例如:
kubectl label nodes k8s-node1 disktype=ssd
验证:kubectl get nodes --show-labels
可以看到已经打上了,其他标签都是自带标签
第二步:添加nodeSelector字段到Pod配置中
例如
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: pod1
  name: pod1
spec:
  nodeSelector:
    disktype: 'ssd'
  containers:
  - image: nginx
    name: web
最后,验证:
kubectl get pods -o wide
可以看到精确分配到了node1
注意:若在创建时分配了标签,但节点中不存在这个标签的话,pod会进入pending状态,无法分配。
           如果两个节点打了一个标签,pod被分配到这个标签的话,pod会被随机分配到其中一个标签

nodeAffinity

           nodeAffinity:节点亲和性,与nodeSelector作用一样,但相比 更灵活,满足更多条件,诸如:
                                  • 匹配有更多的逻辑组合,不只是字符串的完全相等,支持的操作 符:In、NotIn、Exists、DoesNotExist、Gt、Lt 
                                  • 调度分为软策略和硬策略,而不是硬性要求 
                                  • 硬(required):必须满足 
                                  • 软(preferred):尝试满足,但不保证
例如

案例

硬性关联,此yaml意思是in,节点必须有这个标签才算满足
apiVersion: v1
kind: Pod
metadata:
  name: with-node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: disktype  # 键
            operator: In  # 操作符,NotIn 分配不满足标签的节点
            values:  # 值
            - ssd
  containers:
  - name: with-node-affinity
    image: nginx
软性关联:软性关联是类似于,模糊匹配,他是尝试满足但不保证,有一个权重值 (优先满足但不保证)
apiVersion: v1
kind: Pod
metadata:
  name: with-node-affinity2
spec:
  affinity:
    nodeAffinity:
      #requiredDuringSchedulingIgnoredDuringExecution:
      #  nodeSelectorTerms:
      #  - matchExpressions:
      #    - key: disktype  # 键
      #      operator: In  # 操作符,NotIn 分配不满足标签的节点
      #      values:  # 值
      #      - ssd
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1 # 权重值,1-100
        preference:
          matchExpressions:
          - key: gpu
            operator: In
            values:
            - navida
  containers:
  - name: with-node-affinity
    image: nginx
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐