在 GKE 集群上安装 SUSE® Rancher Prime
在本节中,你将学习如何使用 GKE 安装 Rancher。
如果你已经有一个 GKE Kubernetes 集群,请直接跳转到安装 Ingress这个步骤。然后按照此处的步骤安装 Rancher Helm Chart。
先决条件
-
你需要有一个 Google 账号。
-
你需要有一个 Google Cloud Billing 账号。你可使用 Google Cloud Console 来管理你的 Cloud Billing 账号。有关 Cloud Console 的详情,请参见 Console 通用指南。
-
你需要至少一个在用的 IP 地址和至少 2 个 CPU 的云配额。有关 Rancher Server 的硬件要求,请参见本节。
1. 启用 Kubernetes Engine API
按照以下步骤启用 Kubernetes Engine API:
-
访问 Google Cloud Console 中的 Kubernetes Engine 页面。
-
创建或选择一个项目。
-
打开项目,并为项目启用 Kubernetes Engine API。等待 API 和相关服务的启用。这可能需要几分钟时间。
-
确保为你的云项目启用了计费。有关如何为你的项目启用计费,请参见 Google Cloud 文档中心。
2. 打开 Cloud Shell
Cloud Shell 是一个 shell 环境,用于管理托管在 Google Cloud 上的资源。Cloud Shell 预装了 gcloud
命令行工具和 kubectl 命令行工具中。gcloud
工具为 Google Cloud 提供主要的命令行界面,而kubectl
则提供针对 Kubernetes 集群的主要命令行界面。
下文描述了如何从 Google Cloud Console 或从本地工作站启动 Cloud Shell。
Cloud Shell
如需从 Google Cloud Console 启动 shell,请在控制台的右上角点击终端按钮。鼠标悬停在按钮上时,它会标记为 Activate Cloud Shell。
本地 Shell
执行以下步骤以安装 gcloud
和 kubectl
:
-
按照这些步骤安装 Cloud SDK。The Cloud SDK 包括
gcloud
命令行工具。不同操作系统对应的步骤有所不同。 -
安装 Cloud SDK 后,运行以下命令以安装
kubectl
命令行工具:gcloud components install kubectl
后面的步骤会配置
kubectl
,使其用于使用新的 GKE 集群。 -
如果 Helm 3 未安装的话,https://helm.sh/docs/intro/install/[安装 Helm 3]。
-
使用
HELM_EXPERIMENTAL_OCI
变量来启用 Helm 的实验功能 OCI 镜像支持。把以下行添加到~/.bashrc
(或 macOS 中的~/.bash_profile
,或者你的 shell 存储环境变量的地方):export HELM_EXPERIMENTAL_OCI=1
-
运行以下命令来加载你更新的
.bashrc
文件:source ~/.bashrc
如果你运行的是 macOS,使用这个命令:
source ~/.bash_profile
3. 配置 gcloud CLI
选择以下方法之一配置默认的 gcloud 设置:
-
如果你想了解默认值,请使用 gcloud init。
-
如需单独设置你的项目 ID、地区和区域,使用 gcloud config。
-
使用 gcloud init
-
使用 gcloud config
-
运行 gcloud init 并按照指示操作:
gcloud init
如果你在远程服务器上使用 SSH,使用 --console-only 标志,以防止该命令启动浏览器。
gcloud init --console-only
-
按照指示,以授权 gcloud 使用你的 Google Cloud 账户,并选择你创建的新项目。
4. 确认 gcloud 的配置是否正确
运行:
gcloud config list
返回的结果应与以下内容类似:
[compute] region = us-west1 # Your chosen region zone = us-west1-b # Your chosen zone [core] account = <Your email> disable_usage_reporting = True project = <Your project ID> Your active configuration is: [default]
5. 创建一个 GKE 集群
下面的命令创建了一个三节点的集群。
把 cluster-name
替换为你新集群的名称。
在选择 Kubernetes 版本时,请务必先查阅支持矩阵,以找出已针对你的 Rancher 版本验证的最新 Kubernetes 版本。
要使用 Rancher 成功创建 GKE 集群,GKE 必须处于 Standard 模式。GKE 在创建 Kubernetes 集群时有两种运行模式,分别是 Autopilot 和 Standard 模式。Autopilot 模式的集群配置对编辑 kube-system 命名空间有限制。但是,Rancher 在安装时需要在 kube-system 命名空间中创建资源。因此,你将无法在以 Autopilot 模式创建的 GKE 集群上安装 Rancher。如需详细了解 GKE Autopilot 模式和 Standard 模式之间的差异,请访问比较 GKE Autopilot 和 Standard。
注意:如果你要从旧的 Kubernetes 版本更新到 Kubernetes v1.22 或更高版本,你还需要更新 ingress-nginx。
gcloud container clusters create cluster-name --num-nodes=3 --cluster-version=<VERSION>
6. 获取验证凭证
创建集群后,你需要获得认证凭证才能与集群交互:
gcloud container clusters get-credentials cluster-name
此命令将 kubectl
配置成使用你创建的集群。
7. 安装 Ingress
集群需要一个 Ingress,以从集群外部访问 Rancher。
以下命令安装带有 LoadBalancer 服务的 nginx-ingress-controller
:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update helm upgrade --install \ ingress-nginx ingress-nginx/ingress-nginx \ --namespace ingress-nginx \ --set controller.service.type=LoadBalancer \ --version 4.0.18 \ --create-namespace
8. 获取负载均衡器的 IP
运行以下命令获取负载均衡器的 IP 地址:
kubectl get service ingress-nginx-controller --namespace=ingress-nginx
返回的结果应与以下内容类似:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ingress-nginx-controller LoadBalancer 10.3.244.156 35.233.206.34 80:31876/TCP,443:32497/TCP 81s
保存 EXTERNAL-IP
。
9. 设置 DNS
到 Rancher Server 的外部流量需要重定向到你创建的负载均衡器。
创建指向你保存的外部 IP 地址的 DNS。这个 DNS 会用作 Rancher Server 的 URL。
设置 DNS 的有效方法有很多。如需获取帮助,请参见 Google Cloud 文档中的管理 DNS 记录部分。
10. 安装 Rancher Helm Chart
按照本页的说明安装 Rancher Helm Chart。任何 Kubernetes 发行版上安装的 Rancher 的 Helm 说明都是一样的。
安装 Rancher 时,使用上一步获取的 DNS 名称作为 Rancher Server 的 URL。它可以作为 Helm 选项传递进来。例如,如果 DNS 名称是 rancher.my.org
,你需要使用 --set hostname=rancher.my.org
选项来运行 Helm 安装命令。
在此设置之上安装 Rancher 时,你还需要设置与 Rancher 的 Ingress 资源一起使用的 Ingress Controller 的名称:
--set ingress.ingressClassName=nginx
请参阅Helm 安装命令了解你的证书选项。
在 Rancher v2.7.5 中,如果你打算在集群上使用默认的 GKE Ingress 而不启用 VPC 原生的集群模式,则需要设置以下标志:
--set service.type=NodePort
此设置是必要的,这考虑了与 ClusterIP(cattle-system/rancher
的默认类型)之间的兼容性问题。