创建 Amazon EC2 集群
在本节中,你将学习如何使用 Rancher 在 Amazon EC2 中安装 RKE Kubernetes 集群。
首先,在 Rancher 中设置你的 EC2 云凭证。然后,使用云凭证创建一个节点模板,Rancher 将使用该模板在 EC2 中配置新节点。
然后,在 Rancher 中创建一个 EC2 集群,并在配置新集群时为集群定义节点池。每个节点池都有一个 etcd、controlplane 或 worker 的 Kubernetes 角色。Rancher 会在新节点上安装 RKE Kubernetes,并为每个节点设置节点池定义的 Kubernetes 角色。
先决条件
-
AWS EC2 访问密钥和密文密钥,用于创建实例。请参阅 Amazon 文档:创建访问密钥来创建访问密钥和密文密钥。
-
已创建 IAM 策略,用于为用户添加的访问密钥和密文密钥。请参阅 Amazon 文档:创建 IAM 策略(控制台)来创建 IAM 策略。参阅下面的三个示例 JSON 策略:
-
带有 PassRole 的 IAM 策略示例(如果要使用 Kubernetes 云提供商,或将 IAM 配置文件传递给实例,则需要)
-
为用户添加 IAM 策略权限。请参阅 Amazon 文档:为用户添加权限(控制台),来将权限添加给用户。
创建 EC2 集群
创建集群的步骤因 Rancher 版本而异。
-
RKE
-
RKE2
1. 创建云凭证
-
点击 ☰ > 集群管理。
-
单击云凭证。
-
单击创建。
-
单击 Amazon。
-
输入云凭证的名称。
-
在默认区域字段中,选择集群节点所在的 AWS 区域。
-
输入 AWS EC2 Access Key 和 Secret Key。
-
单击创建。
结果:已创建用于在集群中配置节点的云凭证。你可以在其他节点模板或集群中复用这些凭证。
2. 使用云凭证和 EC2 的信息来创建节点模板
为 EC2 创建节点模板会允许 Rancher 在 EC2 中配置新节点。其他集群可以复用节点模板。
-
点击 ☰ > 集群管理。
-
单击 menu:RKE1 配置[节点模板]。
-
单击添加模板。
-
填写 EC2 的节点模板。有关填写表单的帮助,请参阅 EC2 节点模板配置。
-
单击创建。
3. 使用节点模板创建具有节点池的集群
将一个或多个节点池添加到你的集群。有关节点池的更多信息,请参阅本节。
-
点击 ☰ > 集群管理。
-
在集群页面上,单击创建。
-
单击 Amazon EC2。
-
为每个 Kubernetes 角色创建一个节点池。为每个节点池选择你已创建的节点模板。有关节点池的更多信息,包括为节点分配 Kubernetes 角色的最佳实践,请参阅本节。
-
点击添加成员添加可以访问集群的用户。使用角色下拉菜单为每个用户设置权限。
-
使用集群选项选择要安装的 Kubernetes 版本、要使用的网络提供商,以及是否启用项目网络隔离。参见选择云提供商来配置 Kubernetes 云提供商。如需获取配置集群的帮助,请参阅 RKE 集群配置参考。
-
单击创建。
1. 创建云凭证
如果你已经有一组可用的云凭证,请跳过此部分。
-
点击 ☰ > 集群管理。
-
单击云凭证。
-
单击创建。
-
单击 Amazon。
-
输入云凭证的名称。
-
在默认区域字段中,选择集群节点所在的 AWS 区域。
-
输入 AWS EC2 Access Key 和 Secret Key。
-
单击创建。
结果:已创建用于在集群中配置节点的云凭证。你可以在其他节点模板或集群中复用这些凭证。
2. 创建你的集群
-
点击 ☰ > 集群管理。
-
在集群页面上,单击创建。
-
将开关切换到 RKE2/K3s。
-
单击 Amazon EC2。
-
选择一个云凭证。如果存在多个则需要选择。否则,它是预选的。
-
输入集群名称。
-
为每个 Kubernetes 角色创建一个主机池。请参阅最佳实践了解角色分配和计数的建议。
-
为每个主机池定义主机配置。有关配置选项的信息,请参阅 EC2 主机配置参考。
-
-
使用集群配置,选择要安装的 Kubernetes 版本、要使用的网络提供商,以及是否启用项目网络隔离。有关配置集群的帮助,请参阅 RKE2 集群配置参考。
-
使用成员角色为集群配置用户授权。点击添加成员添加可以访问集群的用户。使用角色下拉菜单为每个用户设置权限。
-
单击创建。
结果:
你已创建集群,集群的状态是配置中。Rancher 已在你的集群中。
当集群状态变为 Active 后,你可访问集群。
Active 状态的集群会分配到两个项目:
-
Default
:包含default
命名空间 -
System
:包含cattle-system
,ingress-nginx
,kube-public
和kube-system
命名空间。
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": "*"
}
]
}