目录

文章目录

  • 目录
  • 实验环境
  • 实验软件
  • 本节实践
  • 调度
  • 创建一个Pod的工作流程
    • 1.架构图
    • 2.剖析过程
    • 3.Pod中影响调度的主要属性
    • 4.调度器需要充分考虑诸多的因素
    • 5.Kubernetes中的资源分配
    • 6.Init container的资源需求
  • 1、nodeSelector
  • 2、亲和性和反亲和性调度
    • 1.节点亲和性
    • 2.pod 亲和性和pod 反亲和性
  • 3、污点与容忍
  • 4、nodeName
  • 思考
    • 1.不用 DaemonSet,如何使用 Deployment 是否实现同样的功能?
    • 2.同样的如果想在每个节点(或指定的一些节点)上运行2个(或多个)Pod 副本,如何实现?
  • 关于我
  • 最后

实验环境

实验环境:
1、win10,vmwrokstation虚机;
2、k8s集群:3台centos7.6 1810虚机,1个master节点,2个node节点k8s version:v1.22.2containerd://1.5.5

实验软件

链接:https://pan.baidu.com/s/1P3Z_ujk22dYDXzM37WI5FA?pwd=v01w
提取码:v01w

2022.2.18-39.亲合性调度-实验代码.zip

本节实践

  1. 实践:nodeSelector测试(测试成功)-2022.5.16
  2. 实践:节点亲和性测试(测试成功)-2022.5.16
  3. 实践:pod亲和性(测试成功)-2022.5.16
  4. 实践:pod反亲和性(测试成功)-2022.5.16
  5. 实践:污点与容忍(测试成功)-2022.5.16
  6. 实践:nodeName测试(测试成功)-2022.5.16

调度

一般情况下我们部署的 Pod 是通过集群的自动调度策略来选择节点的,默认情况下调度器考虑的是资源足够,并且负载尽量平均。但是有的时候我们需要能够更加细粒度的去控制 Pod 的调度,比如我们希望一些机器学习的应用只跑在有 GPU 的节点上但是有的时候我们的服务之间交流比较频繁,又希望能够将这服务的 Pod 都调度到同一个的节点上。这就需要使用一些调度方式来控制 Pod 的调度了,主要有两个概念:亲和性和反亲和性,亲和性又分成节点亲和性(nodeAffinity)和 Pod 亲和性(podAffinity)

创建一个Pod的工作流程

1.架构图

Kubernetes基于list-watch机制的控制器架构,实现组件间交互的解耦。
其他组件监控自己负责的资源,当这些资源发生变化时,kube-apiserver会通知这些组件,这个过程类似于发布与订阅

2.剖析过程

  • 我们通过命令行创建一个pod:

  • 当我们在执行命令kubectl run pod4 --image=nginx后,各组件之间的调用流程是如何的呢?
1、kubectl向apiserver发送一个创建pod的请求
2、apiserver接收到并向etcd写入存储,写入成功返回一个提示#这个过程类似于老板和顾客之间的关系:api-server:开店老板etcd:仓库其他组件:顾客

  • 注意:如果在执行如下kubectl run pod4 --image=nginx命令时,卡着了,说明什么问题呢?

–>说明:
etcd数据库写入有问题/达到性能瓶颈,或者,api-server和etcd 2者总有一个有问题:

  • 继续:scheduler向apiserver查询未分配的pod资源,通过自身调度算法选择一个合适的node进行绑定(给这个pod资源打一个标记,标记分配到node1)注意:它这个调度算法还是比较复杂、均匀一点的,它会考虑到你的机器的硬件配置,pod属性等等一些综合的属性;

  • 问题:如果scheduler组件有问题,那么此时pod会出现什么状态?

答:pod会出现通过kubectl get pod根本看不到你刚创建的pod信息的,更别说它的状态了,因为它根本没分配。

因此,如果你创建的pod信息根本看不到,那么会是哪个组件可能有问题?–>scheduler组件可能出在问题。

  • 如果是pending状态:pod是已经绑定到某个节点了

  • 继续流程讲解:

4、kubelet向apiserver查询分配到自己节点的pod,调用docker api(/var/run/docker.sock)创建容器
5、kubelet获取docker创建容器的状态,并汇报给apiserver,apiserver更新状态到etcd存储
6、kubectl get pods就能查看pod状态备注:
kubelet的功能主要是管理容器:这个是默认调用的docker api接口
[root@k8s-master ~]#ll /var/run/docker.sock
srw-rw---- 1 root docker 0 Jun 14 11:46 /var/run/docker.sock

  • 问题:controller-manager为什么没用到?

controller-manager是用于管理控制器,例如deployment(rs)、service,因为创建的是一个pod,不受它管理。

如果controller-manager要放在这里,一般是放在etcd后面的

  • kube-proxy为什么没用到?

proxy是用于管理pod网络,例如service,因为没创建service。

kube-proxy的主要功能就是维护好service,service是k8s的抽象资源;

  • 扩展

