pod调度

kube-scheduler 是 Kubernetes 集群的默认调度器; 在做调度决定时需要考虑的因素包括: 单独和整体的资源请求、硬件/软件/策略限制、亲和以及反亲和要求、数据局域性、负载间 的干扰等等

一,指定nodeName

一,指定nodeName:(与containers同级别) 

示例:

spec:
  containers:
  - name: nginx
    image: nginx
  nodeName: node1

1)如果节点没有资源容纳pod,则调度失败 
2)节点不存在,调度失败


二,nodeSelector

二,nodeSelector(与containers同级别) 
示例:

# 给node1打标签
kubectl label nodes node1 disktype=ssd

#指定按照标签选择节点 
spec:
  containers:
  - name: nginx
    image: nginx
  nodeSelector:
    disktype: ssd 

1) 如果没有匹配到标签会无法运行pod,pending状态
2) 删除node标签不会影响已运行的pod,伸缩或者重新部署会pending



三,亲和/反亲和



(基于上面的nodeSelector扩展,nodeSelector匹配不到标签会调度失败,可以发现规则是“软”/“偏好”,而不是硬性要求,因此,如果调度器无法满足该要求,仍然调度该pod)

节点亲和
• requiredDuringSchedulingIgnoredDuringExecution 必须满足
• preferredDuringSchedulingIgnoredDuringExecution 倾向满足
• IgnoreDuringExecution 表示如果在Pod运行期间Node的标签发生变化,导致 亲和性策略不能满足,则继续运行当前的Pod。


nodeaffinity还支持多种规则匹配条件的配置:
• In: label 的值在列表内
• NotIn: label 的值不在列表内
• Gt: label 的值大于设置的值,不支持Pod亲和性 • Lt:label 的值小于设置的值,不支持pod亲和性 • Exists:设置的label 存在
• DoesNotExist: 设置的 label 不存在


示例1: spec:
  containers:
  - name: nginx
    image: nginx
      spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: disktype
                    operator: In
                    values:
                      - ssd

必须满足,调度到标签为disktype=ssd的节点上





示例2: 
  template:
    metadata:
      labels:
        app: nginx
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:   
            - preference:
                matchExpressions:
                  - key: disktype
                    operator: In
                    values:
                      - ssd
              weight: 1
          requiredDuringSchedulingIgnoredDuringExecution:     
            nodeSelectorTerms:
              - matchExpressions:
                  - key: kubernetes.io/hostnme
                    operator: NotIn
                    values:
                      - cn-shanghai.192.168.50.27

1) 倾向满足调度到,标签为disktype=ssd的节点上
2) 必须满足,不调度在节点cn-shanghai.192.168.50.27上






示例3:

  template:
    metadata:
      labels:
        app: nginx
    spec:
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
            - podAffinityTerm:
                labelSelector:
                  matchExpressions:
                    - key: disktype
                      operator: In
                      values:
                        - ssd
                topologyKey: kubernetes.io/hostname
              weight: 100
反亲和
不调度到,标签为disktype=ssd的节点


四,污点

# • Taints(污点)是Node的一个属性,设置了Taints后,所以Kubernetes是不会将 Pod调度到这个Node上的,

于是Kubernetes就给Pod设置了个属性Tolerations(容忍), 只要 Pod能够容忍Node上的污点,那么Kubernetes就会忽略Node上的污点,就能够(不是必须)把Pod调度过去


tolerations中定义的key、value、effect,要与node上设置的taint保持一致: 
• 如果 operator 是 Exists ,value可以省略。
• 如果 operator 是 Equal ,则key与value之间的关系必须相等。
• 如果不指定operator属性,则默认值为Equal

还有两个特殊值:
• 当不指定key,再配合Exists 就能匹配所有的key与value ,可以容忍所有污点。 • 当不指定effect ,则匹配所有的effect。
#必须满足

 # 添加污点
kubectl taint node node1 node-role.kubernetes.io/master:NoSchedule

#Toleration(容忍) 
operator可以定义为:
Equal:表示key是否等于value,默认 Exists:表示key是否存在,此时无需定义value
tain 的 effect 定义对 Pod 排斥效果 

NoSchedule:仅影响调度过程,对现存的Pod对象不产生影响; 
NoExecute:既影响调度过程,也影响显著的Pod对象;不容忍的Pod对象将被驱逐
PreferNoSchedule: 表示尽量不调度




#示例1: 

spec:
      containers:
      - name: myapp
        image: myapp:v1
      tolerations:
        - effect: NoExecute
          key: kafka
          operator: Equal
          value: kafkadaptation
#以上的配置容忍kafka=kafkadaptation,则打了污点的标签可以调度(如果没有这个配置的容器,不可以被调度打了污点的节点上)






#示例2: containers:
      - name: myapp
        image: myapp:v1
      tolerations:
      - operator: "Exists"
        effect: "NoSchedule"
tolerationSeconds: 6000(当 pod 需要被驱逐时,可以继续在 node 上 运行的时间)

# 当不指定key,再配合Exists 就能匹配所有的key与value ,可以容忍所有污点。(容忍后有污点的节点都可以调度)

1)如果effect是NoSchedule(如上),则打了污点的NoSchedule节点也会被调度
2)如果effect是NoExecute,则打了污点的NoExecute节点可以被调度
3)如果不指定effect,则忽视所有污点,所有打了污点的标签都可以被调度(如示例3)



#示例3:

      containers:
      - name: myapp
        image: myapp:v1
      tolerations:
      - operator: "Exists"
# • 当不指定effect ,则匹配所有的effect。即所有污点都会忽视





PS1:
如果想让一个deployment不管有多少个pod都在一个节点上,
      tolerations:
        - effect: NoExecute
          key: wd
          operator: Equal
          value: wd

只能NoExecute才可以做到




PS2:
如果10个节点打了一样的污点,有10个deployment需要在这10台机器跑,并且各个服务之间的pod不能再用一个节点上(10个deployment各只有一个pod为例)


# 设置pod反亲和
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: adaptor
                    operator: In
                    values:
                      - adaptor
              topologyKey: kubernetes.io/hostname
      containers:
... ...
          resources:
            requests:
              cpu: 250m
              memory: 64Mi
      terminationGracePeriodSeconds: 30
# 增加容忍度
      tolerations:
        - effect: NoExecute
          key: kafka
          operator: Equal
          value: kafkadaptation
      volumes:
        - hostPath:
            path: /etc/localtime
            type: ''
          name: volume-localtime

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,194评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,058评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,780评论 0 346
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,388评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,430评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,764评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,907评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,679评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,122评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,459评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,605评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,270评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,867评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,734评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,961评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,297评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,472评论 2 348

推荐阅读更多精彩内容