使用 Rancher 在 Amazon EC2 中创建 Kubernetes 集群。

先决条件

注意: Rancher v2.4.6 和 v2.4.7 存在一个问题,即创建、编辑或克隆 Amazon EC2 节点模板需要kms:ListKeys权限。这一要求在 Rancher v2.4.8 中被删除。

创建 EC2 集群

创建集群的步骤因您的 Rancher 版本而异。

Rancher v2.2.0+ 版本

  1. 创建云凭证
  2. 使用云凭证和 EC2 信息创建节点模板
  3. 使用节点模板创建带节点池的集群

1. 创建云凭证

  1. 在 Rancher 用户界面中,单击右上角的用户个人资料按钮,然后单击云凭证
  2. 单击添加云凭证,进入云凭证信息页面。
  3. 输入云凭证名称。
  4. 选择云凭证类型,在云凭证类型选项中,选择Amazon
  5. 区域选项中,选择您将要创建节点的 AWS 区域。
  6. 填写您的 AWS EC2 访问密钥:Access KeySecret Key
  7. 单击创建

结果: 您已经创建了用于配置集群中节点的云凭证,您可以将这些云凭证用于其他节点模板或其他集群。

2. 使用云凭证和 EC2 信息创建节点模板

使用EC2 管理控制台中可用的信息来完成以下内容。

  1. 在 Rancher 用户界面中,单击右上角的用户个人资料按钮,然后单击节点模板
  2. 单击添加模板
  3. 区域选项中,选择您创建云凭证相同的区域。
  4. 云凭证选项中,选择您创建的云凭证。
  5. 单击下一步:认证 & 设置节点
  6. 选择您的集群的可用区和网络设置。单击 下一步: 选择安全组
  7. 选择默认的安全组或配置一个新的安全组。请根据文档 Amazon EC2 使用节点驱动时的安全组 来查看 rancher-nodes 安全组创建的规则。然后单击下一步: 设置实例选项
  8. 配置将要创建的实例。确保为选择的 AMI 配置正确的SSH 用户

如果您需要设定 IAM 实例配置名称 (不是 ARN),例如当您需要使用 Kubernetes Cloud Provider,在您的策略中需要额外的许可。请参照包含 PassRole 的 IAM 策略示例

可选:在节点模板的引擎选项部分中,您可以配置 Docker 守护程序。您可能需要指定 Docker 版本或 Docker 镜像仓库地址。

3. 使用节点模板创建带节点池的集群

将一个或多个节点池添加到您的集群。

节点池是基于节点模板的节点的集合。节点模板定义节点的配置,例如要使用的操作系统,CPU 数量和内存量。每个节点池必须分配一个或多个节点角色。

:::important 注意:

  • 每个节点角色(即 etcdControl PlaneWorker)应分配给不同的节点池。尽管可以为一个节点池分配多个节点角色,但是不应对生产集群执行此操作。
  • 推荐的设置是拥有一个具有etcd节点角色且数量为 3 的节点池,一个具有Control Plane节点角色且数量至少为 2 的节点池,以及具有Worker节点角色且数量为 1 的节点池。至少两个。关于 etcd 节点角色,请参考 etcd 管理指南

:::

  1. 集群列表界面中,单击添加集群

  2. 选择Amazon EC2

  3. 填写集群名称

  4. 为每个 Kubernetes 角色创建一个节点池。对于每个节点池,选择您创建的节点模板。

  5. 单击添加成员来添加能够访问集群的用户。

  6. 使用角色下拉菜单来为每个用户设定权限。

  7. 通过集群选项来选择 Kubernetes 版本,网络插件及是否开启网络隔离。请参照选择 Cloud Providers 来设置 Kubernetes Cloud Provider。

  8. Docker 守护进程配置选项包括:

    • 标签: 有关标签的信息,请参阅 Docker 对象标签文档
    • Docker 引擎安装 URL: 决定将在实例上安装哪个 Docker 版本。注意:如果您使用的是 RancherOS,因为配置的默认 Docker 版本可能不可用,请先确认要使用的 RancherOS 版本上可用的 Docker 版本。可以使用 sudo ros engine list 检查。如果您在其他操作系统上安装 Docker 时遇到问题,请尝试使用配置的 Docker Engine 安装 URL 手动安装 Docker 进行故障排查。
    • 镜像仓库加速器: Docker 守护进程使用的 Docker 镜像仓库加速器。
    • 其他高级选项: 请参阅 Docker 守护进程选项参考
  9. 单击创建

