最完整的Kueue部署指南:从零基础到生产环境(2025实战版)
【免费下载链接】kueue Kubernetes-native Job Queueing 项目地址: https://gitcode.com/gh_mirrors/ku/kueue
你是否正面临这些Kubernetes作业调度难题?
在大规模Kubernetes集群中,作业调度常常陷入资源争抢、优先级混乱、租户公平性难以保证的困境。作为Kubernetes原生的作业队列管理系统,Kueue通过精细化的资源控制和灵活的调度策略,已成为解决这些问题的行业标准。本文将带你从零开始,通过3种部署方式、5个核心配置场景和7个实战验证步骤,构建生产级别的Kueue环境。
读完本文你将掌握:
- 基于kubectl/Helm/源码编译的多途径部署方案
- 自定义资源配额与多租户隔离的最佳实践
- 拓扑感知调度等高级特性的配置方法
- 完整的故障排查与性能优化指南
项目概述:为什么选择Kueue?
Kueue(发音为"cue")是 Kubernetes SIG-Scheduling 维护的作业队列管理系统,通过一组API和控制器实现作业级别的队列管理。它解决了原生Kubernetes调度器在批处理场景下的资源分配缺陷,核心价值体现在:
核心特性矩阵
| 功能 | 描述 | 适用场景 |
|---|---|---|
| 多策略队列 | 支持StrictFIFO/BestEffortFIFO两种调度策略 | 科研计算/CI流水线 |
| 资源 fungibility | GPU/CPU等资源的灵活替代分配 | 混合架构集群 |
| 拓扑感知调度 | 基于机架/区域的亲和性优化 | AI训练作业 |
| 多集群调度 | MultiKueue跨集群负载分发 | 多云资源池 |
| 动态资源回收 | 作业完成后自动释放配额 | 弹性伸缩环境 |
兼容性说明:Kueue v0.13.3要求Kubernetes集群版本≥1.29,生产环境建议使用1.31+以获得最佳稳定性。
部署准备:环境检查清单
在开始部署前,请确保环境满足以下要求:
基础环境要求
| 组件 | 版本要求 | 验证命令 |
|---|---|---|
| Kubernetes | ≥1.29 | kubectl version --short |
| kubectl | ≥1.29 | kubectl version --client |
| Helm | ≥3.8.0 | helm version --short |
| Git | 任意稳定版 | git --version |
网络与权限准备
- 集群管理员权限(创建CRD/ClusterRole所需)
- 节点可访问容器镜像仓库(公网或私有镜像源)
- 至少2GB内存和2核CPU的控制平面节点资源
部署方案一:kubectl快速部署(推荐新手)
这种方式适用于快速体验或测试环境,通过官方Manifest一键部署。
标准安装步骤
# 克隆代码仓库
git clone https://gitcode.com/gh_mirrors/ku/kueue.git
cd kueue
# 部署最新稳定版(v0.13.3)
kubectl apply --server-side -f config/default/manifests.yaml
# 验证命名空间创建
kubectl get ns kueue-system
NAME STATUS AGE
kueue-system Active 30s
验证控制器状态
# 检查部署状态
kubectl get deploy -n kueue-system
NAME READY UP-TO-DATE AVAILABLE AGE
kueue-controller-manager 1/1 1 1 2m30s
# 查看日志确认启动成功
kubectl logs -n kueue-system deployment/kueue-controller-manager -f
# 预期输出包含:"Starting controller manager" 和 "Starting workers"
部署方案二:Helm精细化部署(生产首选)
Helm部署方式支持自定义配置,适合生产环境的参数调优和版本管理。
添加Helm仓库
# 添加官方仓库(使用国内镜像源)
helm repo add kueue https://gitcode.com/gh_mirrors/ku/kueue/charts
# 更新仓库索引
helm repo update
基础安装命令
# 创建命名空间
kubectl create namespace kueue-system
# 安装稳定版
helm install kueue kueue/kueue \
--namespace kueue-system \
--version 0.13.3 \
--set controllerManager.manager.image.repository=registry.aliyuncs.com/k8s-staging-images/kueue/kueue
高级配置示例
创建values.yaml自定义配置文件:
controllerManager:
replicas: 2 # 高可用部署
featureGates:
- name: TopologyAwareScheduling
enabled: true # 启用拓扑感知调度
- name: MultiKueue
enabled: false # 禁用多集群功能
manager:
resources:
limits:
cpu: "2"
memory: 2Gi
requests:
cpu: "1"
memory: 1Gi
livenessProbe:
initialDelaySeconds: 20 # 延长健康检查等待时间
应用自定义配置:
helm upgrade --install kueue kueue/kueue \
--namespace kueue-system \
--version 0.13.3 \
--values values.yaml
Helm配置参数详解
| 参数路径 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| controllerManager.replicas | int | 1 | 控制器副本数 |
| controllerManager.featureGates | list | [] | 特性开关列表 |
| controllerManager.manager.image.repository | string | us-central1-docker.pkg.dev/k8s-staging-images/kueue/kueue | 镜像仓库地址 |
| enableCertManager | bool | false | 是否启用cert-manager集成 |
| enablePrometheus | bool | false | 是否部署Prometheus监控 |
| webhookService.type | string | ClusterIP | Webhook服务类型 |
部署方案三:源码编译部署(开发场景)
适合需要自定义代码或贡献者的场景,需本地Go环境。
编译环境准备
# 安装Go 1.22+(以Ubuntu为例)
sudo apt update && sudo apt install -y golang-1.22
# 配置GOPATH
echo 'export PATH=$PATH:/usr/lib/go-1.22/bin' >> ~/.bashrc
source ~/.bashrc
# 验证Go版本
go version # 应输出go1.22.x
编译与部署
# 克隆代码仓库
git clone https://gitcode.com/gh_mirrors/ku/kueue.git
cd kueue
# 编译二进制文件
make build-manager
# 构建镜像(替换为私有仓库地址)
make docker-build IMG=my-registry/kueue:latest
# 推送镜像
make docker-push IMG=my-registry/kueue:latest
# 部署到集群
make deploy IMG=my-registry/kueue:latest
基础配置:核心资源定义
Kueue的核心功能通过CRD(CustomResourceDefinition)实现,以下是最小化可用配置。
集群队列配置
创建cluster-queue.yaml:
apiVersion: kueue.x-k8s.io/v1beta1
kind: ClusterQueue
metadata:
name: main
spec:
cohort: default
resourceGroups:
- coveredResources: ["cpu", "memory", "nvidia.com/gpu"]
flavors:
- name: "default-flavor"
resources:
- name: cpu
nominalQuota: 100
- name: memory
nominalQuota: 200Gi
- name: nvidia.com/gpu
nominalQuota: 8
queueingStrategy: StrictFIFO
应用配置:
kubectl apply -f cluster-queue.yaml
本地队列配置
创建local-queue.yaml:
apiVersion: kueue.x-k8s.io/v1beta1
kind: LocalQueue
metadata:
name: user-queue
namespace: default
spec:
clusterQueue: main
应用配置:
kubectl apply -f local-queue.yaml
功能验证:示例作业提交
部署完成后,通过示例作业验证Kueue功能。
基本作业测试
创建sample-job.yaml:
apiVersion: batch/v1
kind: Job
metadata:
generateName: kueue-sample-
annotations:
kueue.x-k8s.io/queue-name: user-queue
spec:
parallelism: 2
completions: 2
template:
spec:
containers:
- name: dummy
image: busybox:1.35
command: ["echo", "Hello Kueue!"]
restartPolicy: Never
提交作业并观察:
kubectl apply -f sample-job.yaml
# 查看队列状态
kubectl get localqueues -o wide
NAME CLUSTERQUEUE PENDING WORKLOADS ADMITTED WORKLOADS
user-queue main 0 1
# 查看作业状态
kubectl get jobs
NAME COMPLETIONS DURATION AGE
kueue-sample-xxxxx 2/2 10s 30s
高级功能测试:拓扑感知调度
创建tas-job.yaml:
apiVersion: batch/v1
kind: Job
metadata:
generateName: tas-sample-
annotations:
kueue.x-k8s.io/queue-name: user-queue
spec:
parallelism: 4
completions: 4
template:
metadata:
annotations:
kueue.x-k8s.io/podset: "main"
kueue.x-k8s.io/topology-aware-group-name: "training-group"
spec:
containers:
- name: cuda-test
image: nvidia/cuda:12.1.1-runtime-ubuntu22.04
command: ["nvidia-smi"]
resources:
limits:
nvidia.com/gpu: 1
restartPolicy: Never
提交并验证:
kubectl apply -f tas-job.yaml
# 查看拓扑分布
kubectl describe workload <workload-name> | grep "Topology"
监控与运维:生产环境必备
Prometheus监控集成
启用内置监控功能:
helm upgrade --install kueue kueue/kueue \
--namespace kueue-system \
--set enablePrometheus=true
核心监控指标:
| 指标名称 | 类型 | 说明 |
|---|---|---|
| kueue_workloads_admitted_total | Counter | 准入作业总数 |
| kueue_workloads_pending_seconds | Histogram | 作业等待时间分布 |
| kueue_cluster_queue_quota_used | Gauge | 集群队列资源使用量 |
日志收集配置
添加日志收集注解:
# 在values.yaml中添加
controllerManager:
manager:
podAnnotations:
prometheus.io/scrape: "true"
prometheus.io/path: "/metrics"
prometheus.io/port: "8080"
故障排查:常见问题解决
部署失败排查流程
常见问题解决方案
-
控制器启动失败
# 检查RBAC权限 kubectl describe clusterrolebinding kueue-manager-rolebinding # 典型原因:CRD未正确安装 kubectl get crd | grep kueue.x-k8s.io -
作业一直Pending
# 检查队列配置 kubectl describe clusterqueue main # 检查资源配额 kubectl get clusterqueue main -o jsonpath='{.spec.resourceGroups[0].flavors[0].resources}' -
拓扑感知调度不生效
# 确认特性开关已启用 kubectl get deployment -n kueue-system kueue-controller-manager -o yaml | grep TopologyAwareScheduling
升级与卸载:版本管理
安全升级流程
-
备份当前配置
kubectl get clusterqueues -o yaml > cq-backup.yaml kubectl get localqueues -o yaml > lq-backup.yaml -
Helm升级
helm repo update helm upgrade kueue kueue/kueue --version 0.13.3 --namespace kueue-system
完全卸载
# Helm方式安装的卸载
helm uninstall kueue -n kueue-system
# kubectl方式安装的卸载
kubectl delete -f config/default/manifests.yaml
# 清理CRD(会删除所有队列和作业数据)
kubectl delete crd workloads.kueue.x-k8s.io clusterqueues.kueue.x-k8s.io localqueues.kueue.x-k8s.io
总结与展望
通过本文档,你已掌握Kueue的完整部署流程和核心功能配置。作为Kubernetes批处理作业管理的关键组件,Kueue正在快速发展,2025年路线图重点包括:
- MultiKueue跨集群调度增强
- 推理工作负载的部分抢占支持
- 预算管理功能GA
- v1beta2 API版本发布
建议关注项目CHANGELOG目录获取最新更新,或通过项目GitHub Discussions参与社区交流。
收藏本文,下次部署Kueue时即可快速查阅。如有疑问,欢迎在评论区留言讨论!
【免费下载链接】kueue Kubernetes-native Job Queueing 项目地址: https://gitcode.com/gh_mirrors/ku/kueue
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



