摘要:节点亲和与反亲和性节点亲和与反亲和性节点亲和与反亲和性使用节点亲和性与反亲和性,需要在下增加字段,节点亲和分为硬匹配和软匹配两种。
Kubernetes 提供了多种节点分配使用的方法,常用的有以下4种:
节点筛选器(nodeSelector)节点亲和与反亲和性(nodeAffinity)Pod亲和与反亲和性(podAffinity)节点隔离/限制在做节点选择的时候很多时候用到了 Kubernetes 的 Label 功能,这里我们分别展示给节点及 Pod Label 的方法。
给 10.10.10.10 节点增加disktype=ssd
标签# kubectl label nodes 10.10.10.10 disktype=ssd
给 Pod 增加 disktype=ssd
标签,同理可以针对 Deployment、Service 等对象进行增加标签操作# kubectl label po unginx-7db67b8c69-zcxmm disktype=ssd
节点筛选器,用于创建 Pod(及 Deployment、StatefulSet 等控制器时),将 Pod 分配给相应的节点。
实例 yaml 创建了一个 Pod 对象,在 spec.nodeSelector
下以 Map 形式增加改容器部署的节点的限制条件,nodeSelector 会筛选拥有
disktype: ssd
的 Node 节点进行 Pod 部署。
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
disktype: ssd
使用节点亲和性与反亲和性,需要在 Deployment spec.template.spec
下增加 affinity
字段,节点亲和分为硬匹配和软匹配 两种。
在以下 yaml 示例中,requiredDuringSchedulingIgnoredDuringExecution
可以理解为排除不具备指定 Label 的节点,如果节点不含有
ucloud=yes
则 Pod 不会被分配到该节点。
nodeSelectorTerms
下提供了 matchExpressions
(匹配表达式)和 matchFields
(匹配字段),选择使用其一,我们这里使用了
matchExpressions
,下面的表达式中 Key 和 Values对应,operator
的可选参数有In、NotIn、Exists、DoesNotExist、Gt、Lt,这里可以设置
NotIn、DoesNotExist 进行反亲和的设置,也就是如果这里写入了 operator: NotIn
的时候,Pod 将分配在没有 ucloud=yes
Label 的节点上。
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
run: ucloud
name: ucloud
spec:
replicas: 3
selector:
matchLabels:
run: ucloud
template:
metadata:
creationTimestamp: null
labels:
run: ucloud
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: ucloud
operator: In
values:
- "yes"
containers:
- image: nginx
name: ucloud
ports:
- containerPort: 80
resources: {}
3.2 软匹配和 requiredDuringSchedulingIgnoredDuringExecution
对应还有
preferredDuringSchedulingIgnoredDuringExecution
,这里称为软匹配,这个参数为对应节点进行打分,降低不具备 Label 的节点的选中几率。
这里的 weight
字段在1-100范围内。对于满足所有调度要求的每个节点,调度程序将通过迭代此字段的元素计算总和,并在节点与对应的节点匹配时将「权重」添加到总和
MatchExpressions
,然后将该分数与节点的其他优先级函数的分数组合。总得分最高的节点是最优选的。
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: another-node-label-key
operator: In
values:
- another-node-label-value
3.3 说明如果同时指定 nodeSelector 和 nodeAffinity,节点必须满足全部条件,Pod 才会被调度到该节点。
如果指定了多个 nodeSelectorTerms 关联 nodeAffinity 类型,如果能满足其中一个 nodeSelectorTerms,则 Pod 就可以调度到这个节点。
如果指定了多个 matchExpressions 关联的 nodeSelectorTerms,则只有在节点满足所有 matchExpressions 要求情况下才能将该容器调度到节点上。
如果删除或更改已有容器节点的 Label,Kubernetes 不会主动删除该容器,亲和的调度选择仅在调度 Pod 时起作用。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/127026.html
摘要:详细请见产品价格产品概念使用须知名词解释漏洞修复记录集群节点配置推荐模式选择产品价格操作指南集群创建需要注意的几点分别是使用必读讲解使用需要赋予的权限模式切换的切换等。UK8S概览UK8S是一项基于Kubernetes的容器管理服务,你可以在UK8S上部署、管理、扩展你的容器化应用,而无需关心Kubernetes集群自身的搭建及维护等运维类工作。了解使用UK8S为了让您更快上手使用,享受UK...
摘要:对于存储资源,的节点默认系统盘。节点创建时可选择数据盘挂载亦可在节点创建完成后在主机侧挂载,如节点挂载有数据盘,将用于存放本地镜像的,否则本地镜像等将保存在系统盘。 集群节点配置推荐本篇目录1. Master 配置推荐2. 如何选择 Node 配置大小1. Master 配置推荐Master 规格跟集群规模有关,集群规模越大,所需要的 Master 规格也越高,不同集群规模的,Master ...
摘要:最佳实践使用方法及支持日志解决方案基于的实践基于的监控解决方案通过软件一致性认证已正式通过云原生计算基金会软件一致性认证。1、集群自动伸缩 UK8S新上线集群自动伸缩功能(Cluster Autoscaler),配置好伸缩策略后,可实现自动扩缩Node节点,配合HPA(Horizontal Pod Autoscaler)一起使用,可轻松应对突发的业务流量,降低IT运营成本,减轻运维负担...
摘要:扩展性好当集群的资源严重不足而导致排队等待时,可以很容易的添加一个到集群中,从而实现扩展。用法,选择尽可能使用这个节点镜像,填写,这个容器镜像是我们的运行环境。更新文件,这里我们只是将中的镜像更换成最新构建出的镜像。基于Jenkins的CI/CD实践[TOC]一、概要提到K8S环境下的CI/CD,可以使用的工具有很多,比如Jenkins、Gitlab CI、新兴的drone等,考虑到大多公司...
阅读 291·2024-11-07 18:25
阅读 130372·2024-02-01 10:43
阅读 868·2024-01-31 14:58
阅读 828·2024-01-31 14:54
阅读 82769·2024-01-29 17:11
阅读 3054·2024-01-25 14:55
阅读 1985·2023-06-02 13:36
阅读 3034·2023-05-23 10:26