结果:

  • 您的集群已创建并进入为 Provisioning 的状态。Rancher 正在启动您的集群。
  • 您可以在集群的状态更新为 Active 后访问它。
  • Rancher 为活动的集群分配了两个项目,即 Default(包含命名空间 default)和 System(包含命名空间 cattle-systemingress-nginxkube-publickube-system,如果命名空间存在)。

Rancher v2.2.0+ 之前的版本

  1. 集群列表界面中,单击添加集群

  2. 选择Amazon EC2

  3. 填写集群名称

  4. 通过成员角色来设置用户访问集群的权限。

    • 单击添加成员将需要访问这个集群的用户添加到成员中。
    • 角色下拉菜单中选择每个用户的权限。
  5. 使用集群选项设置 Kubernetes 的版本,网络插件以及是否要启用项目网络隔离。要查看更多集群选项,请单击显示高级选项。请参照选择 Cloud Providers 来设置 Kubernetes Cloud Provider。

  6. 将一个或多个节点池添加到您的集群。

    节点池是基于节点模板的节点的集合。节点模板定义节点的配置,例如要使用的操作系统,CPU 数量和内存量。每个节点池必须分配一个或多个节点角色。

    :::important 注意:

    • 每个节点角色(即 etcdControl PlaneWorker)应分配给不同的节点池。尽管可以为一个节点池分配多个节点角色,但是不应对生产集群执行此操作。
    • 推荐的设置是拥有一个具有etcd节点角色且数量为 3 的节点池,一个具有Control Plane节点角色且数量至少为 2 的节点池,以及具有Worker节点角色且数量为 1 的节点池。至少两个。关于 etcd 节点角色,请参考 etcd 管理指南

    :::

  7. 单击添加节点模板

  8. 使用EC2 管理控制台中可用的信息来完成以下内容。

    • 账户许可 选项用于配置创建节点的区域及云凭证。关于如何创建访问密钥和权限,请参照先决条件
    • 区域和网络 选项用于配置您的集群可用区和网络设置。
    • 安全组 选项用于配置您的节点的安全组。请参照 Amazon EC2 使用节点驱动的安全组 来查看rancher-nodes安全组中创建了哪些规则。
    • 实例 选项用于配置将要创建的实例。确保为选择的 AMI 配置正确的SSH 用户

    如果您需要设定 IAM 实例配置名称 (不是 ARN),例如当您需要使用Kubernetes Cloud Provider,在您的策略中需要额外的许可。请参照包含 PassRole 的 IAM 策略示例

  9. Docker 守护进程配置选项包括:

    • 标签: 有关标签的信息,请参阅 Docker 对象标签文档
    • Docker 引擎安装 URL: 决定将在实例上安装哪个 Docker 版本。注意:如果您使用的是 RancherOS,因为配置的默认 Docker 版本可能不可用,请先确认要使用的 RancherOS 版本上可用的 Docker 版本。可以使用 sudo ros engine list 检查。如果您在其他操作系统上安装 Docker 时遇到问题,请尝试使用配置的 Docker Engine 安装 URL 手动安装 Docker 进行故障排查。
    • 镜像仓库加速器: Docker 守护进程使用的 Docker 镜像仓库加速器。
    • 其他高级选项: 请参阅 Docker 守护进程选项参考
  10. 单击创建

  11. 可选: 添加其他节点池。

  12. 检查您填写的信息以确保填写正确,然后单击 创建

结果:

  • 您的集群已创建并进入为 Provisioning 的状态。Rancher 正在启动您的集群。
  • 您可以在集群的状态更新为 Active 后访问它。
  • Rancher 为活动的集群分配了两个项目,即 Default(包含命名空间 default)和 System(包含命名空间 cattle-systemingress-nginxkube-publickube-system,如果命名空间存在)。

可选步骤

创建集群后,您可以通过 Rancher UI 访问它。作为最佳实践,我们建议同时设置以下访问集群的替代方法:

  • 通过 kubectl CLI 访问集群: 请按照这些步骤来通过 kubectl 访问您的集群。在这种情况下,您将通过 Rancher Server 的身份验证代理进行身份验证,然后 Rancher 会将您连接到下游集群。此方法使您无需 Rancher UI 即可管理集群。

  • 通过 kubectl CLI 和授权的集群地址访问您的集群: 请按照这些步骤来通过 kubectl 直接访问您的集群,而不需要通过 Rancher 进行认证。我们建议您设定此方法访问集群,这样在您无法连接 Rancher 时您仍然能够访问集群。

IAM 策略示例

