创建 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. 创建云凭证

  1. 点击 ☰ > 集群管理

  2. 单击云凭证

  3. 单击创建

  4. 单击 Amazon

  5. 输入云凭证的名称。

  6. 默认区域字段中,选择集群节点所在的 AWS 区域。

  7. 输入 AWS EC2 Access KeySecret Key

  8. 单击创建

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

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

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

  1. 点击 ☰ > 集群管理

  2. 单击 menu:RKE1 配置[节点模板]。

  3. 单击添加模板

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

  5. 单击创建

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

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

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

  1. 点击 ☰ > 集群管理

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

  3. 单击 Amazon EC2

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

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

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

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

  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 策略示例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:Describe*",
                "ec2:ImportKeyPair",
                "ec2:CreateKeyPair",
                "ec2:CreateSecurityGroup",
                "ec2:CreateTags",
                "ec2:DeleteKeyPair",
                "ec2:ModifyInstanceMetadataOptions"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:REGION::image/ami-*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:placement-group/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:volume/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:subnet/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:key-pair/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:network-interface/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:security-group/*"
            ]
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": [
                "ec2:RebootInstances",
                "ec2:TerminateInstances",
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*"
        }
    ]
}

带有 PassRole 的 IAM 策略示例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:Describe*",
                "ec2:ImportKeyPair",
                "ec2:CreateKeyPair",
                "ec2:CreateSecurityGroup",
                "ec2:CreateTags",
                "ec2:DeleteKeyPair",
                "ec2:ModifyInstanceMetadataOptions"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:REGION::image/ami-*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:placement-group/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:volume/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:subnet/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:key-pair/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:network-interface/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:security-group/*",
                "arn:aws:iam::AWS_ACCOUNT_ID:role/YOUR_ROLE_NAME"
            ]
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": [
                "ec2:RebootInstances",
                "ec2:TerminateInstances",
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*"
        }
    ]
}

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

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:Encrypt",
        "kms:DescribeKey",
        "kms:CreateGrant",
        "ec2:DetachVolume",
        "ec2:AttachVolume",
        "ec2:DeleteSnapshot",
        "ec2:DeleteTags",
        "ec2:CreateTags",
        "ec2:CreateVolume",
        "ec2:DeleteVolume",
        "ec2:CreateSnapshot"
      ],
      "Resource": [
        "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:volume/*",
        "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*",
        "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:snapshot/*",
        "arn:aws:kms:REGION:AWS_ACCOUNT_ID:key/KMS_KEY_ID"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeInstances",
        "ec2:DescribeTags",
        "ec2:DescribeVolumes",
        "ec2:DescribeSnapshots"
      ],
      "Resource": "*"
    }
  ]
}