比如,这个容器创建的时候创建失败了,不是一个running状态,也不是一个pending状态。可能就是docker在启动容器时,用你那个镜像启动容器失败了。所以这是你需要用docker去run一个镜像看能不能起来。

3.Pod中影响调度的主要属性

⚠️ 注意

resources: {} 资源调度依据这个,挺重要的;
很多大厂都会去二开"schedulerName: default-scheduler"这个调度器的,会去加一些调度策略,进而完成他们的需求;

kubernetes之亲合性调度相关推荐

  1. Kubernetes 是如何调度的?

    作者 | 阿文,责编 | 郭芮 头图 | CSDN 下载自东方IC 出品 | CSDN(ID:CSDNnews) 自互联网出现以来 ,云计算的概念已经提出了有 50 年.从1957 年,John Mc ...

  2. Kubernetes之Pod调度

    本文讲的是Kubernetes之Pod调度[编者的话]Kubernetes调度器根据特定的算法与策略将pod调度到工作节点上.在默认情况下,Kubernetes调度器可以满足绝大多数需求,例如调度po ...

  3. [kubernetes] Schedule --- Node调度与隔离

    目录 1. NodeSelector 2. 亲和与反亲和  Affinity and Anti-affinity 节点Node 亲和性 pod 亲和性和反亲和性 3. 污点(Taints)与容忍(to ...

  4. kubernetes 简介:调度器和调度算法((Affinity/Anti-Affinity, Taints and Tolerations, 自定义调度器 )

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 简介 scheduler 是 kubernetes 的调度器,主要的任务是把定义的 pod 分配到集群的节点上.听起来非常简单,但有很多要考虑的问题: ...

  5. 二十、Kubernetes中Pod调度第二篇NodeAffinity详解、实例

    1.概述 在默认情况下,一个Pod在哪个Node节点上运行,是由Scheduler组件采用相应的算法计算出来的,这个过程是不受人工控制的.但是在实际使用中,这并不满足的需求,因为很多情况下,我们想控制 ...

  6. Kubernetes对Pod调度指定Node以及Node的Taint 和 Toleration

    1.指定pod到指定的node上 #1.1查看节点的lebel kubectl get nodes --show-labels#1.2获取到该节点的label信息 ip-10-100-2-80 Rea ...

  7. 实战:k8s之亲合性调度-2022.2.18

    目录 文章目录 目录 实验环境 实验软件 1.调度 2.nodeSelector

  8. kubernetes调度器

    目录 文章目录 目录 实验环境 实验软件 本节实践 前置知识 调度器 1.调度流程 1.默认调度器 2.扩展调度器(extender) 3.调度框架 1.扩展点(Extension Points) 2 ...

  9. Kubernetes — 调度系统

    目录 文章目录 目录 调度系统 Kubernetes 调度器的设计 Kubernetes 调度器的工作流 Kubernetes 调度系统的未来 Scheduler Extender(调度器扩展) Mu ...

最新文章

  1. 2021年春季学期-信号与系统-第十四次作业参考答案-第二小题参考答案
  2. PhoneGap 安装体验
  3. CodeForces - 1198A MP3(尺取)
  4. java 高并发第三阶段实战_Java 高并发第三阶段实战---Java并发包深入解析与使用详解...
  5. php iis session 超时设置,如何配置IIS Session超时时间
  6. 用js实现一个无限循环的动画
  7. Linux操作系统使用基础03:Linux文件权限与目录配置
  8. okhttp教程——起步篇
  9. 阿里云飞天洛神:高性能网络软硬件一体化技术实践 | 凌云时刻
  10. dp动态规划解题套路 剑指offer 42连续子数组的最大和
  11. 使用Selenium实现直播平台的自动刷屏
  12. OTA再升级, 汽车云诊断风口将至,艾拉比早已“量产上车”
  13. 智齿客服Android集成流程,智齿客服接入_智齿客服客服系统如何接入网站_智齿客服接入流程_企业服务汇...
  14. 计算机病毒及其治疗的教案,计算机病毒教案(公开课)原创配套
  15. 为什么写技术博客对新人如此重要
  16. rtx3090ti什么水平 rtx3090ti显卡什么级别 rtx3090ti显卡怎么样
  17. 团灭了3个月的线下营销,还有希望吗?
  18. 你的金钱和时间流向哪,你的人生就什么样!
  19. html网页自动铺满屏幕,HTML+CSS入门 高度如何铺满全屏
  20. Rust 安装,卸载,nightly/stable版本切换(全局或工作空间),提高下载速度

热门文章

  1. git 初次使用的配置流程
  2. 图像处理-机器学习一些科普材料汇集 - 持续更新中_拔剑-浆糊的传说_新浪博客...
  3. hdmi转双mipi转接_视频转换 HDMI 转 MIPI ADV7480
  4. 工业智能网关BL110应用之30:实现三菱 PLC FX3U 接入亚马逊云平台
  5. 深度学习——注意力机制
  6. Flexsim常见问题记录
  7. Linux驱动之 字符设备 ioctl接口使用
  8. memory compression如何关闭
  9. 计算机组成原理实验一---运算器 预习报告
  10. CodeQL基础语法