创建 Amazon EC2 集群

在本节中,你将学习如何使用 Rancher 在 Amazon EC2 中安装 RKE Kubernetes 集群。

首先,在 Rancher 中设置你的 EC2 云凭证。然后,使用云凭证创建一个节点模板,Rancher 将使用该模板在 EC2 中配置新节点。

然后,在 Rancher 中创建一个 EC2 集群,并在配置新集群时为集群定义节点池。每个节点池都有一个 etcd、controlplane 或 worker 的 Kubernetes 角色。Rancher 会在新节点上安装 RKE Kubernetes,并为每个节点设置节点池定义的 Kubernetes 角色。

先决条件

创建 EC2 集群

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

  • RKE
  • RKE2
  1. 创建云凭证
  2. 使用云凭证和 EC2 的信息来创建节点模板
  3. 使用节点模板创建具有节点池的集群

1. 创建云凭证

  1. 点击 ☰ > 集群管理
  2. 单击云凭证
  3. 单击创建
  4. 单击 Amazon
  5. 输入云凭证的名称。
  6. 默认区域字段中,选择集群节点所在的 AWS 区域。
  7. 输入 AWS EC2 Access KeySecret Key
  8. 单击创建

结果:已创建用于在集群中配置节点的云凭证。你可以在其他节点模板或集群中复用这些凭证。

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

为 EC2 创建节点模板会允许 Rancher 在 EC2 中配置新节点。其他集群可以复用节点模板。

  1. 点击 ☰ > 集群管理

  2. 单击 RKE1 配置 > 节点模板

  3. 单击添加模板

  4. 填写 EC2 的节点模板。有关填写表单的帮助,请参阅 EC2 节点模板配置

  5. 单击创建

    创建 Amazon EC2 集群 - 图1备注

    如果要使用双栈功能,请关注其他额外的要求

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

将一个或多个节点池添加到你的集群。有关节点池的更多信息,请参阅本节

  1. 点击 ☰ > 集群管理

  2. 集群页面上,单击创建

  3. 单击 Amazon EC2

  4. 为每个 Kubernetes 角色创建一个节点池。为每个节点池选择你已创建的节点模板。有关节点池的更多信息,包括为节点分配 Kubernetes 角色的最佳实践,请参阅本节

  5. 点击添加成员添加可以访问集群的用户。使用角色下拉菜单为每个用户设置权限。

  6. 使用集群选项选择要安装的 Kubernetes 版本、要使用的网络提供商,以及是否启用项目网络隔离。参见选择云提供商来配置 Kubernetes 云提供商。如需获取配置集群的帮助,请参阅 RKE 集群配置参考

    创建 Amazon EC2 集群 - 图2备注

    如果要使用双栈功能,请关注其他额外的要求

  7. 单击创建

1. 创建云凭证

如果你已经有一组可用的云凭证,请跳过此部分。

  1. 点击 ☰ > 集群管理
  2. 单击云凭证
  3. 单击创建
  4. 单击 Amazon
  5. 输入云凭证的名称。
  6. 默认区域字段中,选择集群节点所在的 AWS 区域。
  7. 输入 AWS EC2 Access KeySecret Key
  8. 单击创建

结果:已创建用于在集群中配置节点的云凭证。你可以在其他节点模板或集群中复用这些凭证。

2. 创建你的集群

  1. 点击 ☰ > 集群管理
  2. 集群页面上,单击创建
  3. 将开关切换到 RKE2/K3s
  4. 单击 Amazon EC2
  5. 选择一个云凭证。如果存在多个则需要选择。否则,它是预选的。
  6. 输入集群名称
  7. 为每个 Kubernetes 角色创建一个主机池。请参阅最佳实践了解角色分配和计数的建议。
    1. 为每个主机池定义主机配置。有关配置选项的信息,请参阅 EC2 主机配置参考
  8. 使用集群配置,选择要安装的 Kubernetes 版本、要使用的网络提供商,以及是否启用项目网络隔离。有关配置集群的帮助,请参阅 RKE2 集群配置参考
  9. 使用成员角色为集群配置用户授权。点击添加成员添加可以访问集群的用户。使用角色下拉菜单为每个用户设置权限。
  10. 单击创建

结果

你已创建集群,集群的状态是配置中。Rancher 已在你的集群中。

当集群状态变为 Active 后,你可访问集群。

Active 状态的集群会分配到两个项目:

  • Default:包含 default 命名空间
  • System:包含 cattle-systemingress-nginxkube-publickube-system 命名空间。

可选的后续步骤

创建集群后,你可以通过 Rancher UI 访问集群。最佳实践建议你设置以下访问集群的备用方式:

  • 通过 kubectl CLI 访问你的集群:按照这些步骤在你的工作站上使用 kubectl 访问集群。在这种情况下,你将通过 Rancher Server 的身份验证代理进行身份验证,然后 Rancher 会让你连接到下游集群。此方法允许你在没有 Rancher UI 的情况下管理集群。
  • 通过 kubectl CLI 使用授权的集群端点访问你的集群:按照这些步骤直接使用 kubectl 访问集群,而无需通过 Rancher 进行身份验证。我们建议设置此替代方法来访问集群,以便在无法连接到 Rancher 时访问集群。

IAM 策略

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. "ec2:ModifyInstanceMetadataOptions"
  16. ],
  17. "Resource": "*"
  18. },
  19. {
  20. "Sid": "VisualEditor1",
  21. "Effect": "Allow",
  22. "Action": [
  23. "ec2:RunInstances"
  24. ],
  25. "Resource": [
  26. "arn:aws:ec2:REGION::image/ami-*",
  27. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*",
  28. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:placement-group/*",
  29. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:volume/*",
  30. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:subnet/*",
  31. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:key-pair/*",
  32. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:network-interface/*",
  33. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:security-group/*"
  34. ]
  35. },
  36. {
  37. "Sid": "VisualEditor2",
  38. "Effect": "Allow",
  39. "Action": [
  40. "ec2:RebootInstances",
  41. "ec2:TerminateInstances",
  42. "ec2:StartInstances",
  43. "ec2:StopInstances"
  44. ],
  45. "Resource": "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*"
  46. }
  47. ]
  48. }

带有 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. "ec2:ModifyInstanceMetadataOptions"
  16. ],
  17. "Resource": "*"
  18. },
  19. {
  20. "Sid": "VisualEditor1",
  21. "Effect": "Allow",
  22. "Action": [
  23. "iam:PassRole",
  24. "ec2:RunInstances"
  25. ],
  26. "Resource": [
  27. "arn:aws:ec2:REGION::image/ami-*",
  28. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*",
  29. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:placement-group/*",
  30. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:volume/*",
  31. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:subnet/*",
  32. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:key-pair/*",
  33. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:network-interface/*",
  34. "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:security-group/*",
  35. "arn:aws:iam::AWS_ACCOUNT_ID:role/YOUR_ROLE_NAME"
  36. ]
  37. },
  38. {
  39. "Sid": "VisualEditor2",
  40. "Effect": "Allow",
  41. "Action": [
  42. "ec2:RebootInstances",
  43. "ec2:TerminateInstances",
  44. "ec2:StartInstances",
  45. "ec2:StopInstances"
  46. ],
  47. "Resource": "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*"
  48. }
  49. ]
  50. }

允许加密 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. }