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
领取专属 10元无门槛券
私享最新 技术干货