Rancher 2.5.5 创建自定义集群,不自动创建 nginx-ingress

Rancher Server 设置

  • Rancher 版本: v2.5.5
  • 安装选项 (Docker install/Helm Chart): Docker install
    • 如果是 Helm Chart 安装,需要提供 Local 集群的类型(RKE1, RKE2, k3s, EKS, 等)和版本:
  • 在线或离线部署:在线

下游集群信息

  • Kubernetes 版本: 1.19.16
  • Cluster Type (Local/Downstream): 自定义
    • 如果 Downstream,是什么类型的集群?(自定义/导入或为托管 等):

用户信息

  • 登录用户的角色是什么? (管理员/集群所有者/集群成员/项目所有者/项目成员/自定义):
    • 如果自定义,自定义权限集:

问题描述:
通过 Rancher v2.5.5 创建的自定义集群(v1.19.16),不会自动创建 nginx-ingress。
2.5.12 是可以的

重现步骤:

  1. 启动单节点 Rancher server
docker run -itd -p  -p 4343:443 --privileged rancher/rancher:v2.5.5
  1. 启动成功后,创建自定义集群,选择最新的 K8s 1.19.16 版本

  2. 等待创建成功后,检查 system project 下是否存在 nginx-ingress

结果:
集群创建成功后,system project 下不存在 nginx-ingress

预期结果:
下游集群创建成功,自动创建 nginx-ingress

1 个赞

使用 Rancher 2.5.5 创建 1.19.16 集群时,可以从 Rancher server 得到以下日志:

2022/04/20 02:07:38 [ERROR] cluster [c-pdpzq] provisioning: Failed to deploy addon execute job [rke-ingress-controller]: template: compiled_template:455:7: executing "compiled_template" at <.NginxIngressControllerPriorityClassName>: can't evaluate field NginxIngressControllerPriorityClassName in type cluster.ingressOptions

原因

环境里kontainer-driver-metadata由于refresh机制应该是匹配最新的模板了,该模版新增了很多参数其中一个是报错的参数,而rancher 2.5.5版本内置的rke是1.2.4,1.2.4 不支持 NginxIngressControllerPriorityClassName 属性 而 rancher 2.5.5 内置的go.mod 里用的是rke 1.2.4

如何解决

为了解决这个问题,可以使用固定kontainer-driver-metadata 的方式,来 让 Rancher 不更新最新的 kontainer-driver-metadata 。

  1. 从 rancher server 中获取 kontainer-driver-metadata
docker cp rancher_container_id:/var/lib/rancher-data/driver-metadata/data.json data.json 
  1. 将 data.json 上传到 Apache 服务器,并保证可以通过 url 访问

  2. 修改 Rancher 的kontainer-driver-metadata 配置,导航到 setting – rke-metadata-config,将 url 修改为你的 apache 服务器地址,并保存。

  3. 重新创建下游集群,此时,可以看到支持的最新 K8s 集群已经变成了 1.19.6

等待集群创建成功后,可以到 system project 下确认 nginx-ingress 是否创建成功。

1 个赞