Rancher容器管理平台

Rancher 中文文档: https://docs.rancher.cn/

什么是 Rancher?

Rancher 是一个 Kubernetes 管理工具,让你能在任何地方任何提供商上部署和运行集群。

Rancher 可以创建来自 Kubernetes 托管服务提供商的集群,创建节点并安装 Kubernetes,或者导入在任何地方运行的现有 Kubernetes 集群

Rancher 基于 Kubernetes 添加了新的功能,包括统一所有集群的身份验证和 RBAC,让系统管理员从一个位置控制全部集群的访问。

此外,Rancher 可以为集群和资源提供更精细的监控和告警,将日志发送到外部提供商,并通过应用商店(Application Catalog)直接集成 Helm。如果你拥有外部 CI/CD 系统,你可以将其与 Rancher 对接。没有的话,你也可以使用 Rancher 提供的 Fleet 自动部署和升级工作负载。

Rancher 是一个 全栈式 的 Kubernetes 容器管理平台,为你提供在任何地方都能成功运行 Kubernetes 的工具。

Docker部署Rancher

仅需三步!开启Rancher之旅

准备一台Linux主机 要求4GB内存,并且已经安装Docker

安装教程:使用 Docker 将 Rancher 安装到单个节点中

**Docker 安装在生产环境中不支持。**这些说明仅用于测试和开发目的。请不要使用此方法在生产环境中安装 Rancher。Rancher 的 Docker 安装仅推荐用于开发和测试环境中

1.基础配置

Rancher 容器内部启动了 k3s,它依赖于底层宿主机具备 iptables 支持(用于网络转发、容器间通信等),否则会因为 缺少 iptable_nat / iptable_filter 模块 而导致:

1
2
3
4
5
6
7
8
yum install -y iptables
modprobe iptable_nat
modprobe iptable_filter
sudo tee /etc/modules-load.d/modules.conf >/dev/null <<EOF
iptable_nat
iptable_filter
EOF
reboot

1.创建rancher挂在目录

