在 Amazon EKS 上安装 Rancher

本文介绍了在 EKS 上安装 Rancher 的两种方法。

第一种方法是使用 CloudFormation 在 EKS 集群上部署 Rancher Server。该方法的指南是与 Amazon Web Services 合作创建的,旨在展示如何按照最佳实践部署 Rancher。

第二种方法是使用命令行工具安装带有 Ingress 的 EKS 集群。如果你想在 EKS 上使用 Rancher 时使用较少的资源,请使用此方法。

如果你已经有一个 EKS Kubernetes 集群,请直接跳转到安装 Ingress这个步骤。然后按照此处的步骤安装 Rancher Helm Chart。

使用 AWS 最佳实践的快速入门

Rancher 和 Amazon Web Services 合作编写了一份快速入门指南,用于按照 AWS 的最佳实践,在 EKS 集群上部署 Rancher。详情请参见部署指南

快速入门指南提供了在 EKS 上部署 Rancher 的三个选项:

  • 将 Rancher 部署到新的 VPC 和新的 Amazon EKS 集群中:该选项构建了一个由 VPC、子网、NAT 网关、安全组、堡垒主机、Amazon EKS 集群和其他基础设施组件组成的全新 AWS 环境。然后将 Rancher 部署到这个新的 EKS 集群中。
  • 将 Rancher 部署到现有 VPC 和新的 Amazon EKS 集群中:此选项在现有 AWS 基础架构中配置 Rancher。
  • 将 Rancher 部署到现有的 VPC 和现有的 Amazon EKS 集群中。此选项在现有 AWS 基础架构中配置 Rancher。

使用默认参数为新的 Virtual Private Cloud(VPC)和新的 Amazon EKS 集群按照此快速入门部署,会在 AWS Cloud 中构建以下 Rancher 环境:

  • 跨越三个可用区的高可用架构。*
  • 根据 AWS 最佳实践,配置有公共和私有子网的 VPC,为你提供 AWS 上你自己的虚拟网络。*
  • 在公共子网中:
    • 管理网络地址转换(NAT)网关,以允许资源的出站互联网访问。*
    • 自动扩缩组中的 Linux 堡垒主机,允许对公共和私有子网中的 Amazon Elastic Compute Cloud (Amazon EC2) 实例进行入站安全 Shell (SSH) 访问。*
  • 私有子网中:
    • 自动扩缩组中的 Kubernetes 节点。*
    • 网络负载均衡器(未显示),用于访问 Rancher 控制台。
  • 使用 AWS Systems Manager 自动化进行 Rancher 部署。
  • 用于 EKS 集群的 Amazon EKS 服务,它提供了 Kubernetes controlplane。*
  • 用于访问 Rancher 部署的 Amazon Route 53 DNS 记录。

* 将快速启动部署到现有 Amazon EKS 集群中的 CloudForm 模板会跳过标有星号(*)的组件,并提示你查看现有 VPC 配置。

为 Rancher Server 创建 EKS 集群

在本节中,你将使用命令行工具安装一个带有 Ingress 的 EKS 集群。如果你想在 EKS 上使用 Rancher 时使用较少的资源,请使用此方法。

在 Amazon EKS 上安装 Rancher - 图1先决条件:

  • 已有一个 AWS 账户。
  • 建议使用 IAM 用户而不是 AWS 根账户。你将需要 IAM 用户的访问密钥 (access key) 和密文秘钥 (secret key) 来配置 AWS 命令行界面。
  • IAM 用户需要具备eksctl 文档中描述的最低 IAM 策略。

1. 准备你的工作站

在工作站上安装以下命令行工具:

2. 配置 AWS CLI

运行以下命令,配置 AWS CLI:

  1. aws configure

输入以下参数:

描述
AWS Access Key ID具有 EKS 权限的 IAM 用户的访问密钥凭证。
AWS Secret Access Key具有 EKS 权限的 IAM 用户的密文密钥凭证。
Default region name集群节点所在的 AWS 区域
Default output format输入 json

3. 创建 EKS 集群

运行以下命令创建一个 EKS 集群。使用适用于你的用例的 AWS 区域。在选择 Kubernetes 版本时,请务必先查阅支持矩阵,以找出已针对你的 Rancher 版本验证的最新 Kubernetes 版本。

注意:如果 Kubernetes 的版本更新到 v1.22 或更高版本,则 ingress-nginx 的版本也需要更新

  1. eksctl create cluster \
  2. --name rancher-server \
  3. --version <VERSION> \
  4. --region us-west-2 \
  5. --nodegroup-name ranchernodes \
  6. --nodes 3 \
  7. --nodes-min 1 \
  8. --nodes-max 4 \
  9. --managed

使用 CloudFormation 进行的集群部署可能需要一些时间才能完成。

4. 测试集群

运行以下命令测试集群:

  1. eksctl get cluster

返回的结果应与以下内容类似:

  1. eksctl get cluster
  2. 2021-03-18 15:09:35 [ℹ] eksctl version 0.40.0
  3. 2021-03-18 15:09:35 [ℹ] using region us-west-2
  4. NAME REGION EKSCTL CREATED
  5. rancher-server-cluster us-west-2 True

5. 安装 Ingress

集群需要一个 Ingress,以从集群外部访问 Rancher。

以下命令安装了一个 nginx-ingress-controller和一个 LoadBalancer 服务。因此,NGINX 前面会有一个 ELB(Elastic Load Balancer):

  1. helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
  2. helm repo update
  3. helm upgrade --install \
  4. ingress-nginx ingress-nginx/ingress-nginx \
  5. --namespace ingress-nginx \
  6. --set controller.service.type=LoadBalancer \
  7. --version 4.0.18 \
  8. --create-namespace

6. 获取负载均衡器的 IP

运行以下命令获取负载均衡器的 IP 地址:

  1. kubectl get service ingress-nginx-controller --namespace=ingress-nginx

返回的结果应与以下内容类似:

  1. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
  2. AGE
  3. ingress-nginx-controller LoadBalancer 10.100.90.18 a904a952c73bf4f668a17c46ac7c56ab-962521486.us-west-2.elb.amazonaws.com 80:31229/TCP,443:31050/TCP
  4. 27m

保存 EXTERNAL-IP

7. 设置 DNS

到 Rancher Server 的外部流量需要重定向到你创建的负载均衡器。

创建指向你保存的外部 IP 地址的 DNS。这个 DNS 会用作 Rancher Server 的 URL。

设置 DNS 的有效方法有很多。如需获得帮助,请参见 AWS 文档中心的转发流量到 ELB 负载均衡器

8. 安装 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 安装命令。

v2.6.7 新功能

在此设置之上安装 Rancher 时,你还需要将以下值传递到 Rancher Helm 安装命令,以设置与 Rancher 的 Ingress 资源一起使用的 Ingress Controller 的名称:

  1. --set ingress.ingressClassName=nginx

请参阅Helm 安装命令了解你的证书选项。