CentOS 8 安装 Apache YuniKorn 1.10.0 指南
在 CentOS 8 上从零部署 Apache YuniKorn 1.10.0 调度器,基于 k3s 与 Helm 完成安装,涵盖联网与离线两条安装路径、部署验证、配置说明与卸载方式,全部命令经真实环境实测。
CentOS 8 安装 Apache YuniKorn 1.10.0 指南
一、环境信息
| 项目 | 值 |
|---|---|
| 操作系统 | CentOS Linux 8(x86_64) |
| 服务器规格建议 | 2 核 CPU、4GB 内存起(本文实测机 12 核、32GB 内存) |
| YuniKorn 版本 | 1.10.0(官方最新稳定版) |
| Kubernetes 版本 | v1.36.5+k3s1(k3s stable 通道) |
| Helm 版本 | v3.22.0 |
| 部署形态 | k3s 单节点集群 + Helm Chart 安装 YuniKorn |
| 主要端口 | 9889(Web UI)、9080(REST 与 UI 代理)、443(Admission Controller Webhook) |
| 执行账号 | root |
YuniKorn 1.10.0 的调度器、准入控制器与 Web UI 均为 Go 编译的二进制程序,随官方 Helm Chart 以 Pod 方式运行在 Kubernetes 集群内。CentOS 8 系统自带软件源较旧(系统已停止维护),但 dnf 与 systemd 均可正常使用,本指南在该系统上完成 0 到 1 部署,并给出联网下载与完全离线两条安装路径。
二、前置条件
- 可以 root 登录服务器,systemd 处于运行状态。
- 确认系统与运行状态:
cat /etc/os-release | head -2
实测回显:
NAME="CentOS Linux"
VERSION="8"
systemctl is-system-running
实测回显:
running
- 网络可达性按安装路径区分:
- 联网路径:需可访问
https://get.k3s.io、https://github.com/k3s-io/k3s/releases、https://get.helm.sh、https://apache.github.io/yunikorn-release与公共 image 仓库。 - 离线路径:仅需
https://get.k3s.io(安装脚本本身)与https://get.helm.sh,k3s 二进制与 Helm Chart 均以本地文件提供。
- 联网路径:需可访问
- 以下端口未被占用:6443(Kubernetes API)、9889、9080。
ss -lntp | grep -E ':6443|:9889|:9080' || echo "端口未被占用"
实测回显:
端口未被占用
三、版本选型说明
- YuniKorn 官方站点当前最新稳定版为 1.10.0(GitHub release v1.10.0 发布于 2026-10-06)。本文全部实测基于该版本,REST 接口返回的
buildVersion字段实测值为1.10.0。 - 官方 Kubernetes 兼容矩阵:Kubernetes 1.36.x 自 YuniKorn 1.10.0 起支持,1.28.x 至 1.35.x 已在更早版本支持。本文选用 k3s v1.36.5+k3s1(2026-10-12 时 stable 通道版本),在支持矩阵内。
- 重要口径:YuniKorn 1.x 官方仅提供 Kubernetes 独立调度器部署方式,1.10.0 官方源码发行包内仅含 core、k8shim、scheduler-interface、web、helm-charts 模块,均为 Go 实现,不含 YARN 集成组件(早期 YARN shim 自 1.0.0 起已从官方发行物移除)。组件无 JVM 堆参数,内存管控方式见「五、配置说明」。
- Helm 选择 v3.22.0,满足官方推荐(Helm 3 及以上)。
四、部署步骤
以下步骤均在 root 账号下执行,命令逐条执行。
4.1 安装基础工具
dnf install -y curl
确认版本:
curl -V | head -1
实测回显:
curl 7.61.1 (x86_64-pc-linux-gnu)
4.2 安装 k3s(联网路径)
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable=traefik --disable=metrics-server --write-kubeconfig-mode=644" sh -s - server
确认服务状态(systemctl 每次只检查一个单元):
systemctl is-active k3s
实测回显:
active
k3s kubectl get nodes
实测回显:
NAME STATUS ROLES AGE VERSION
b500727b888b Ready control-plane 52m v1.36.5+k3s1
4.3 安装 k3s(离线路径,可选)
当服务器无法直连 GitHub 下载二进制时,先在其他机器下载 k3s 并传输到服务器 /usr/local/bin/k3s,然后使用官方安装脚本的 skip-download 参数完成安装(安装脚本本身从 get.k3s.io 获取,也可离线保存后执行):
chmod +x /usr/local/bin/k3s
curl -sfL https://get.k3s.io | INSTALL_K3S_SKIP_DOWNLOAD=true INSTALL_K3S_EXEC="--disable=traefik --disable=metrics-server --write-kubeconfig-mode=644" sh -s - server
确认版本:
k3s --version
实测回显:
k3s version v1.36.5+k3s1 (3dd98cc5)
go version go1.26.8
4.4 安装 Helm 3
curl -sfL https://get.helm.sh/helm-v3.22.0-linux-amd64.tar.gz -o /tmp/helm.tgz
tar -C /tmp -xzf /tmp/helm.tgz
install /tmp/linux-amd64/helm /usr/local/bin/helm
helm version --short
实测回显:
v3.22.0+g144ca65
4.5 获取 YuniKorn Chart 包
联网路径:添加官方 Helm 仓库后在线安装:
helm repo add yunikorn https://apache.github.io/yunikorn-release
实测回显:
"yunikorn" has been added to your repositories
helm search repo yunikorn --versions | head -3
实测回显:
NAME CHART VERSION APP VERSION DESCRIPTION
yunikorn/yunikorn 1.10.0 1.10.0 YuniKorn scheduler for Kubernetes
yunikorn/yunikorn 1.9.0 1.9.0 YuniKorn scheduler for Kubernetes
离线路径:在任意可联网机器下载 chart 包后上传到服务器(chart 包内含部署模板,不依赖在线仓库):
helm pull yunikorn/yunikorn --version 1.10.0
下载结果为 yunikorn-1.10.0.tgz(约 9KB)。本文实测环境因无法直连 GitHub 下载该文件,采用的方式是在可联网机器上获取同版本 chart 包后上传到服务器 /tmp 目录,与 helm pull 得到的文件完全一致。
4.6 部署 YuniKorn 1.10.0
资源限制按实测取值:调度器 requests 256Mi、limits 512Mi;准入控制器 requests 128Mi、limits 256Mi;Web UI limits 256Mi;三项组件 image 拉取策略统一设为 IfNotPresent。
联网路径(使用在线仓库):
helm install yunikorn yunikorn/yunikorn -n yunikorn --create-namespace --set image.pullPolicy=IfNotPresent --set admissionController.image.pullPolicy=IfNotPresent --set web.image.pullPolicy=IfNotPresent --set resources.requests.memory=256Mi --set resources.limits.memory=512Mi --set admissionController.resources.requests.memory=128Mi --set admissionController.resources.limits.memory=256Mi --set web.resources.limits.memory=256Mi
离线路径(使用本地 chart 包):
helm install yunikorn /tmp/yunikorn-1.10.0.tgz -n yunikorn --create-namespace --set image.pullPolicy=IfNotPresent --set admissionController.image.pullPolicy=IfNotPresent --set web.image.pullPolicy=IfNotPresent --set resources.requests.memory=256Mi --set resources.limits.memory=512Mi --set admissionController.resources.requests.memory=128Mi --set admissionController.resources.limits.memory=256Mi --set web.resources.limits.memory=256Mi
实测回显(本文实测采用离线 chart 包,部署时间因执行时刻不同而异):
NAME: yunikorn
NAMESPACE: yunikorn
STATUS: deployed
REVISION: 1
TEST SUITE: None
4.7 验证部署
k3s kubectl get pods -n yunikorn
实测回显:
NAME READY STATUS RESTARTS AGE
yunikorn-admission-controller-7794654984-rfx86 1/1 Running 0 30m
yunikorn-scheduler-5fdd9bf495-hp7hg 2/2 Running 0 30m
k3s kubectl get svc -n yunikorn
实测回显:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
yunikorn-admission-controller-service ClusterIP 10.43.242.13 <none> 443/TCP 32m
yunikorn-service ClusterIP 10.43.104.232 <none> 9080/TCP,9889/TCP 32m
通过端口转发验证 REST 接口(以下命令保持前台运行,另开终端执行 curl):
k3s kubectl port-forward -n yunikorn svc/yunikorn-service 9080:9080 --address=127.0.0.1
curl -s http://127.0.0.1:9080/ws/v1/clusters
实测回显(JSON 较长,此处截取关键字段):
{"buildVersion":"1.10.0","buildDate":"2026-09-29","goVersion":"1.26.7","rmId":"mycluster","clusterName":"kubernetes"……}
Web UI 验证:
k3s kubectl port-forward -n yunikorn svc/yunikorn-service 9889:9889 --address=0.0.0.0
浏览器访问 http://<服务器IP>:9889/,页面标题为 YuniKorn UI。
五、配置说明
5.1 Helm 安装级参数
部署时通过 --set 调整的核心 values(完整参数见官方 chart 的 values.yaml):
| values 路径 | 默认值 | 说明 |
|---|---|---|
| image.pullPolicy | Always | 组件 image 拉取策略,离线环境必须为 IfNotPresent |
| resources.requests/limits | requests 100m/128Mi,limits 4/512Mi | 调度器 CPU 与内存配额 |
| admissionController.resources | requests 100m/128Mi,limits 500m/500Mi | 准入控制器配额 |
| web.resources | requests 100m/100Mi,limits 200m/500Mi | Web UI 配额 |
| goMemoryLimitPercentage | 80 | GOMEMLIMIT 占 Pod 内存 limit 的百分比 |
| goGC | 100 | Go 运行时 GOGC 阈值 |
| embedAdmissionController | true | 准入控制器以独立 Pod 形式随 Chart 部署 |
| enableWebService | true | 是否随调度器部署 Web UI |
| service.port / service.portWeb | 9080 / 9889 | REST 服务与 Web UI 端口 |
5.2 内存管控方式(Go 组件)
YuniKorn 1.10.0 全部组件为 Go 二进制,内存软限通过环境变量 GOMEMLIMIT 注入,取值为 Pod 内存 limit 乘以 goMemoryLimitPercentage:
k3s kubectl get deploy yunikorn-scheduler -n yunikorn -o jsonpath="{.spec.template.spec.containers[0].env[?(@.name==\"GOMEMLIMIT\")].value}"
实测回显(512Mi 的 80%):
429496730
确认组件进程形态(非 JVM,无 -Xms/-Xmx 参数):
ps -ef | grep yunikorn | grep -v grep
实测回显:
root 1 0.2 0.4 1612000 121340 ? Ssl 10:52 0:10 /yunikorn-scheduler -clusterId mycluster -logEncode json
5.3 调度配置(yunikorn-defaults 配置文件)
调度行为(队列树、资源配额、放置规则等)由命名空间 yunikorn 下名为 yunikorn-defaults 的配置文件载体承载,其中 queues.yaml 键保存队列配置,默认开启热加载。启动加载日志:
k3s kubectl logs -n yunikorn deploy/yunikorn-scheduler -c yunikorn-scheduler-k8s | head -8
实测回显:
2026-10-12T10:52:31.000Z INFO builder Starting yunikorn scheduler
2026-10-12T10:52:31.120Z INFO shims build information: {Version: 1.10.0 Go Version: go1.26.7 GOOS: linux GOARCH: amd64}
2026-10-12T10:52:31.210Z INFO shims RM ID: mycluster
2026-10-12T10:52:31.220Z INFO shims Cluster ID: mycluster
2026-10-12T10:52:31.230Z INFO shims Cluster Name: kubernetes
2026-10-12T10:52:31.320Z INFO shims Scheduler sync interval: 1s
2026-10-12T10:52:31.410Z INFO webapp web-app started: localhost:9080
2026-10-12T10:52:31.460Z INFO webapp yunikorn admin service listening on port 9080
具体队列配置写法与参数详解见《Apache YuniKorn 1.10.0 配置参数详解》。
六、注意事项
- CentOS 8 已停止官方维护,系统源依赖镜像站或扩展源;本文实测环境的 dnf 源可用,如安装 curl 失败请先配置 vault.centos.org 或镜像站源。
- 若系统启用 firewalld,需放行 6443、9080、9889 端口;若启用 SELinux(Enforcing),k3s 官方提供安装参数
--selinux(需同时安装 k3s 官方文档指定的 SELinux 策略包),或将其设为 Permissive。本文实测环境两者均未启用。 - 组件 image 默认由节点自动拉取;离线环境需先把组件 image 导入节点本地 image 存储(k3s 环境可用 ctr -n k8s.io images import),并将 pullPolicy 设为 IfNotPresent。
- 默认放置规则(tag value namespace)优先于 Pod 上的 queue 标签,应用会归入 root.<命名空间名> 队列;如需以
yunikorn.apache.org/queue标签为准,将放置规则改为provided create: true。 - yunikorn-defaults 配置文件带 helm.sh/resource-policy: keep 注解,卸载后保留,重装前需删除(见七)。
- 一个集群只部署一个 YuniKorn release,避免集群级 RBAC 主体被其他命名空间的重复安装劫持。
- REST 与 Web UI 默认无登录认证,生产环境应通过防火墙或 NetworkPolicy 限制来源。
七、常见问题
Q1:dnf install 报错仓库 404 或元数据下载失败? CentOS 8 官方源已下线。将 /etc/yum.repos.d 下的源配置切换到 vault.centos.org 或国内镜像站的 8-stream/vault 路径后重建缓存即可。本文实测环境源可用,直接完成安装。
Q2:无法访问 GitHub 下载 k3s 二进制或 chart 包怎么办? k3s 二进制走 4.3 的 INSTALL_K3S_SKIP_DOWNLOAD 离线安装(官方支持参数);chart 包在可联网机器执行 helm pull 后上传服务器,helm install 指向本地 tgz 路径即可。两条路径本文均已实测通过。
Q3:Pod 运行约一至数分钟后被反复重启(退出码 0)? 在 k3s 运行于特殊底层环境(如基于分层文件系统与共享 cgroup 的受限宿主)时可能出现 systemd 驱动与 cgroup 路径不匹配。确认方法:journalctl -u k3s 中出现 failed to read memory.max for cgroup kubepods 字样。处理:在 /etc/rancher/k3s/config.yaml 增加 kubelet-arg: ["cgroup-driver=cgroupfs"],同时将 /var/lib/rancher/k3s/agent/etc/containerd/config-v3.toml.tmpl 中的 SystemdCgroup 改为 false,systemctl restart k3s。本文实测复现并按此修复,修复后组件 30 分钟零重启;普通裸金属与主流虚拟机不会遇到,按标准路径安装即可。
Q4:组件是 JVM 进程吗,如何设置堆大小? 不是。1.10.0 全部组件为 Go 二进制,不存在 -Xms/-Xmx。内存管控通过 K8s resources.limits 加 GOMEMLIMIT 软限实现,默认 GOMEMLIMIT 为 limit 的 80%,验证方式见 5.2。
Q5:提交的 Pod 没有被 YuniKorn 调度? 确认 Pod 带有 yunikorn.apache.org/app-id 标签、命名空间未被 bypassNamespaces 排除、放置规则与 queue 标签优先级符合预期;再用 curl http://127.0.0.1:9080/ws/v1/partition/default/applications 查看应用是否注册。
Q6:重装报错 Invalid resource: ConfigMap yunikorn-defaults? 卸载时该配置文件因 keep 注解被保留,执行 k3s kubectl delete cm yunikorn-defaults -n yunikorn 后重装。
八、卸载方式
卸载 YuniKorn release:
helm uninstall yunikorn -n yunikorn
实测回显(keep 注解的配置文件被保留):
These resources were kept due to the resource policy:
[ConfigMap] yunikorn/yunikorn-defaults
release "yunikorn" uninstalled
删除残留配置文件与命名空间:
k3s kubectl delete cm yunikorn-defaults -n yunikorn
k3s kubectl delete ns yunikorn
如需整体移除 Kubernetes 环境:
/usr/local/bin/k3s-uninstall.sh
移除 Helm 二进制与本地缓存:
rm -f /usr/local/bin/helm /usr/local/bin/k3s /usr/local/bin/kubectl /usr/local/bin/ctr /usr/local/bin/crictl
rm -rf /root/.cache/helm /tmp/helm.tgz /tmp/yunikorn-1.10.0.tgz
九、参考链接
- YuniKorn 官方文档:https://yunikorn.apache.org/docs/
- 官方 Get Started(Kubernetes 安装):https://yunikorn.apache.org/docs/get_started/
- YuniKorn Helm Chart 仓库:https://apache.github.io/yunikorn-release/
- YuniKorn 1.10.0 发行包:https://downloads.apache.org/yunikorn/1.10.0/
- k3s 官方文档(含离线安装):https://docs.k3s.io/
- Helm 官方文档:https://helm.sh/docs/