版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Kubernetes管理员实训云容器团队架构师 & CNCF社区主要贡献者倾力打造Kubernetes管理员实训大纲理解限制对Pod调度的影响使用label selector调度Pod手动调度Pod理解DaemonSet调度失败使用多调度器分析了解调度器的配置Kubernetes 调度相关基础概念Scheduling:为Pod找到一个合适的NodeapiVersion: v1 kind: Pod metadata:name: pod-76559f5d5b-l9b9p.spec:dnsPolicy: ClusterFirstrestartPolicy: Alwayscontainers:
2、.nodeName: node1apiVersion: v1 kind: Pod metadata:name: my-pod-76559f5d5b-l9b9p.spec:dnsPolicy: ClusterFirstrestartPolicy: Always containers:.nodeName:Node 定义一个node的可分配量执行kubectl get node <node-name> -o yaml查看一个完整的nodeapiVersion: v1 kind: Node metadata:labels:beta.kubernetes.io/arch: amd64 bet
3、a.kubernetes.io/os: linux kubernetes.io/hostname: node-n1name: node-n1spec:externalID: node-n1 status:addresses:- address: 10.162.197.135 type: InternalIPallocatable:cpu: "8"memory: 16309412Ki pods: "110"capacity: cpu: "8"memory: 16411812Kipods: "110" conditio
4、ns: . daemonEndpoints:kubeletEndpoint:Port: 10250 images: .nodeInfo: .Pod 定义执行kubectl explain pod.spec查看pod.spec提供的完整配置字段apiVersion: v1 kind: Pod metadata:labels:run: my-pod name: my-pod namespace: defaultspec:containers:- image: nginx imagePullPolicy: Always name: my-podports:- containerPort: 80pro
5、tocol: TCPresources: requests:memory: "10Gi" cpu: "500m"limits:memory: "10Gi"cpu: "500m"schedulerName: default-scheduler nodeName: node-n1 restartPolicy: Always nodeSelector: .affi: .tolerations: .status: Pod 中影响调度的主要属性字段apiVersion: v1kind: Pod metadata: label
6、s:run: my-pod name: my-pod namespace: defaultspec:containers:-image: nginximagePullPolicy: name: my-pod ports:- containerPort:Always调度依据80protocol:resources:TCPlimits:memory:执行调度的调度器"10Gi"cpu: "500m"调度结果restartPolicy: Always高级调度策略status: nodeSelector: .affi: .tolerations: .schedu
7、lerName: default-schedulernodeName: node-n1requests: memory: "10Gi" cpu: "500m"执行kubectl explain pod.spec查看pod.spec提供的完整配置字段Kubernetes 中的分配K8S 调度器的分配机制“总和”调度基于Pod中容器requestresoureces.limits影响pod的运行上限,不影响调度initContainer取最大值,container取累加值,最后取大者即 Max( Max(initContainers.requests), S
8、um(containers.requests) )未指定request时, 按0需求进行调度基于量的调度,而非实际占用不依赖能否调度,系统过于敏感:pod.request < node.allocatable - node.requestedKubernetes node的盒子模型分配相关算法 GeneralPredicates(主要是PodFitsResources) LeastRequestedPriority BalancedResourceAllocation,平衡cpu/mem的消耗比例Pod 所需的计算InitContainers:逐个运行并,之后才拉起containers需
9、求取单个容器的最大值Containers:同时运行,需求为所有容器累加最终结果:cpu 1,memory 3GapiVersion: v1 kind: Pod metadata:name: my-pod spec:initContainers:- name: ic1resources:requests: cpu: "1"memory: "1G"- name: ic2 resources:requests:cpu: "1"memory: "3G"containers:- name: container1 resour
10、ces:requests: cpu: "500m"memory: "1G"- name: container2 resources:requests: cpu: "500m"memory: "1G"Kubernetes 中的高级调度及用法nodeSelector:将 Pod 调度到特定的 Node 上语法格式:mapstringstring作用:匹配nabels 排除不包含nodeSelector中指定label的所有node 匹配机制 完全匹配apiVersion: v1 kind: Pod metadata:l
11、abels:pod-template-hash: "" run: my-podname: my-pod namespace: defaultspec:containers:- image: nginx imagePullPolicy: Always name: my-podports:- containerPort: 80 protocol: TCPresources: nodeSelector:disktype: ssdnode-flavor: s3.large.2nodeAffi:nodeSelector 升级版与nodeSelector关键差异 引入运算符:In,No
12、tIn (labelselector语法) 支持枚举label可能的取值,如 zone in az1, az2, az3. 支持硬性过滤和软性评分 硬性过滤规则支持指定 多条件之间的逻辑或运算 软性评分规则支持 设置条件权重值硬性过滤:排除不具备指定label的node软性评分:不具备指定label的node打低分,降低node被选中的几率apiVersion: v1 kind: Pod metadata:name: with-node-affi spec:affi:nodeAffi:requiredDuringSchedulingIgnoredDuringExecution: nodeSel
13、ectorTerms:- matchExpressions:- key: node-flavor operator: In values:- s3.large.2- s3.large.3preferredDuringSchedulingIgnoredDuringExecution:- weight: 1 preference:matchExpressions:- key: node-flavor operator: In values:- s3.large.2containers:- name: with-node-affiimage: k8s.gcr.io/pause:2.0podAffi:
14、让某些 Pod 分布在同一组 Node 上与nodeAffi的关键差异apiVersion:kind: Pod metadata:v1定义在PodSpec中,亲和与反亲和规则具有对称性labelSelector的匹配对象为Pod对node分组,依据label-key = topologyKey,每个label- value取值为一组硬性过滤规则,条件间只有逻辑与运算name: with-pod-affispec:affi:podAffi:硬性过滤:排除不具备指定pod的node组软性评分:不具备指定pod的node组打低分,降低该组node被选中的几率containers:- name: wi
15、th-pod-affiimage: k8s.gcr.io/pause:2.0requiredDuringSchedulingIgnoredDuringExecution:- labelSelector: matchExpressions:- key: security operator: In values:- S1topologyKey: kubernetes.io/zonepreferredDuringSchedulingIgnoredDuringExecution:- weight: 100 podAffiTerm:labelSelector:matchExpressions:- key
16、: security operator: In values:- S2topologyKey: kubernetes.io/hostnamepodAntiAffi:避免某些 Pod 分布在同一组 Node 上apiVersion:kind: Pod metadata:v1与podAffi的差异name:spec:affiwith-pod-affi 匹配过程相同 最终处理调度结果时取反即:podAntiAffi: podAffi度 podAffi中可调度节点,在podAntiAffi中为不可调中高分节点,在podAntiAffi中为低分containers:- name: with-pod-af
17、fiimage: k8s.gcr.io/pause:2.0requiredDuringSchedulingIgnoredDuringExecution:- labelSelector: matchExpressions:- key: security operator: In values:- S1topologyKey: kubernetes.io/zonepreferredDuringSchedulingIgnoredDuringExecution:- weight: 100 podAffiTerm:labelSelector:matchExpressions:- key: securit
18、y operator: In values:- S2topologyKey: kubernetes.io/hostname手动调度和DaemonSet手动调度Pod(不经过调度器)适用场景: 调度器不工作时,临时救急 封装实现自定义调度器小故事: 过去几个版本的Daemonset都是由controller直接指定pod的运行节点,不经过调度器。 直到1.11版本,DaemonSet的pod由scheduler调度才作为alpha特性引入创建Pod时直接指定nodeNameapiVersion: v1 kind: Pod metadata:labels:run: my-pod name: my-
19、pod namespace: defaultspec:containers:- image: nginx imagePullPolicy: Always name: my-podports:- containerPort: 80 protocol: TCPnodeName: node-n1DaemonSet:每个节点来一份每个node上部署一个相同的pod通常用来部署集群中的agent,如果插件等价于apiVersion: apps/v1 kind: DaemonSet metadata:name: my-daemonset spec:selector: matchLabels:name: m
20、y-daemonsettemplate: metadata:labels:name: my-daemonset spec:containers:- name: containerimage: k8s.gcr.io/pause:2.0apiVersion: apps/v1 kind: Deployment metadata:name: my-deploy spec:replicas: <# of nodes> selector:matchLabels:podlabel: daemonset teplate:metadata: labels:podlabel: daemonset sp
21、ec:affi:podAntiAffi: requiredDuringSchedulingIgnoredDuringExecution:- labelSelector: matchExpressions:- key: podlabel operator: In values:- daemonsettopologyKey: kubernetes.io/hostname containers:- name: containerimage: k8s.gcr.io/pause:2.0Taints:避免 Pod 调度到特定 Node 上带effect的特殊label,对Pod有排斥性 硬性排斥 NoSc
22、hedule 软性排斥 PreferNoSchedule系统创建的taint附带时间戳 effect为NoExecute 便于触发对Pod的超时典型用法:预留特殊节点做特殊用途给node添加taint 删除taintkubectl taint node node-n1 foo:NoSchedule-kubectl taint node node-n1 foo=bar:NoScheduleapiVersion: v1 kind: Node metadata:labels:beta.kubernetes.io/arch: amd64 beta.kubernetes.io/os: linux kub
23、ernetes.io/hostname: node-n1name: node-n1 spec:externalID: node-n1 taints:- effect: NoSchedule key: accelerator timeAdded: null value: gpustatus: .Tolerations:Pod 调度到有特定 taints 的 Node 上无视排斥完全匹配 例:<key>=<value>:<effect>匹配任意taint value Operator为Exists,value为空 例: <key>:<effec
24、t>匹配任意 taint effect effect为空 例: <key>=<value>注:<key>=<value>:<effect>为 kubectl describe pod中的写法apiVersion: v1 kind: Node metadata:labels:beta.kubernetes.io/arch: amd64 beta.kubernetes.io/os: linux kubernetes.io/hostname: node-n1name: node-n1 spec:externalID: node-n1t
25、aints:- effect: NoSchedule key: accelerator timeAdded: null value: gpustatus: .apiVersion: v1 kind: Pod metadata:labels:run: my-pod name: my-pod namespace: defaultspec:containers:- name: my-pod image: nginxtolerations:- key: accelerator operator: Equal value: gpueffect: NoSchedule调度结果和失败分析调度失败分析查看调度
26、结果查看调度失败调度失败错误列表(kubernetes 1.9版本)1.9/plugin/pkg/scheduler/algorithm/predicates/error.go#L25-L58kubectl describe pod podnamekubectl get pod podname o wide调度失败分析多调度器及调度器配置多调度器适用场景:集群中多个调度器,分别处理不同类型的作业调度使用限制:建议对node做写入池划分,避免调度结果使用scheduleName指定调度器apiVersion: v1 kind: Pod metadata:labels:run: my-pod na
27、me: my-pod namespace: defaultspec:containers:- image: nginx imagePullPolicy: Always name: my-podports:- containerPort: 80 protocol: TCPschedulerName: my-custom-scheduler自定义调度器配置-policy-config-file自定义调度器加载的算法,或者调整排序算法权重执行kube-scheduler -help查看调度器配置项"kind" : "Policy","apiVersion" : "v1", "predicates" : "name" : "PodFitsHostPorts","name" : "PodFitsResources","name" : "NoDisk","name" : "NoVolumeZone","name" : &qu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第三章 第九节 家长公益志愿活动
- 复垦复耕工作方案
- 单位述职实施方案
- 高中历史教资面试古代史专项试卷
- 计算机岗2026模拟练习题含答案含解析配套答题技巧
- 山东环境岗事业单位面试自测卷2026习题汇编含答案
- 文旅岗2026事业单位面试自测卷含答案与解析
- 2026年化工安全生产现场管理要点梳理课件
- 第十七章 实践 设计一个节能方案 课件 2026-2027学年沪科版物理九年级上学期
- 南昌市进贤县2026年初中数学毕业考试模拟冲刺卷含解析
- 老年人防跌倒的预防及护理措施
- 2025年揭阳揭西县选调高中教师考试试题(含答案)
- 咯血患者介入治疗的护理讲课件
- 对口升学考试全真模拟试卷计算机专业(第2版)答案解析
- 《民法典》合同编实务培训课件
- 2025届高考物理说题大赛-以电学实验为例
- 浙江大学嵌入式课件-嵌入式系统
- 中南林业科技大学《机械制图》2023-2024学年第一学期期末试卷
- 2024-2025学年九年级化学上册 第二单元 单元测试卷(人教版)
- 2018尔雅设计与人文每章答案
- SY-T 6966-2023 输油气管道工程安全仪表系统设计规范
评论
0/150
提交评论