图解kubernetes资源扩展机制实现(上)

本文详细探讨了k8s设备插件框架,包括 DaemonSet 服务集成、服务注册、插件服务感知、状态管理和OperationExecutor的运作机制。通过理解这些核心概念,可以更好地了解k8s如何支持硬件资源如GPU的调度与分配。
摘要由CSDN通过智能技术生成

k8s目前主要支持CPU和内存两种资源,为了支持用户需要按需分配的其他硬件类型的资源的调度分配,k8s实现了设备插件框架(device plugin framework)来用于其他硬件类型的资源集成,比如现在机器学习要使用GPU等资源,今天来看下其内部的关键实现

1. 基础概念

image.png

1.1 集成方式

1.1.1 DaemonSet与服务

当我们要集成本地硬件的资源的时候,我们可以在当前节点上通过DaemonSet来运行一个GRPC服务,通过这个服务来进行本地硬件资源的上报与分配

1.1.2 服务注册设计

当提供硬件服务需要与kubelet进行通信的时候,则首先需要进行注册,注册的方式,则是通过最原始的底层的socket文件,并且通过Linux文件系统的inotify机制,来实现服务的注册

1.2 插件服务感知

image.png

1.2.1 Watcher

Watcher主要是负责感知当前节点上注册的服务,当发现新的要注册的插件服务,则会产生对应的事件,注册到当前的kubelet中

1.2.2 期望状态与实际状态

这里的状态主要是指的是否需要注册,因为kubelet与对应的插件服务是通过网络进行通信的,当网络出现问题、或者对应的插件服务故障,则可能会导致服务注册失败,但此时对应的服务的socket还依旧存在,即对应的插件服务依旧存在

此时就会有两种状态:期望状态与实际状态, 因为socket存在所以服务的期望状态其实是需要注册这个插件服务,但是实际上因为某些原因,这个插件服务并没有完成注册,后续会不断的通过期望状态,调整实际状态,从而达到一致

1.2.3 协调器

协调器则就是完成上述两种状态之间操作的核心,其通过调用对应插件的回调函数,其实就是调用对应的grpc接口,来完成期望状态与实际状态的一致性

1.2.4 插件控制器

针对每种类型的插件,都会有对应的控制器,其实也就是实现对应设备注册和反注册并且完成底层资源的分配(Allocate)和收集(ListWatch)操作

2. 插件服务发现

image.png

2.1 核心数据结构

type Watcher struct {
    // 感知插件服务注册的socket的路径
    path                string
    fs                  utilfs.Filesystem
    // inotify监测插件服务socket变化
    fsWatcher           *fsnotify.Watcher
    stopped             chan struct{}
    // 存储期望状态
    desiredStateOfWorld cache.DesiredStateOfWorld
}

2.2 初始化

初始化其实就是创建对应的目录

func (w *Watcher) init() error {
    klog.V(4).Infof("Ensuring Plugin directory at %s ", w.path)

    if err := w.fs.MkdirAll(w.path, 0755); err != nil {
        return fmt.Errorf("error (re-)creating root %s: %v", w.path, err)
    }

    return nil
}

2.3 插件服务发现核心

    g
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Kubernetes是一个用于容器编排和管理的开源平台。它可以帮助您在分布式系统中自动化部署、扩展和管理容器化的应用程序。 以下是一个简单的Kubernetes架构图解: ``` +---------------------------------------+ | | | Master节点 | | | +---------------------------------------+ | | | | +---------------------------------------+ | | | Node节点(工作节点) | | | +---------------------------------------+ | | | | +---------------------------------------+ | | | Pod(容器组) | | | +---------------------------------------+ | | | | +---------------------------------------+ | | | 容器(Docker等) | | | +---------------------------------------+ ``` 在这个架构中,Kubernetes集群由一个Master节点和多个Node节点组成。Master节点负责整个集群的管理和控制,而Node节点是实际运行应用程序容器的工作节点。 每个Node节点上可以运行多个Pod(容器组),而每个Pod可以包含一个或多个容器。这些容器可以是使用Docker等容器技术创建的。 Kubernetes通过Master节点上的控制平面组件来管理整个集群。这些组件包括: - API Server:提供集群的API接口,用于与集群进行交互; - Scheduler:负责将Pod调度到合适的Node节点上运行; - Controller Manager:负责监控和管理集群中的各种资源和控制器; - etcd:分布式键值存储,用于保存集群的状态信息。 Node节点上的工作平面组件包括: - Kubelet:负责与Master节点通信,并在Node节点上运行和管理Pod; - Container Runtime:负责管理容器的生命周期,例如Docker。 这个架构图简单地展示了Kubernetes的基本组件和层级关系,帮助您理解Kubernetes的工作原理和部署架构。请注意,实际的Kubernetes集群可能更加复杂,具体的配置和组件数量可能会有所不同。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值