目录
- vim nodename.yaml
-
- apiVersion: v1
- kind: Pod
- metadata:
- name: nginx
- labels:
- app: nginx
-
- spec:
- containers:
- - name: nginx
- image: nginx
- nodeName: k8s3 #找不到节点pod会出现pending,优先级最高

nodeSelector 是节点选择约束的最简单推荐形式。(标签优先调度到哪里下次还在哪里)。如果俩个同时有标签,但是一个的资源不够,才会调度到另一个主机上。
- vim nodeselector.yaml
-
- apiVersion: v1
- kind: Pod
- metadata:
- name: nginx
- spec:
- containers:
- - name: nginx
- image: nginx
- imagePullPolicy: IfNotPresent
- nodeSelector:
- disktype: ssd
-
- kubectl label nodes k8s2 disktype=ssd
- kubectl label nodes k8s3 disktype=ssd

节点的:
- vim nodeaffinity.yaml
- apiVersion: v1
- kind: Pod
- metadata:
- name: node-affinity
- spec:
- containers:
- - name: nginx
- image: nginx
- affinity:
- nodeAffinity:
- requiredDuringSchedulingIgnoredDuringExecution: ## 必须满足
- nodeSelectorTerms: ##节点选择
- - matchExpressions: ##匹配kv
- - key: disktype
- operator: In
- values: ##ssd或fc
- - ssd
- - fc
-
- preferredDuringSchedulingIgnoredDuringExecution: ##倾向满足
- - weight: 1 ##权重(可以定向多种倾向满足类型)
- preference:
- matchExpressions:
- - key: kubernetes.io/hostname ##key
- operator: NotIn ##不在列表内
- values:
- - k8s3 ##key的值

pod:
- vim podaffinity.yaml
- apiVersion: apps/v1
- kind: Deployment ##创建控制器
- metadata:
- name: nginx-deployment
- labels:
- app: nginx
- spec:
- replicas: 3
- selector:
- matchLabels:
- app: nginx
- template:
- metadata:
- labels:
- app: nginx
- spec:
- containers:
- - name: nginx
- image: nginx
- affinity:
- podAffinity: ##pod亲和
- requiredDuringSchedulingIgnoredDuringExecution: ##必须满足
- - labelSelector:
- matchExpressions:
- - key: app ##app=nginx的pod
- operator: In
- values:
- - nginx
- topologyKey: "kubernetes.io/hostname"

- [root@k8s2 node]# vim podantiaffinity.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: nginx-deployment
- labels:
- app: nginx
- spec:
- replicas: 3
- selector:
- matchLabels:
- app: nginx
- template:
- metadata:
- labels:
- app: nginx
- spec:
- containers:
- - name: nginx
- image: nginx
- affinity:
- podAntiAffinity: ##比较亲和,加了Anti
- requiredDuringSchedulingIgnoredDuringExecution:
- - labelSelector:
- matchExpressions:
- - key: app
- operator: In
- values:
- - nginx
- topologyKey: "kubernetes.io/hostname"

pod反亲和倾向满足
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: node-affinity
- spec:
- replicas: 3
- selector:
- matchLabels:
- app: nginx
- template:
- metadata:
- labels:
- app: nginx
- spec:
- tolerations:
- - effect: NoSchedule
- operator: Exists
- - effect: NoExecute
- operator: Exists
- containers:
- - name: nginx
- image: nginx
- affinity:
- podAntiAffinity:
- preferredDuringSchedulingIgnoredDuringExecution:
- - weight: 100
- podAffinityTerm:
- labelSelector:
- matchExpressions:
- - key: app
- operator: In
- values:
- - nginx
- topologyKey: kubernetes.io/hostname
-
- nodeAffinity:
- requiredDuringSchedulingIgnoredDuringExecution:
- nodeSelectorTerms:
- - matchExpressions:
- - key: disktype
- operator: In
- values:
- - ssd
- - sata

其中[effect] 可取值: [ NoSchedule | PreferNoSchedule | NoExecute ]
- vim taint.yaml
-
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- labels:
- app: web
- name: web
- spec:
- replicas: 3
- selector:
- matchLabels:
- app: web
- template:
- metadata:
- labels:
- app: web
- spec:
- containers:
- - image: nginx
- name: nginx

- kubectl taint node k8s2 k1=v1:NoSchedule
- kubectl describe nodes k8s2 |grep Tain
- kubectl scale deployment web --replicas 6
- kubectl taint node k8s2 k1=v1:NoExecute
- kubectl describe nodes k8s2 |grep Tain

设置 tolerations
tolerations中定义的key、value、effect,要与node上设置的taint保持一直:
还有两个特殊值:
- vim taint.yaml
-
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- labels:
- app: web
- name: web
- spec:
- replicas: 6
- selector:
- matchLabels:
- app: web
- template:
- metadata:
- labels:
- app: web
- spec:
- tolerations:
- - operator: Exists ##
- effect: NoSchedule ##
- containers:
- - image: nginx
- name: nginx

容忍所有taints
- vim taint.yaml
-
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- labels:
- app: web
- name: web
- spec:
- replicas: 6
- selector:
- matchLabels:
- app: web
- template:
- metadata:
- labels:
- app: web
- spec:
- tolerations:
- - operator: Exists
- containers:
- - image: nginx
- name: nginx


- kubectl create deployment demo --image nginx --replicas 3
- kubectl cordon k8s2
- kubectl get node
- kubectl scale deployment demo --replicas 6
-
-
- kubectl drain k8s2 --ignore-daemonsets
-
-
-
- kubectl delete nodes k8s2
- kubectl get node


k8s2节点重启kubelet服务重新加入集群
- systemctl restart kubelet
- kubectl get node

