做一个寡言清淡的男孩子,目有所望,心有所想,以诚挚之心,领岁月之教诲。

Pod调度

  • 自动调度

    • 通过schedular经过一系列运算得出
  • 定向调度

    • NodeName NodeSeletor通过标签选择进行调度
    #通过nodeName 调度至指定节点node1
    ...
    spec:
    	containers:
    	-name: wangzi
    	  image: nginx:latest
    	nodeName: node1
    ...
    
    #通过NodeSeletor 调度至指定 具有 shuai=wangzi 标签的节点 
    ...
    spec:
    	containers:
    	-name: wangzi
    	  image: nginx:latest
    	nodeSeletor: 
    		shuai: wangzi
    ...
    
  • 亲和性调度

    • NodeAffinity PodAffinity PodAntiAffinity
    亲和性:
    	如果两个应用频繁交互,可以利用亲和性将两个应用接近,减少网络通信带来的性能损耗
    反亲和性:
    	当一个应用采用多副本部署时,采用反亲和性将应用分布在不同的node上,提高服务的高可用性
    
    kubectl explain pod.spec.affinity.nodeAffinity
    
    #如果没找到符合要求的节点,会选择一个别的节点调度上去
    preferredDuringSchedulingIgnoredDuringExecution
       preference 节点选择器项,与相应的权重关联
       weight 权重
         Weight associated with matching the corresponding nodeSelectorTerm, in the
         range 1-100.
    #必须符合要求的节点才能调度上去
    requiredDuringSchedulingIgnoredDuringExecution
        nodeSelectorTerms
             matchExpressions
             	key: wangzi
             	value: zuishuai
             	operator: Exists In Gt Lt等
     例子:
     matchExpressions: 
     -key: dev
     	operator: Exists  #匹配存在标签的key为 dev的节点
     	
     matchExpressions: 
     -key: dev
     	operator: In
     	values: ['wz', 'zs'] #匹配标签的key为dev,且value是‘wz’ ‘zs’的节点
    
    kubectl explain pod.spec.affinity.podAffinity
    
    #如果没找到符合要求的pod,会选择一个别的pod调度上去
    preferredDuringSchedulingIgnoredDuringExecution
    	podAffinityTerm
    	
    	weight
    
    #必须符合要求的pod才能调度上去
    requiredDuringSchedulingIgnoredDuringExecution
    	namespaces 指定参照pod的命名空间
    	topologyKey 调度的作用域
    		kubernetes.io/hostname 以node节点为区分范围
    		kubernetes.io/os 以node节点的操作系统类型来区分
        labelSelector 
        	
    例子
    ...
    spec:
    	containers:
    	-name: wangzi
    	  image: nginx:latest
    	affinity:
    		podAffinity: #pod亲和性
    			requiredDuringSchedulingIgnoredDuringExecution:
    			-labelSelector:
    				matchExpressions: 
                     -key: dev
                        operator: In
                        values: ['wz', 'zs']
                  topologyKey: 
                  	kubernetes.io/hostname  #必须 调度到符合 标签key为dev value为wz zs的pod														所在的节点上去 
    ...
    
  • 污点调度

    • Taints Toleration

    • 通过为node设置污点,来决定是否允许将pod调度过来

    • effect

      • PerferNoSchedule: 尽量不要来我这,除非没办法
      • NoSchedule: 新的不要来,已经在这的就好好呆着
      • NoExcute: 新的不要来,旧的赶紧走
    • 命令

      #设置污点
      kubectl taint nodes wangzi key=zuishuai:effect
      
      #去除污点
      kubectl taint nodes wangzi key:effect-
      
      #去除所有污点
      kubectl taint nodes wangzi key-
      
    • 默认情况下不会调度到master节点,因为master配置了污点NoSchedule标记
      在这里插入图片描述

  • 容忍

    • 如果说污点是拒绝,容忍就是忽略

      ...
      spec:
      	containers:
      	-name: wangzi
      	  image: nginx:latest
      	tolerations:  #添加容忍
      	-key: 'dev' #添加容忍的key
      		operator: 'euqal' #操作符
      		value: 'k8s-test' #添加容忍的value
      		effect: 'NoExcute' #添加容忍规则,必须和标记的节点污点规则一直
      		tolerationSeconds:10s #当effect为NoExcute时生效,pod在node上停留时间。
      ...
      
Logo

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

更多推荐