随笔 - 2  文章 - 0  评论 - 0  阅读 - 36 

nodeName

使Pod调度到指定节点

...
spec:
nodeName: <k8s节点的名称>
...

hostPort

使用的是宿主的ip+端口,只可以调度一个,多余的会pending,因为端口被占用

...
spec:
containerd:
ports:
- containerPort: 80 #容器内的端口
hostPort: 8080 #对外暴露的端口
...

资源限制(resource)

资源限制

...
spec:
containerd:
resources:
requests:
memory: "64Mi" #期望
cpu: "250m" #最大占用
limits:
memory: "128Mi" #期望
cpu: "500m" #最大占用
...

资源配额(resourceQouta)

基于名称空间来进行资源限制

apiVersion: v1
kind: ResourceQuota
metadata:
name: object-counts
namespace: kube-public
spec:
# 定义硬性配置
hard:
# 此命名空间最大创建的Pod数量
pods: "10"
# 此命名空间最大的创建的deploy数量
count/deployments.apps: "3"
# 此命名空间最大的创建的svc数量
count/services: "3"

限制范围(LimitRange)

能够限制名称空间的cpu和内存的最大最小资源,如果Pod不再此范围里,那么会Pending

spec:
limits:
- max:
cpu: "2" # 每个容器的最大CPU限制
memory: "1Gi" # 每个容器的最大内存限制
min:
cpu: "100m" # 每个容器的最小CPU限制
memory: "128Mi" # 每个容器的最小内存限制
default:
cpu: "500m" # 每个容器的默认CPU请求
memory: "256Mi" # 每个容器的默认内存请求
defaultRequest:
cpu: "200m" # 每个容器的默认CPU请求(如果未指定)
memory: "256Mi" # 每个容器的默认内存请求(如果未指定)
type: Container
- max:
cpu: "4" # 每个Pod的最大CPU限制
memory: "2Gi" # 每个Pod的最大内存限制
min:
cpu: "200m" # 每个Pod的最小CPU限制
memory: "256Mi" # 每个Pod的最小内存限制
type: Pod

污点(taint)

使节点加入污点,如果Pod不配置污点容忍则永远不会调度到该节点

# 添加一个 Taint,使节点只接受特定 Pods
kubectl taint nodes <node-name> key=value:NoSchedule
# 添加一个 Taint,允许 Pods 调度到节点,但会发出警告
kubectl taint nodes <node-name> key=value:PreferNoSchedule
# 添加一个 Taint,使节点不接受任何 Pods,除非 Pods 有相应的 Tolerations
kubectl taint nodes <node-name> key=value:NoExecute
#注意:添加污点可以不设置value,可以直接写成key=:污点类型
污点类型介绍
NoSchedule # 已经有的Pod不会驱逐,但不接受新的Pod
PreferNoSchedule # 尽量不调度到该节点,如果其他节点调度不上,那么才会调度此节点
NoExecute # 已经有的Pod会被驱逐,新的Pod也不接受

污点容忍(tilerasions)

某节点配置了污点,如果还想调度到该节点,那么需要配置污点容忍
例如该节点配置了kubectl taint nodes master01 taint=NoSchedule

...
spec:
nodeName: master01
tolerasions:
- key: "taint"
#Exists:只要key存在,不论值是什么,都匹配
#Equal:为默认,表示 key和value都必须匹配。
operator: "Exists"
#value: "因为此污点没有值,所以可以为空"
effect: "NoSchedule"

节点选择器(nodeSelector)

基于节点的标签关联节点,将Pod调度到包含指定标签的节点
如果指定的节点上有污点,需要配置污点容忍

给节点打标签
- kubectl label nodes worker233 disktype=ssd
- kubectl get nodes --show-labels | grep disktype
...
spec:
nodeSelector:
# 标签的key和value
disktype: ssd
...

驱逐(drain)

将指定节点上的所有Pod(包括系统创建的Pod),全部驱逐到其他节点上
驱逐的本身就是打上污点,并标记节点为不可调度状态

kubectl drain <node-name> --ignore-daemonsets

标记不可调度(cordon)

让这个节点不可调度,不会驱逐已经存在的Pod
本质上是打了污点,并标记不可调度
如果去掉标记可以使用kubectl uncordon <node-name>

kubectl cordon <node-name>

节点亲和性(nodeAffinity)

如果一个资源清单要想选择节点标签的 KEY 一样,但互相的值不一样,则可以使用节点亲和性
假设你有一个节点带有标签 maqinghang=[test1|test2],你希望 Pod 只调度到这样的节点上:
环境准备 kubectl label nodes <nodename> maqinghang=test1; kubectl label nodes <nodename> maqinghang=test2

...
spec:
# 亲和性配置
affinity:
# 节点亲和性
nodeAffinity:
# 硬限制表示必须满足的条件
requiredDuringSchedulingIgnoredDuringExecution:
# 匹配节点选择器
nodeSelectorTerms:
# 基于标签匹配节点
- matchExpressions:
# 匹配节点的标签的key
- key: maqinghang
# 匹配节点的标签的value
values:
- test1
- test2
# 指定key和values之间的关系,有效值为: In, NotIn, Exists, DoesNotExist. Gt, and Lt
# 当值为In, NotIn,则必须定义values的值,不能为空。
# 当值为Exists, DoesNotExist,则values必须为空。
# 当值为Gt, Lt,则values的元素只能有一个且是个数字。
operator: In
...

Pod亲和性(PodAffinity)

如果进行Pod调度的时候,第一个Pod落到了某一个节点,那么之后所有的Pod都会落到这个节点
环境准备 kubectl label nodes <nodename> dc=test1; kubectl label nodes <nodename> dc=test2;kubectl label nodes <nodename> dc=test3

...
spec:
# 配置亲和性
affinity:
# Pod亲和性
podAffinity:
# 硬限制表示必须满足的条件
requiredDuringSchedulingIgnoredDuringExecution:
# 指定Pod的拓扑域,比如基于数据中心来实现调度
- topologyKey: dc
# 配置关联的Pod
labelSelector:
matchLabels:
apps: v1
...

Pod反亲和性(podAntiAffinity)

如何一个一节被调度了第一个Pod后,那么该节点不会被调度第二个,会向其他节点调度,如果每个节点都被调度了,那么多余的会处于Pending状态
环境准备:kubectl label nodes <nodename> dc=test1; kubectl label nodes <nodename> dc=test2;kubectl label nodes <nodename> dc=test3

...
spec:
# 配置亲和性
affinity:
# Pod反亲和性
podAntiAffinity:
# 硬限制表示必须满足的条件
requiredDuringSchedulingIgnoredDuringExecution:
# 指定Pod的拓扑域,比如基于数据中心来实现调度
- topologyKey: dc
# 配置关联的Pod
labelSelector:
matchLabels:
apps: v1
...
posted on   马庆航  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示