CentOS 8 安装 Apache YuniKorn 1.10.0 指南

在 CentOS 8 上从零部署 Apache YuniKorn 1.10.0 调度器,基于 k3s 与 Helm 完成安装,涵盖联网与离线两条安装路径、部署验证、配置说明与卸载方式,全部命令经真实环境实测。

Apache YuniKornApache YuniKorn2026/10/12

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 部署,并给出联网下载与完全离线两条安装路径。

二、前置条件

  1. 可以 root 登录服务器,systemd 处于运行状态。
  2. 确认系统与运行状态:
cat /etc/os-release | head -2

实测回显:

NAME="CentOS Linux"
VERSION="8"
systemctl is-system-running

实测回显:

running
  1. 网络可达性按安装路径区分:
    • 联网路径:需可访问 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 均以本地文件提供。
  2. 以下端口未被占用:6443(Kubernetes API)、9889、9080。
ss -lntp | grep -E ':6443|:9889|:9080' || echo "端口未被占用"

实测回显:

端口未被占用

三、版本选型说明

  1. YuniKorn 官方站点当前最新稳定版为 1.10.0(GitHub release v1.10.0 发布于 2026-10-06)。本文全部实测基于该版本,REST 接口返回的 buildVersion 字段实测值为 1.10.0。
  2. 官方 Kubernetes 兼容矩阵:Kubernetes 1.36.x 自 YuniKorn 1.10.0 起支持,1.28.x 至 1.35.x 已在更早版本支持。本文选用 k3s v1.36.5+k3s1(2026-10-12 时 stable 通道版本),在支持矩阵内。
  3. 重要口径:YuniKorn 1.x 官方仅提供 Kubernetes 独立调度器部署方式,1.10.0 官方源码发行包内仅含 core、k8shim、scheduler-interface、web、helm-charts 模块,均为 Go 实现,不含 YARN 集成组件(早期 YARN shim 自 1.0.0 起已从官方发行物移除)。组件无 JVM 堆参数,内存管控方式见「五、配置说明」。
  4. 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.pullPolicyAlways组件 image 拉取策略,离线环境必须为 IfNotPresent
resources.requests/limitsrequests 100m/128Mi,limits 4/512Mi调度器 CPU 与内存配额
admissionController.resourcesrequests 100m/128Mi,limits 500m/500Mi准入控制器配额
web.resourcesrequests 100m/100Mi,limits 200m/500MiWeb UI 配额
goMemoryLimitPercentage80GOMEMLIMIT 占 Pod 内存 limit 的百分比
goGC100Go 运行时 GOGC 阈值
embedAdmissionControllertrue准入控制器以独立 Pod 形式随 Chart 部署
enableWebServicetrue是否随调度器部署 Web UI
service.port / service.portWeb9080 / 9889REST 服务与 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 配置参数详解》。

六、注意事项

  1. CentOS 8 已停止官方维护,系统源依赖镜像站或扩展源;本文实测环境的 dnf 源可用,如安装 curl 失败请先配置 vault.centos.org 或镜像站源。
  2. 若系统启用 firewalld,需放行 6443、9080、9889 端口;若启用 SELinux(Enforcing),k3s 官方提供安装参数 --selinux(需同时安装 k3s 官方文档指定的 SELinux 策略包),或将其设为 Permissive。本文实测环境两者均未启用。
  3. 组件 image 默认由节点自动拉取;离线环境需先把组件 image 导入节点本地 image 存储(k3s 环境可用 ctr -n k8s.io images import),并将 pullPolicy 设为 IfNotPresent。
  4. 默认放置规则(tag value namespace)优先于 Pod 上的 queue 标签,应用会归入 root.<命名空间名> 队列;如需以 yunikorn.apache.org/queue 标签为准,将放置规则改为 provided create: true。
  5. yunikorn-defaults 配置文件带 helm.sh/resource-policy: keep 注解,卸载后保留,重装前需删除(见七)。
  6. 一个集群只部署一个 YuniKorn release,避免集群级 RBAC 主体被其他命名空间的重复安装劫持。
  7. 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

九、参考链接

  1. YuniKorn 官方文档:https://yunikorn.apache.org/docs/
  2. 官方 Get Started(Kubernetes 安装):https://yunikorn.apache.org/docs/get_started/
  3. YuniKorn Helm Chart 仓库:https://apache.github.io/yunikorn-release/
  4. YuniKorn 1.10.0 发行包:https://downloads.apache.org/yunikorn/1.10.0/
  5. k3s 官方文档(含离线安装):https://docs.k3s.io/
  6. Helm 官方文档:https://helm.sh/docs/