【模块一】kubernetes容器编排进阶实战之kubernetes nodeSelector、nodeName、node Affinity与anti-affinity

一:node Affinity与anti-affinity

Pod调度流程

Pod调度流程

1:nodeSelector

nodeSelector简介
  • nodeSelector 基于node标签选择器,将pod调度的指定的目的节点上。

  • 可用于基于服务类型干预Pod调度结果,如对磁盘I/O要求高的pod调度到SSD节点,对内存要求比较高的 pod调度的内存较高的节点。

  • 也可以用于区分不同项目的pod,如将node添加不同项目的标签,然后区分调度。

  • # kubectl describe node 172.31.7.111 #默认标签

 

nodeSelector案例
  • 为node节点打标签

    • kubectl label node 172.31.7.111 project="magedu"

      • node/172.31.7.111 labeled

    • kubectl label node 172.31.7.111 disktype="ssd"

      • node/172.31.7.111 labeled

  • 将pod调度到目的node,yaml文件中指定的key与value必须精确 匹配:

    • kubectl apply -f case1-nodeSelector.yaml

      • deployment.apps/magedu-tomcat-app2-deployment created

  • 为node节点打其它标签:

    • kubectl label node 172.31.7.112 disktype="ssd"

      • node/172.31.7.111 labeled

[root@k8s-master1 Affinit-case]#cat case1-nodeSelector.yaml 
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
  labels:
    app: magedu-tomcat-app2-deployment-label
  name: magedu-tomcat-app2-deployment
  namespace: magedu
spec:
  replicas: 4
  selector:
    matchLabels:
      app: magedu-tomcat-app2-selector
  template:
    metadata:
      labels:
        app: magedu-tomcat-app2-selector
    spec:
      containers:
      - name: magedu-tomcat-app2-container
        image: tomcat:7.0.94-alpine 
        imagePullPolicy: IfNotPresent
        #imagePullPolicy: Always
        ports:
        - containerPort: 8080
          protocol: TCP
          name: http
        env:
        - name: "password"