k8s原理+调度+Qos+优先级+抢占+资源管理(cgroup树的管理)

本文深入剖析Kubernetes(K8s)的架构与工作原理,包括Master与Node组件功能、Pod创建流程、集群调度策略、QoS等级、优先级与抢占机制及资源管理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、k8s的架构及工作原理

基本架构

1. Master

K8S中的Master是集群控制节点,负责整个集群的管理和控制,其中master节点的基本组件有:

  • apiserver:提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心。
  • controller-manager:负责对所有资源对象进行控制,通过 apiserver 监控整个集群的状态,并确保集群处于预期的工作状态。
  • scheduler:负责资源调度的进程,通过API Server的Watch接口监听新建Pod副本信息,并通过调度算法为该Pod选择一个最合适的Node。
  • etcd:负责保存k8s里的所有资源对象以及状态的数据。
2.Node

Node是k8s集群中的工作节点,每个Node都会被Master分配一些进程,当某个Node发生异常时,其上的工作负载会被Master自动转移到其他节点上,node节点的基本组件包括:

  • kubelet:负责Pod对应的容器的创建等任务,同时与Master密切协作,实现集群管理的基本功能
  • kube-proxy:实现svc的通信与负载均衡机制的重要组件。
  • Docker Engine:就是docker,负责本node节点上的容器的创建与管理。

在默认情况下Kubelet会向Master注册自己,一旦Node被纳入集群管理范围,kubelet进程就会定时向Master汇报自身的信息(例如机器的CPU和内存情况以及有哪些Pod在运行等),这样Master就可以获知每个Node的资源使用情况,并实现高效均衡的资源调度策略。而某个Node在超过指定时间不上报信息时,会被Master判定为失败,Node的状态被标记为不可用,随后Master会触发工作负载转移的自动流程

在这里插入图片描述

工作原理

创建pod的过程
  1. 用户通过kubectl命令行工具发送创建pod的请求
  2. apiserver处理用户请求,并将pod数据存储到etcd
  3. scheduler通过apiserver的watch机制,查看到新的pod,并为pod绑定node
  4. 绑定过程中需要过滤掉有污点的node,污点包括主观上不想调用的node,一般会被用户主动打上污点,另外还有被自动打上的污点,包括资源被限制的node(内存或者磁盘不符合pod的标准,空间不足等),node状态异常的(Ready处于false或者unknown状态)等。
  5. 在过滤后留下来的主机中选择最合适的node节点,比如负载最低的节点,将不同副本分布在不同节点上等等,最终得到最优化的节点,并将数据存入etcd
  6. 之后kubelet根据调度结果执行Pod创建操作,在相应节点上,使用docker engine根据相应的镜像创建相对应的容器,产生所需的pod节点。
  7. pod开始正常运行之后,由controller-manager来管理副本数等。
  8. pod节点创建成功!

集群调度

简介

Scheduler 是 kubernetes 的调度器,主要的任务是把定义的 pod 分配到集群的节点上。听起来非常简单,但有很多要考虑的问题:

  • 公平:如何保证每个节点都能被分配资源
  • 资源高效利用:集群所有资源最大化被使用
  • 效率:调度的性能要好,能够尽快地对大批量的 pod 完成调度工作
  • 灵活:允许用户根据自己的需求控制调度的逻辑

Sheduler 是作为单独的程序运行的,启动之后会一直监听 API Server,获取Pod中Sp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值