1
2
3
4
5
6
7
作者:李晓辉

联系方式:

1. 微信:Lxh_Chat

2. 邮箱:939958092@qq.com

在 Kubernetes 环境中部署 Rancher 是构建企业级容器管理平台的重要一步。本文将以裸金属环境为例,详细介绍如何使用 Helm 安装 Rancher,包括准备 Helm 工具、配置 Ingress Controller、安装 cert-manager 以及部署 Rancher Server 的完整流程。通过自签名证书方式实现安全访问,并结合图文展示最终效果,帮助读者快速搭建可视化的多集群管理平台。

为什么要用 Rancher?

优势点描述说明
多集群统一管理支持集中管理本地、云端、边缘等多个 Kubernetes 集群,简化运维流程
图形化操作界面提供直观的 Web UI,降低使用门槛,提升操作效率
权限与安全控制内置 RBAC、审计日志等功能,满足企业安全合规要求
应用部署与 Helm 支持集成 Helm Chart,可一键部署常用应用,加速 DevOps 流程
多租户与项目隔离支持按项目划分资源,适合多团队协作又相互隔离的场景

现在我们来部署一个吧~

部署环境信息

  • 操作系统:Ubuntu 24.04 LTS(64位)
  • Kubernetes 版本:v1.33.x
  • 部署方式:裸金属环境,使用 Helm 安装 Rancher
  • 网络组件:ingress-nginx,以 DaemonSet 模式部署并启用主机网络
  • 证书方案:Rancher 自签名证书,依赖 cert-manager 自动签发
  • 容器运行时:使用Docker(Ubuntu 24.04 默认配置)

准备Helm环境

Helm 在安装 Rancher 时充当自动化部署工具的角色,它将 Rancher 的所有 Kubernetes 资源(包括 Deployment、Service、Ingress、配置等)打包为一个可复用的 Chart,使用户能够通过一条命令快速部署、配置和管理 Rancher,同时支持版本控制、参数定制和后续升级,极大简化了企业级容器平台的部署流程。

下载helm工具,最新版可从此页面下载

1
wget https://get.helm.sh/helm-v3.19.0-linux-amd64.tar.gz

将helm工具安装到用户的$PATH路径中

1
2
3
4
5
6
root@k8s-master:~# tar xf helm-v3.19.0-linux-amd64.tar.gz
root@k8s-master:~# ls
helm-v3.19.0-linux-amd64.tar.gz linux-amd64
root@k8s-master:~# mv linux-amd64/helm /usr/bin/
root@k8s-master:~# helm version
version.BuildInfo{Version:"v3.19.0", GitCommit:"3d8990f0836691f0229297773f3524598f46bda6", GitTreeState:"clean", GoVersion:"go1.24.7"}

添加helm命令补齐功能

执行以下命令后,你可以退出ssh,并重新登录或者执行sudo -i,即可使用helm的tab补齐功能

1
helm completion bash > /etc/bash_completion.d/helm

Ingress Controller

在安装 Rancher 时,Ingress Controller 的作用是为 Rancher 提供外部访问入口。它负责监听集群中的 Ingress 资源,并将来自外部的 HTTP/HTTPS 请求路由到 Rancher 的服务组件。由于 Rancher 默认不会在 Ingress 中设置 ingressClassName,我们通常需要配置 Ingress Controller 为默认类,以确保它能自动接管这些 Ingress 并实现 Web UI 的访问。

为了提升 Ingress Controller 的可达性,尤其是在裸金属环境中,我们希望让每个节点都运行一个 Ingress Controller 实例,并直接暴露主机网络端口。为此,我们对官方部署清单进行如下调整:

  1. 下载官方部署清单:
1
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.13.3/deploy/static/provider/baremetal/deploy.yaml
  1. 修改控制器的部署方式:

    • 将清单中的 Deployment 类型修改为 DaemonSet,以便在每个节点上运行一个副本。
  2. 启用主机网络访问:

    • spec.template.spec 中添加字段 hostNetwork: true,使每个 Pod 直接使用宿主机网络,便于外部访问。
  3. 修改更新机制

Deployment 使用 strategy 来控制滚动更新,而 DaemonSet 使用的是 updateStrategy。两者字段名不同但语义类似,因此在将控制器类型从 Deployment 改为 DaemonSet 时,必须同步调整字段名以避免配置错误。

完成修改后,Yaml文件中的原Deployment被改成:

1
2
3
4
5
6
7
8
9
10
11
apiVersion: apps/v1
kind: DaemonSet
spec:
updateStrategy:
rollingUpdate:
maxUnavailable: 1
type: RollingUpdate
spec:
hostNetwork: true
automountServiceAccountToken: true
containers:

修改完成后,我们将Ingress控制器部署到kubernetes集群中

1
kubectl create -f deploy.yaml

Rancher Helm Chart 默认情况下不会在 Ingress 上设置 ingressClassName。因此,你必须将 Ingress Controller 配置为在没有 ingressClassName 的情况下也可以监视 Ingress,所以在部署好ingress控制器后,用patch命令添加一个annotations标记为默认。

1
2
3
kubectl patch ingressclass nginx \
--type='merge' \
-p '{"metadata":{"annotations":{"ingressclass.kubernetes.io/is-default-class":"true"}}}'

安装 Rancher Helm Chart

Rancher 是通过 Kubernetes 的 Helm 包管理器进行安装的。Helm Chart 为原始的 YAML 清单提供了模板化能力,使用户能够根据参数动态生成资源配置,从而实现灵活、可定制的部署方式,而不再依赖于固定的静态文件。

使用 Helm 安装 Rancher 相比手工编写 YAML 文件的方式,具有显著优势:它通过模板化和参数化机制简化了部署流程,避免了繁琐的资源定义和版本兼容问题;同时支持一键安装、升级、回滚和卸载,便于统一管理和持续维护,大幅提升了部署效率与可控性,尤其适合企业级环境中的标准化运维。

添加 Helm Chart 仓库

在安装 Rancher 前,需通过 helm repo add 命令添加官方 Helm Chart 仓库。根据使用场景选择合适的版本源:

  • Latest:用于体验最新功能
1
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
  • Stable:推荐用于生产环境
1
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
  • Alpha:实验性预览版本,适合探索即将发布的功能
1
helm repo add rancher-alpha https://releases.rancher.com/server-charts/alpha

⚠️ 注意:Alpha 版本不支持升级或版本间切换,仅适用于临时测试。

选择仓库时应根据稳定性需求和功能预期权衡,确保部署策略与环境匹配,我们本次安装就选择stable

看看仓库是否添加完毕

1
2
3
root@k8s-master:~# helm repo list
NAME URL
rancher-stable https://releases.rancher.com/server-charts/stable

为 Rancher 创建命名空间

在安装 Rancher 之前,必须先创建一个专用的 Kubernetes 命名空间,用于隔离和管理 Rancher 所部署的资源。推荐使用命名空间名称 cattle-system,执行以下命令即可创建:

1
kubectl create namespace cattle-system

这样可以确保 Helm 安装的所有组件都集中在该命名空间中,便于后续的运维与权限控制。

SSL 证书配置

Rancher 默认需要 TLS 证书来保护访问安全。你可以选择三种方式终止 TLS:

  • Rancher 自签证书:需安装 cert-manager,自动生成和管理证书
  • Let’s Encrypt 公共证书:也需 cert-manager,通过 HTTP 验证自动申请
  • 已有证书:手动上传 tls.crttls.key,无需 cert-manager

通过 Helm 设置 ingress.tls.source 参数即可指定证书来源,我们这里选择自签名证书的方式,所以我们先完成cert-manager的安装。

安装CRD

1
kubectl apply -f https://hub.gitmirror.com/https://github.com/cert-manager/cert-manager/releases/download/v1.19.1/cert-manager.crds.yaml

添加 Jetstack Helm 仓库

1
helm repo add jetstack https://charts.jetstack.io

看看仓库是否添加完毕

1
2
3
4
root@k8s-master:~# helm repo list
NAME URL
jetstack https://charts.jetstack.io
rancher-stable https://releases.rancher.com/server-charts/stable

更新本地 Helm Chart 仓库缓存

1
helm repo update

安装 cert-manager Helm Chart

1
2
3
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace

这个安装过程要拉取一些镜像,可能需要一定的时间,耐心等待即可,安装好之后,我们来看看cert-manager的pod

1
2
3
4
5
root@k8s-master:~# kubectl get pod -n cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-77b74755d9-nscwj 1/1 Running 0 97s
cert-manager-cainjector-65fcfd6ccf-qff4r 1/1 Running 0 97s
cert-manager-webhook-9b4dd78-kpjhz 1/1 Running 0 97s

通过 Helm 安装 Rancher

我们采用的是自签名证书方式,因此 Rancher 会默认生成 CA,并通过 cert-manager 自动签发用于访问 Rancher Server 的 TLS 证书。由于 ingress.tls.source=rancher 是 Helm Chart 的默认配置项,安装时无需显式指定该参数。这样可以简化部署流程,同时确保接口通信具备基础的加密保护。

在使用 Helm 安装 Rancher 时,请确保设置以下关键参数:

  • hostname:指定解析到负载均衡器的 DNS 名称或使用分配给ingress的域名,用于外部访问 Rancher UI,在下面的例子中,我打算用rancher.xiaohui.cn作为访问域名,不过这需要做hosts解析,因为这域名并不属于我
  • bootstrapPassword:为 admin 用户设置初始登录密码,确保安全性,在下面的例子中我用的是lixiaohui
  • --version:如需安装特定版本的 Rancher,可通过该标志指定版本号,例如 --version 2.12.3

这些参数可通过 --set 传入 Helm 命令,实现定制化部署。

1
2
3
4
helm install rancher rancher-stable/rancher \
--namespace cattle-system \
--set hostname=rancher.xiaohui.cn \
--set bootstrapPassword=lixiaohui

命令执行后,会输出以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
NAME: rancher
LAST DEPLOYED: Mon Oct 27 16:36:03 2025
NAMESPACE: cattle-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Rancher Server has been installed. Rancher may take several minutes to fully initialize.

Please standby while Certificates are being issued, Containers are started and the Ingress rule comes up.

Check out our docs at https://rancher.com/docs/

## First Time Login

If you provided your own bootstrap password during installation, browse to https://rancher.xiaohui.cn to get started.
If this is the first time you installed Rancher, get started by running this command and clicking the URL it generates:

echo https://rancher.xiaohui.cn/dashboard/?setup=$(kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}')

To get just the bootstrap password on its own, run:

kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}{{ "\n" }}'

Happy Containering!

以上信息告诉我们,如果需要,可以用secret的方法找到我们的密码。

验证 Rancher Server 是否部署成功

用一下命令观察rancher的deployment是否部署成功,卡住不动说明还没有成功

不过需要说明的是,在中国,你需要各种容器镜像加速器才可以成功,如果你卡住不动,并且没有容器镜像加速器,可以点这里查询容器镜像加速器相关内容

1
2
root@k8s-master:~# kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...

或者你直接简单粗暴的用下面的方法查看

1
kubectl get pod -A

只要都是running即可说明安装成功了。

一切正常后,我们来试试访问rancher看看,在访问前,我们需要看看是否创建了ingress供我们访问

1
2
3
root@k8s-master:~# kubectl get ingress -n cattle-system
NAME CLASS HOSTS ADDRESS PORTS AGE
rancher nginx rancher.xiaohui.cn 192.168.8.4 80, 443 6m18s

没问题后,我们在Windows上的C:\Windows\System32\drivers\etc\hosts文件中,添加域名和地址的解析,即可打开web ui

1
192.168.8.4 rancher.xiaohui.cn

让我们来欣赏一下rancher的风景吧~

第一次登陆的时候,让你输入bootstrap的密码,并设置新的密码

rancher-setup.png

登陆后,看看主页

rancher-home.png

主页是英文的,可以点右上角的账号设置,设置成中文就可以了

rancher-cluster-events.png

忽略我的红色,因为我有一个节点没开机~

哈哈,大功告成喽,希望我的文章对你有帮助~