Amazon EC2

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

先决条件

创建 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 数量和内存量。每个节点池必须分配一个或多个节点角色。

注意:
  • 每个节点角色(即 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 数量和内存量。每个节点池必须分配一个或多个节点角色。

    注意:
    • 每个节点角色(即 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 策略示例

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ec2:AuthorizeSecurityGroupIngress",
"ec2:Describe*",
"ec2:ImportKeyPair",
"ec2:CreateKeyPair",
"ec2:CreateSecurityGroup",
"ec2:CreateTags",
"ec2:DeleteKeyPair"
],
"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"
],
"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": "*"
}
]
}
最后由 yzeng25更新 于