1
2
3
4
5
6
docker rm -f qianyios_rancher
rm -rf /data/rancher_home/rancher/*
rm -rf /data/rancher_home/auditlog/*

mkdir -p /data/rancher_home/rancher
mkdir -p /data/rancher_home/auditlog

2.安装rancher

1
2
3
4
5
docker run -d --privileged --restart=unless-stopped \
-p 8080:80 -p 4431:443 \
-v /data/rancher_home/rancher:/var/lib/rancher \
-v /data/rancher_home/auditlog:/var/log/auditlog \
--name qianyios_rancher registry.cn-guangzhou.aliyuncs.com/qianyios/rancher:stable

-p 8080:80 外部端口:8080(宿主机端口):内部端口:80(容器端口)

-p 4431:443 外部端口:4431(宿主机端口):内部端口:443(容器端口)

registry.cn-guangzhou.aliyuncs.com/qianyios/rancher:stable是我自己构建的镜像(不定期更新,可能会落后版本),如果有条件可以下载原版镜像 rancher/rancher:stable

或者用国内构建的官方镜像registry.cn-hangzhou.aliyuncs.com/qianyios/rancher:版本号这个你需要携带版本号

--privileged 标志会给容器内的进程几乎相同于宿主机的特权。这意味着容器内的进程可以访问宿主机的所有设备,并且可以执行一些通常需要特权的操作,比如加载内核模块等

访问地址:https://192.168.48.10:4431

image-20250620191750583

查看密码

1
docker logs qianyios_rancher  2>&1 | grep "Bootstrap Password:"

qianyios_rancher是我前面创建容器的一个名字

Bootstrap Password: 5qnwrp6gm9q28zsqnkbd2ktjxpkqkbt9rdbpb46c5xzf5qqkr8snx7

设置自定义密码

image-20250620192043119

image-20250620192152598

首页就这样了,安装成功

设置中文

image-20250630171010286

添加已

在Kubernetes上部署Rancher

在此之前添加一个环境变量

操作节点:[所有的server]

在root用户下

1
2
3
4
5
6
sudo echo "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml" >> /etc/profile
sudo echo "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml" >> ~/.bashrc
source /etc/profile
source ~/.bashrc
sudo kubectl config view --raw >>~/.kube/config
echo $KUBECONFIG

先决条件

  • helm3
  • [Kubernetes 集群](#Kubernetes 集群)
  • [Ingress Controller](#Ingress Controller)
  • CLI 工具

Helm3

建议所有的server节点都安装

官网教程:Helm3 安装

本教材默认你使用的是helm3,如果没安装请按照以下教程安装,安装了就略过

1
sudo curl https://qygit.qianyisky.cn/https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

image-20250625174201913

Kubernetes 集群

自行部署一个Kubernetes集群

已经测试过的Kubernetes

基于OpenEuler部署K3S

基于Centos7部署k3s

OpenEuler-K8S高可用集群(内部etcd)

Ingress Controller

Rancher UI 和 API 通过 Ingress 公开。换言之,安装 Rancher 的 Kubernetes 集群必须包含一个 Ingress Controller。

对于 RKE、RKE2 和 K3s,你不需要手动安装 Ingress Controller,因为它是默认安装的。

对于默认不包含 Ingress Controller 的发行版(例如 EKS、GKE 或 AKS 等托管 Kubernetes 集群),你必须先部署 Ingress Controller。请注意,Rancher Helm Chart 默认情况下不会在 Ingress 上设置 ingressClassName。因此,你必须将 Ingress Controller 配置为在没有 ingressClassName 的情况下也可以监视 Ingress。

上面的 Amazon EKSAKSGKE 教程中包含了示例。

如果不是RKE、RKE2 和 K3s的Kubernetes,你需要按照一下教程安装Ingress Controller

1
2
3
sudo helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
sudo helm repo update
sudo helm search repo ingress-nginx -l

安装 Rancher Helm Chart

Rancher 是使用 Kubernetes 的 Helm 包管理器安装的。Helm Chart 为 Kubernetes YAML 清单文件提供了模板语法。通过 Helm,用户可以创建可配置的 deployment,而不仅仅只能使用静态文件。

如果系统无法直接访问互联网,请参见离线环境:Kubernetes 安装

如果要指定安装的 Rancher 版本,请参见选择 Rancher 版本

如果要指定用于安装 Rancher 的 Helm 版本,请参见Helm 版本要求

本安装指南假定你使用的是 Helm 3。

添加 Helm Chart 仓库

操作节点:[server1]

Latest:建议用于试用最新功能

1
sudo helm repo add rancher-latest https://releases.rancher.com/server-charts/latest

Stable:建议用于生产环境(本实验实验这个)

1
sudo helm repo add rancher-stable https://releases.rancher.com/server-charts/stable

Alpha:即将发布的实验性预览。

1
sudo helm repo add rancher-alpha https://releases.rancher.com/server-charts/alpha

注意:不支持升级到 Alpha 版、从 Alpha 版升级或在 Alpha 版之间升级。

为 Rancher 创建命名空间

1
kubectl create namespace cattle-system

选择 SSL 配置

Rancher Management Server 默认需要 SSL/TLS 配置来保证访问的安全性。

你可以从以下三种证书来源中选择一种,用于在 Rancher Server 中设置 TLS:

  • Rancher 生成的 TLS 证书:要求你在集群中安装 cert-manager。Rancher 使用 cert-manager 签发并维护证书。Rancher 会生成自己的 CA 证书,并使用该 CA 签署证书。然后 cert-manager负责管理该证书。
  • Let’s Encrypt:Let’s Encrypt 选项也需要使用 cert-manager。但是,在这种情况下,cert-manager 与 Let’s Encrypt 的特殊颁发者相结合,该颁发者执行获取 Let’s Encrypt 颁发的证书所需的所有操作(包括请求和验证)。此配置使用 HTTP 验证(HTTP-01),因此负载均衡器必须具有可以从互联网访问的公共 DNS 记录。
  • 你已有的证书:使用已有的 CA 颁发的公有或私有证书。Rancher 将使用该证书来保护 WebSocket 和 HTTPS 流量。在这种情况下,你必须上传名称分别为 tls.crttls.key的 PEM 格式的证书以及相关的密钥。如果你使用私有 CA,则还必须上传该 CA 证书。这是由于你的节点可能不信任此私有 CA。Rancher 将获取该 CA 证书,并从中生成一个校验和,各种 Rancher 组件将使用该校验和来验证其与 Rancher 的连接。
配置 Helm Chart 选项 是否需要 cert-manager
Rancher 生成的证书(默认) ingress.tls.source=rancher
Let’s Encrypt ingress.tls.source=letsEncrypt
你已有的证书 ingress.tls.source=secret
安装 cert-manager

建议提前下载这个镜像rancher/mirrored-library-traefik:3.3.6

如果你使用自己的证书文件(ingress.tls.source=secret)或使用外部负载均衡器的 TLS 设置,你可以跳过此步骤。

仅在使用 Rancher 生成的证书(ingress.tls.source=rancher)或 Let’s Encrypt 颁发的证书(ingress.tls.source=letsEncrypt)时,才需要安装 cert-manager。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 如果你手动安装了CRD,而不是在 Helm 安装命令(下面最后一条安装命令)中添加了 `--set installCRDs=true` 选项,你应该在升级 Helm Chart 之前升级 CRD 资源。
sudo kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/<版本号>/cert-manager.crds.yaml

# 添加 Jetstack Helm 仓库
sudo helm repo add jetstack https://charts.jetstack.io

# 更新本地 Helm Chart 仓库缓存
sudo helm repo update

# 安装 cert-manager Helm Chart
sudo helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--set installCRDs=true \
--kubeconfig /etc/rancher/k3s/k3s.yaml

image-20250630155004149

这里可能要等个一两分钟

1
sudo kubectl get pods --namespace cert-manager
1
2
3
4
5
[abc@server1 ~]$ sudo kubectl get pods --namespace cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-7ccbc46c67-w6bpt 1/1 Running 0 118s
cert-manager-cainjector-655bb66698-gsqm6 1/1 Running 0 118s
cert-manager-webhook-586666dcd7-mhcmn 1/1 Running 0 118s

如果要卸载就用下面的命令

1
2
helm uninstall cert-manager --namespace cert-manager
kubectl delete namespace cert-manager

根据你选择的证书选项,通过 Helm 安装 Rancher

日期:2025年6月30日

目前他会用到的进行过是rancher/rancher:v2.11.3但是拉去很慢。那你就用下面的命令,后面如果更新了,我就不知道了,下面是我自己构建的镜像,如果版本变量,你就自己构建镜像,然后自己打tag就行了

1
2
3
sudo docker pull registry.cn-guangzhou.aliyuncs.com/qianyios/rancher:v2.11.3
sudo docker rmi rancher/rancher:v2.11.3
sudo docker tag registry.cn-guangzhou.aliyuncs.com/qianyios/rancher:v2.11.3 rancher/rancher:v2.11.3

不同的证书配置需要使用不同的 Rancher 安装命令。

但是,无论证书如何配置,Rancher 在 cattle-system 命名空间中的安装名称应该总是 rancher

测试和开发:

这个安装 Rancher 的最终命令需要一个将流量转发到 Rancher 的域名。如果你使用 Helm CLI 设置概念证明,则可以在传入 hostname 选项时使用伪域名。伪域名的一个例子是 <IP_OF_LINUX_NODE>.sslip.io,这会把 Rancher 暴露在它运行的 IP 上。生产安装中要求填写真实的域名。

这里就用Rancher 生成的证书的方式,其他的方式需要自行访问官网根据你选择的证书选项,通过 Helm 安装 Rancher

1
2
3
4
#添加 Rancher 的 Helm 仓库
sudo helm uninstall rancher --namespace cattle-system
sudo helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
sudo helm repo update

域名安装方式

默认情况是使用 Rancher 生成 CA,并使用 cert-manager 颁发用于访问 Rancher Server 接口的证书。

由于 rancheringress.tls.source 的默认选项,因此在执行 helm install 命令时,我们不需要指定 ingress.tls.source

  • hostname 设置为解析到你的负载均衡器的 DNS 名称。
  • bootstrapPassword 设置为 admin 用户独有的值。
  • 如果你需要安装指定的 Rancher 版本,使用 --version 标志,例如 --version 2.7.0
  • 对于 Kubernetes v1.25 或更高版本,使用 Rancher v2.7.2-v2.7.4 时,将 global.cattle.psp.enabled 设置为 false。对于 Rancher v2.7.5 及更高版本来说,这不是必需的,但你仍然可以手动设置该选项。

你要自行更改域名

1
2
3
4
5
6
sudo helm install rancher rancher-stable/rancher \
--namespace cattle-system \
--create-namespace \
--set hostname=qianyios.top \
--set bootstrapPassword=admin \
--set global.cattle.psp.enabled=false

如果你安装的是 alpha 版本,Helm 会要求你在安装命令中添加 --devel 选项:

image-20250630160806666

如果你希望使用域名访问 Rancher,可以在宿主机上配置 hosts 文件,并将 Helm 安装命令中的 hostname 参数改为域名。

NodePort(本实验用这个)

如果你不想配置域名,也可以通过配置 Kubernetes 的 NodePortLoadBalancer 来访问 Rancher。

1
2
3
4
5
6
7
8
sudo helm install rancher rancher-stable/rancher \
--namespace cattle-system \
--create-namespace \
--set hostname=192.168.48.200 \
--set bootstrapPassword=admin \
--set global.cattle.psp.enabled=false \
--set ingress.enabled=false \
--set service.type=NodePort
1
sudo kubectl get pods,svc -n cattle-system

image-20250630165640476

Rancher的访问地址就是https://192.168.48.200:32684

LoadBalancer

  • 如果你的 Kubernetes 环境支持 LoadBalancer,可以将 service.type 设置为 LoadBalancer
1
2
3
4
5
6
7
8
sudo helm install rancher rancher-stable/rancher \
--namespace cattle-system \
--create-namespace \
--set hostname=192.168.48.200 \
--set bootstrapPassword=admin \
--set global.cattle.psp.enabled=false \
--set ingress.enabled=false \
--set service.type=LoadBalancer

等待 Rancher 运行:

1
kubectl -n cattle-system rollout status 
1
2
3
[root@server1 ~]# kubectl -n cattle-system rollout status deploy/rancher
deployment "rancher" successfully rolled out
[root@server1 ~]#

Rancher Chart 有许多选项,用于为你的具体环境自定义安装。以下是一些常见的高级方案:

如需获取完整的选项列表,请参见 Chart 选项

验证 Rancher Server 是否部署成功

1
kubectl -n cattle-system get deploy rancher
1
2
3
4
[root@server1 ~]# kubectl -n cattle-system get deploy rancher
NAME READY UP-TO-DATE AVAILABLE AGE
rancher 3/3 3 3 36m
[root@server1 ~]#

DESIREDAVAILABLE的个数应该相同。

页面访问

image-20250630170634387

image-20250630170754565

设置中文

image-20250630171010286

添加已有集群

image-20250630171252221

image-20250630171312088

image-20250630171333429

未完待续

特别声明
千屹博客旗下的所有文章,是通过本人课堂学习和课外自学所精心整理的知识巨著
难免会有出错的地方
如果细心的你发现了小失误,可以在下方评论区告诉我,或者私信我!
非常感谢大家的热烈支持!