背景介绍
一般情况部署的Pod是通过集群的自动调度策略来选择节点,默认情况下调度器考虑的是资源足够,并且负载尽量平均。但是有时候我们并不需要一些服务都部署在同一节点上,害怕服务之间产生影响;但是有时候也需要部署在同一节点上。这时候就用到了亲和性与反亲和性
亲和性种类:nodeAffinity(节点亲和性)、podAffinity(Pod亲和性)
nodeSelector
首先了解最常见与简单的调度方法nodeSelector。通过匹配label去匹配Pod资源。查看node的label
kubectl get nodes --show-labels
为node添加label
kubectl label nodes node1 app=test
之后在Pod的yaml文件中的spec字段添加即可,文档添加的是node-role.kubernetes.io/worker(kubernetes内置节点标签)
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
app: test
亲和性与反亲和性
调度策略:软策略与硬策略
- 软策略:满足条件最好,不满足也可以。preferredDuringSchedulingIgnoredDuringExecution
- 硬策略:必须满足,不然就不干了。requiredDuringSchedulingIgnoredDuringExecution
nodeAffinity
控制pod可以部署在哪些node上,不可以在那些node上。
示例分析
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: affinity
spec:
replicas: 2
revisionHistoryLimit: