使用 Helm CLI 在 Kubernetes 集群上部署 Rancher(在线安装)
先决条件
Kubernetes 集群
设置 Rancher Server 的本地 Kubernetes 集群。Rancher 可以安装在任何 Kubernetes 集群上。这个集群可以使用上游 Kubernetes,也可以使用 Rancher 的 Kubernetes 发行版之一,也可以是来自 Amazon EKS 等提供商的托管 Kubernetes 集群。
CLI 工具
设置 Kubernetes 集群需要以下 CLI 工具。请确保这些工具已安装并在你的 $PATH。
- kubectl - Kubernetes 命令行工具。
- helm - Kubernetes 的软件包管理工具。请参阅 Helm 版本要求( https://docs.rancher.cn/docs/rancher2.5/installation/resources/helm-version/_index )以选择要安装 Rancher 的 Helm 版本。
提示:国内用户,可以导航到 http://mirror.cnrancher.com 下载所需资源。
Ingress Controller
适用于托管在云厂商上的集群。RKE集群默认安装 Nginx Ingress Controller。
Helm Chart 安装 Rancher
1. 添加 Helm Chart 仓库
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
提示:国内用户,可以使用放在国内的 Rancher Chart 加速安装:
helm repo add rancher-stable http://rancher-mirror.oss-cn-beijing.aliyuncs.com/server-charts/stable
2. 为 Rancher 创建 Namespace
kubectl create namespace cattle-system
3. 选择你的 SSL 选项
Rancher 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 颁发的证书或自签名 CA 证书。 Rancher 将使用该证书来保护 WebSocket 和 HTTPS 流量。在这种情况下,你必须上传名称分别为tls.crt和tls.key的 PEM 格式的证书以及相关的密钥。如果使用私有 CA,则还必须上传该 CA 证书。这是由于你的节点可能不信任此私有 CA。 Rancher 将获取该 CA 证书,并从中生成一个校验和,各种 Rancher 组件将使用该校验和来验证其与 Rancher 的连接。
重要:Rancher 中国技术支持团队建议你使用“你已有的证书” ingress.tls.source=secret 这种方式,从而减少对 cert-manager 的运维成本。
4. 安装 cert-manager
提示: 如果你使用自己的证书文件 ingress.tls.source=secret或者使用外部 TLS 负载均衡器可以跳过此步骤。
# 如果你手动安装了CRD,而不是在Helm安装命令中添加了`--set installCRDs=true`选项,你应该在升级Helm chart之前升级CRD资源。
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.1/cert-manager.crds.yaml
# 添加 Jetstack Helm 仓库
helm repo add jetstack https://charts.jetstack.io
# 更新本地 Helm chart 仓库缓存
helm repo update
# 安装 cert-manager Helm chart
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.5.1
安装完 cert-manager 后,你可以通过检查 cert-manager 命名空间中正在运行的 Pod 来验证它是否已正确部署:
kubectl get pods --namespace cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-5c6866597-zw7kh 1/1 Running 0 2m
cert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 2m
cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m
5. 根据你选择的 SSL 选项,通过 Helm 安装 Rancher
Rancher 生成的证书
默认为 Rancher 生成自签名 CA,用于 cert-manager 颁发访问 Rancher Server 接口的证书。
因为 rancher 是 ingress.tls.source 的默认选项,所以在运行 helm install 命令时我们没有指定 ingress.tls.source。
- 将 hostname 设置为解析到你的负载均衡器的 DNS 记录。Rancher HA 安装成功后,你需要通过这个域名来访问 Rancher Server。
- 将 replicas 设置为 Rancher 部署所使用的副本数量。默认为 3;如果集群中的节点少于 3 个,你应该相应地减少副本数量。
- 要安装一个特定的 Rancher 版本,使用 --version 标志,例如:--version 2.3.6。
helm install rancher rancher-stable/rancher \
--namespace cattle-system \
--set hostname=kmp.my.org \
--set replicas=3
等待 Rancher 运行:
kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
deployment "rancher" successfully rolled out
Rancher Chart 有许多自定义选项来自定义你的安装环境。以下是一些常见的高级方案:
- HTTP 代理
Rancher 需要 Internet 访问才能使用某些功能 (helm charts)。使用 proxy 设置你的代理服务器。
在 noProxy 列表中添加例外的 IP。确保添加了 Pod 集群 IP 范围(默认:10.42.0.0/16),Service 集群 IP 范围(默认:10.43.0.0/16),内部集群域(默认:.svc, .cluster.local)和任何 worker 集群 controlplane 节点。Rancher 在这个列表中支持 CIDR 符号范围。
--set proxy="http://<username>:<password>@<proxy_url>:<proxy_port>/"
--set noProxy="127.0.0.0/8\,10.0.0.0/8\,172.16.0.0/12\,192.168.0.0/16\,.svc\,.cluster.local"
- 私有镜像仓库
有关使用私有 registry 安装 Rancher 的详细信息,请参阅离线环境安装指南( https://docs.rancher.cn/docs/rancher2.5/installation/other-installation-methods/air-gap/_index )。
- 外部负载均衡器上的 TLS 终止
我们建议将负载均衡器配置为 4 层均衡器,将普通 80/tcp 和 443/tcp 转发到 Rancher 管理集群节点。集群上的 Ingress Controller 会将端口 80 上的 http 通信重定向到端口 443 上的 https。
您可以在 Rancher 集群(ingress)外部的 L7 负载均衡器上终止 SSL/TLS。使用 --set tls=external 选项,将负载均衡器指向所有 Rancher 集群节点上的端口 http 80。这将在 http 端口 80 上公开 Rancher 接口。请注意,允许直接连接到 Rancher 集群的客户端将不会被加密。如果您选择这样做,我们建议您将网络级别上的直接访问限制为仅用于您的负载均衡器。
注意事项: 如果您使用的是专用 CA 签名的证书,请添加 --set privateCA=true 并参阅添加 TLS 密文 - 使用私有的 CA 签名证书来完成给 Rancher 添加 CA 证书。
您的负载均衡器必须支持长期存在的 Websocket 连接,并且需要插入代理标头,以便 Rancher 可以正确路由链接。
有关选项的完整列表,请参见Chart 选项( https://docs.rancher.cn/docs/rancher2.5/installation/install-rancher-on-k8s/chart-options/_index )。
6. 验证 Rancher Server 是否已成功部署
添加 secret 后,检查 Rancher Server 是否运行成功:
kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
deployment "rancher" successfully rolled out
如果看到以下错误: error: deployment "rancher" exceeded its progress deadline, 你可以通过运行以下命令来检查 deployment 的状态:
kubectl -n cattle-system get deploy rancher
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
rancher 3 3 3 3 3m
DESIRED和AVAILABLE应该显示相同的个数。
7. 保存你的选项
请保存你使用的全部 --set 选项。使用 Helm 升级 Rancher 到新版本时,你将需要使用相同的选项。
8. 安装完成
现在你应该具有一个功能正常的 Rancher Server 了。
打开浏览器,通过 Helm 指定的 hostname 设置的域名来访问你的 Rancher Server。如果你的环境没有设置公共 DNS 解析,你可以在 hosts 文件中手动映射域名和 IP 的解析记录。接下来,你应该会看到一个色彩丰富的登录页面。
如果你的环境中有负载均衡器将流量转发到 Rancher Server,则可以将域名解析为负载均衡器的 IP 地址。如果你的环境中没有负载均衡器,这可以将域名解析为某个 Rancher Server Pod 宿主机的 IP 地址。
如果在安装过程中碰到了问题,请查看故障排查( https://docs.rancher.cn/docs/rancher2.5/installation/resources/troubleshooting/_index )页面。