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: |
| |
| pods: "10" |
| |
| count/deployments.apps: "3" |
| |
| count/services: "3" |
限制范围(LimitRange)
能够限制名称空间的cpu和内存的最大最小资源,如果Pod不再此范围里,那么会Pending
| spec: |
| limits: |
| - max: |
| cpu: "2" |
| memory: "1Gi" |
| min: |
| cpu: "100m" |
| memory: "128Mi" |
| default: |
| cpu: "500m" |
| memory: "256Mi" |
| defaultRequest: |
| cpu: "200m" |
| memory: "256Mi" |
| type: Container |
| - max: |
| cpu: "4" |
| memory: "2Gi" |
| min: |
| cpu: "200m" |
| memory: "256Mi" |
| type: Pod |
污点(taint)
使节点加入污点,如果Pod不配置污点容忍则永远不会调度到该节点
| |
| kubectl taint nodes <node-name> key=value:NoSchedule |
| |
| |
| kubectl taint nodes <node-name> key=value:PreferNoSchedule |
| |
| |
| kubectl taint nodes <node-name> key=value:NoExecute |
| |
| 污点类型介绍 |
| NoSchedule |
| PreferNoSchedule |
| NoExecute |
污点容忍(tilerasions)
某节点配置了污点,如果还想调度到该节点,那么需要配置污点容忍
例如该节点配置了kubectl taint nodes master01 taint=NoSchedule
| ... |
| spec: |
| nodeName: master01 |
| tolerasions: |
| - key: "taint" |
| |
| |
| operator: "Exists" |
| |
| effect: "NoSchedule" |
节点选择器(nodeSelector)
基于节点的标签关联节点,将Pod调度到包含指定标签的节点
如果指定的节点上有污点
,需要配置污点容忍
| 给节点打标签 |
| - kubectl label nodes worker233 disktype=ssd |
| - kubectl get nodes --show-labels | grep disktype |
| ... |
| spec: |
| nodeSelector: |
| |
| 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: maqinghang |
| |
| values: |
| - test1 |
| - test2 |
| |
| |
| |
| |
| 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: |
| |
| podAffinity: |
| |
| requiredDuringSchedulingIgnoredDuringExecution: |
| |
| - topologyKey: dc |
| |
| 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: |
| |
| podAntiAffinity: |
| |
| requiredDuringSchedulingIgnoredDuringExecution: |
| |
| - topologyKey: dc |
| |
| labelSelector: |
| matchLabels: |
| apps: v1 |
| ... |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通