【kubernetes笔记】k8s_Pod调度(04)
Page content
这一篇整理了Pod调度相关的内容。
1.Pod 创建流程
在master节点 create Pod
- 调用API Server 的create方法,保存到etcd中。
- 调用 Scheduler(调度算法),计算存储的node等信息后存到etcd中。
- 调用 相应节点的Keublet创建docker(docker run),之后更新pod状态,存到etcd中。
2.影响Pod调度的属性
2.1 Pod资源限制
node的cpu和内存达不到Requests的设定, 将不会选用此节点。
2.2 节点选择器(nodeSelector)
给节点打上标签
$kubectl label node node_name env_role=dev
apiVersion: v1
kind: Pod
metadata:
name: test
spec:
nodeSelector:
env_role: dev
containers:
- name: test1
... ...
3 节点亲和性nodeAffinity
节点亲和性nodeAffinity和之前nodeSelector基本一样,
根据节点上标签约束来决定Pod调度到哪些节点上。
- 硬亲和性: 约束必须要满足
- 软亲和性: 尝试满足,不保证
操作符 In NotIn Exists Gt Lt DoseNotExists
apiVersion: v1
kind: Pod
metadata:
name: with-node-affinity
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: env_role
operator: In
values:
- dev
- test
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: group
operator: In
values:
- other-prod
containers:
- name: test1
image: test1
4.污点Taint
nodeSelector和nodeAffinity是Pod调度到摸个节点操作。
污点Taint是节点不错分配调度,是节点的属性。
4.1 使用场景
- 专用节点
- 配置特点硬件节点
- Taint驱逐
4.2 污点Taint操作
NoScheduler
: 一定不被调度PerferNoSechduler
: 尽量不被调度NoExecuter
: 不会调度,并且还会驱逐已有Pod
#创建
$kubectl taint node [node] key=value:污点三个值
#查看节点
$kubectl describe node k8smaster | grep Taint
#删除taint
$kubectl taint node k8snode1 env_role:NoScheduler-node/k8snode1 untainted
4.3 污点Taint容忍
apiVersion: v1
kind: Pod
metadata:
name: with-node-affinity
spec:
tolerations:
- key: "key"
operator: "Equal"
value: "value"
effect: "NoSchedule"
containers:
- name: test1
image: test1
欢迎大家的意见和交流
email: li_mingxie@163.com