注意: Rancher v2.4.6 和 v2.4.7 存在一个问题,即创建、编辑或克隆 Amazon EC2 节点模板需要kms:ListKeys权限。这一要求在 Rancher v2.4.8 中被删除。

  1. {
  2. "Version": "2012-10-17",
  3. "Statement": [
  4. {
  5. "Sid": "VisualEditor0",
  6. "Effect": "Allow",
  7. "Action": [
  8. "ec2:AuthorizeSecurityGroupIngress",
  9. "ec2:Describe*",
  10. "ec2:ImportKeyPair",
  11. "ec2:CreateKeyPair",
  12. "ec2:CreateSecurityGroup",
  13. "ec2:CreateTags",
  14. "ec2:DeleteKeyPair"
  15. ],
  16. "Resource": "*"
  17. },
  18. {
  19. "Sid": "VisualEditor1",
  20. "Effect": "Allow",
  21. "Action": ["ec2:RunInstances"],
  22. "Resource": [
  23. "arn:aws:ec2:REGION::image/ami-*",
  24. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*",
  25. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:placement-group/*",
  26. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:volume/*",
  27. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:subnet/*",
  28. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:key-pair/*",
  29. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:network-interface/*",
  30. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:security-group/*"
  31. ]
  32. },
  33. {
  34. "Sid": "VisualEditor2",
  35. "Effect": "Allow",
  36. "Action": [
  37. "ec2:RebootInstances",
  38. "ec2:TerminateInstances",
  39. "ec2:StartInstances",
  40. "ec2:StopInstances"
  41. ],
  42. "Resource": "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*"
  43. }
  44. ]
  45. }

包含 PassRole 的 IAM 策略示例

  1. {
  2. "Version": "2012-10-17",
  3. "Statement": [
  4. {
  5. "Sid": "VisualEditor0",
  6. "Effect": "Allow",
  7. "Action": [
  8. "ec2:AuthorizeSecurityGroupIngress",
  9. "ec2:Describe*",
  10. "ec2:ImportKeyPair",
  11. "ec2:CreateKeyPair",
  12. "ec2:CreateSecurityGroup",
  13. "ec2:CreateTags",
  14. "ec2:DeleteKeyPair"
  15. ],
  16. "Resource": "*"
  17. },
  18. {
  19. "Sid": "VisualEditor1",
  20. "Effect": "Allow",
  21. "Action": ["iam:PassRole", "ec2:RunInstances"],
  22. "Resource": [
  23. "arn:aws:ec2:REGION::image/ami-*",
  24. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*",
  25. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:placement-group/*",
  26. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:volume/*",
  27. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:subnet/*",
  28. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:key-pair/*",
  29. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:network-interface/*",
  30. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:security-group/*",
  31. "arn:aws:iam::AWS_ACCOUNT_ID:role/YOUR_ROLE_NAME"
  32. ]
  33. },
  34. {
  35. "Sid": "VisualEditor2",
  36. "Effect": "Allow",
  37. "Action": [
  38. "ec2:RebootInstances",
  39. "ec2:TerminateInstances",
  40. "ec2:StartInstances",
  41. "ec2:StopInstances"
  42. ],
  43. "Resource": "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*"
  44. }
  45. ]
  46. }

允许加密 EBS 卷的 IAM 策略示例

  1. {
  2. "Version": "2012-10-17",
  3. "Statement": [
  4. {
  5. "Effect": "Allow",
  6. "Action": [
  7. "kms:Decrypt",
  8. "kms:GenerateDataKeyWithoutPlaintext",
  9. "kms:Encrypt",
  10. "kms:DescribeKey",
  11. "kms:CreateGrant",
  12. "ec2:DetachVolume",
  13. "ec2:AttachVolume",
  14. "ec2:DeleteSnapshot",
  15. "ec2:DeleteTags",
  16. "ec2:CreateTags",
  17. "ec2:CreateVolume",
  18. "ec2:DeleteVolume",
  19. "ec2:CreateSnapshot"
  20. ],
  21. "Resource": [
  22. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:volume/*",
  23. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*",
  24. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:snapshot/*",
  25. "arn:aws:kms:REGION:AWS_ACCOUNT_ID:key/KMS_KEY_ID"
  26. ]
  27. },
  28. {
  29. "Effect": "Allow",
  30. "Action": [
  31. "ec2:DescribeInstances",
  32. "ec2:DescribeTags",
  33. "ec2:DescribeVolumes",
  34. "ec2:DescribeSnapshots"
  35. ],
  36. "Resource": "*"
  37. }
  38. ]
  39. }