基于 CRD和Admission Webhook 扩展 k8s 支持 GPU Quota

Kubernetes 1.10 版本以后已经原生支持扩展资源的 Quota 管理,详见:https://kubernetes.io/docs/concepts/policy/resource-quotas/#resource-quota-for-extended-resources

如果目前所用的集群没有升级到 1.10,而且又需要管理各个的 GPU 资源配额,推荐大家使用一下 Throttle(https://github.com/xychu/throttle),一个基于和实现的 k8s GPU Quota 管理器。

上图中绿色部分是 Throttle 项目中涉及到的部分,主要包括应用在 k8s 控制平面的以及部署到集群中的和。下面将依次进行简要说明。

GPUQuota CRD

是 级别的 定义,更多 k8s CRD 相关信息见:https://kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/

GPUQuota type 定义

//GPUQuota is a specification for a GPUQuota resource

typeGPUQuotastruct{metav1.TypeMeta`json:",inline"`metav1.ObjectMeta`json:"metadata,omitempty"`Speccorev1.ResourceQuotaSpec`json:"spec"`Statuscorev1.ResourceQuotaStatus`json:"status"`

}GPUQuota 样例GPUQuota Controller

负责根据 定义更新及 对 GPU 资源的使用情况对 的 进行重新计算和更新。

:负责监听的创建及更新事件,并把对应 key 推送到待处理队列;

:负责监听的创建、更新及删除事件,并把对应的key 推送的待处理队列;

:负责记录所有待处理的 ;

:无限循环,检查是否有待处理的,如果有,获取对应下的所有,并进行重新计算并进行更新;

GPUQuota Webhook

是一个 HTTPS Server,负责对配置了需要进行操作的资源进行准入控制。更多信息:https://kubernetes.io/docs/admin/extensible-admission-controllers/#admission-webhooks

GPUQuota Webhook Config 样例

apiVersion:admissionregistration.k8s.io/v1beta1

kind:ValidatingWebhookConfiguration

metadata: name:gpuquota-webook

webhooks: - name:gpuquota.example.comrules: - apiGroups: -""apiVersions: -v1operations: -CREATE-UPDATEresources: -podsfailurePolicy:IgnoreclientConfig: caBundle:""service: name:gpuquota-webhooknamespace:kube-system

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180508G1WF0100?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励