k8s部署-38-带你了解并自定义pod调度策略(下)

曾无好事来相访,赖尔高文一起予。这篇文章主要讲述k8s部署-38-带你了解并自定义pod调度策略(下)相关的知识,希望能为你提供帮助。

k8s部署-38-带你了解并自定义pod调度策略(下)

文章图片



pod调度的理论我们经过上一篇文章的介绍,都了解的差不多了哈,那么我们接下来就该具体来实操了。
毕竟,纸上得来终觉浅,绝知此事要躬行嘛。
k8s部署-38-带你了解并自定义pod调度策略(下)

文章图片

前言
上一篇是理论,本篇是实操。
节点亲和性
[root@node1 ~]# cd namespace/
[root@node1 namespace]# mkdir pod-scheduler
[root@node1 namespace]# cd pod-scheduler/
[root@node1 pod-scheduler]#
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-demo-node
namespace: dev
spec:
selector:
matchLabels:
app: web-demo-node
replicas: 1
template:
metadata:
labels:
app: web-demo-node
spec:
containers:
- name: web-demo-node
image: registry.cn-beijing.aliyuncs.com/yunweijia0909/springboot-web:v1
ports:
- containerPort: 8080
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: beta.kubernetes.io/arch
operator: In
values:
- amd64
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: disktype
operator: NotIn
values:
- ssd
[root@node1 pod-scheduler]#



解释:就是说我这个pod,想要运行在哪个节点上;主要是affinity那块的东西
affinity:
nodeAffinity:# 表示是node亲和性
requiredDuringSchedulingIgnoredDuringExecution: # 是必要条件
nodeSelectorTerms:
- matchExpressions:
- key: beta.kubernetes.io/arch
operator: In
values:
- amd64# 必须运行在label是:beta.kubernetes.io/arch=amd64上
preferredDuringSchedulingIgnoredDuringExecution:# 表示最好在这里
- weight: 1
preference:
matchExpressions:
- key: disktype
operator: NotIn
values:
- ssd# 最好运行在label是:disktype 不等于 ssd上



如果有两个必要条件,比如同时满足,需要配置和matchExpressions同级。如下:
- matchExpressions:
- key: beta.kubernetes.io/arch
operator: In
values:
- amd64
- key: type
operatos: In
values:
- blue



如果说是两个必要条件,满足其一即可的话,需要配置和nodeSelectorTerms同级。如:
nodeSelectorTerms:
- matchExpressions:
- key: beta.kubernetes.io/arch
operator: In
values:
- amd64
nodeSelectorTerms:
- matchExpressions:
- key: type
operator: In
values:
- blue



POD亲和性
[root@node1 pod-scheduler]# vim wed-pod.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-demo-pod
namespace: dev
spec:
selector:
matchLabels:
app: web-demo-pod
replicas: 1
template:
metadata:
labels:
app: web-demo-pod
spec:
containers:
- name: web-demo-pod
image: registry.cn-beijing.aliyuncs.com/yunweijia0909/springboot-web:v1
ports:
- containerPort: 8080
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- web-demo
topologyKey: kubernetes.io/hostname
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- web-demo-node
topologyKey: kubernetes.io/hostname
[root@node1 pod-scheduler]#



解释:表示在一定的范围内,想和某个pod调度在一起,或者说不想和某个pod调度在一起。看下配置:
affinity:
podAffinity:# POD亲和性
requiredDuringSchedulingIgnoredDuringExecution:# 必要条件
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- web-demo
topologyKey: kubernetes.io/hostname# 必须和app=web-demo的pod运行在同一个节点上
preferredDuringSchedulingIgnoredDuringExecution:# 最好条件
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- web-demo-node
topologyKey: kubernetes.io/hostname# 最好和app=web-demo-node的app运行在同一节点



那万一我们有一个不想和某个pod运行在一起的诉求的时候我们怎么做呢?配置成下面就好了:
affinity:
podAntiAffinity:# 这里这里,改的是这里,表示不想,不愿意
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- web-demo
topologyKey: kubernetes.io/hostname
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- web-demo-node
topologyKey: kubernetes.io/hostname



污点
是不是还有一种可能性,就是说我这个node就不想给他们使用,或者说我这个node有点儿特殊,比如说我的gpu资源,或者说别的什么,总之就是不想让别人用,这个时候怎么处理呢,那你不能让每一个pod都配置亲和性呀,这个时候我们就引入了“污点”这个概念,当你node打了个污点之后,正常的pod是不会调度到你这个node节点上的。
剩余内容请转至VX公众号 “运维家” ,回复 “145” 查看。

------ 以下内容为防伪内容,忽略即可 ------

------ 以下内容为防伪内容,忽略即可 ------

------ 以下内容为防伪内容,忽略即可 ------

电视盒linux怎么查看linux内存linux仿maclinux键盘上怎么打linuxusb复合设备linux文件备份的方法linux添加网关不生效电脑以linux系统启动linux上运行msilinux移动文件怎么操作linux系统检查ntplinux复制代码命令行linux如何下载c语言linux授权sodolinux中lcd显示时间虚拟机linux命令怎么设置linux下存储怎么知道linux连上网了linux怎么删除指定字符串csdn中linux教程
【k8s部署-38-带你了解并自定义pod调度策略(下)】


    推荐阅读