New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
如何使用 Amazon EKS 托管节点组启动竞价型实例并对其进行故障排除?
我想为我的 Amazon Elastic Kubernetes Service(Amazon EKS)集群创建具有竞价型容量的托管节点组并解决问题。
解决方法
1. 安装 eksctl。
**重要提示:**确保先检查所有 AWS 命令行界面(AWS CLI)命令再使用,并将 example 字符串的实例替换为您的值。例如,将 example_cluster 替换为您的集群名称。
2. 运行以下命令,在现有集群中创建具有竞价型容量的托管节点组:
#eksctl create nodegroup --cluster=<example_cluster> --spot --instance-types=<Comma-separated list of instance types> --region <EKS cluster AWS region. Defaults to the value set in your AWS config (~/.aws/config)>
示例:
#eksctl create nodegroup --cluster=demo --spot --instance-types=c3.large,c4.large,c5.large --region us-east-1
注意:在创建竞价型托管节点组时,您还可以设置其他标记,例如 --name、--nodes、--nodes-min 和 --nodes-max。运行以下命令,获取所有可用标记的完整列表:
#eksctl create nodegroup --help
3. 如果您为您的集群维护 eksctl ClusterConfig 配置文件,您还可以使用该文件创建竞价型托管节点组。运行以下命令,使用带 spot-cluster.yaml 配置文件的托管节点组创建竞价型实例:
apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: <example_cluster> region: <example_region> managedNodeGroups: - name: spot instanceTypes: ["c3.large","c4.large","c5.large","c5d.large","c5n.large","c5a.large"] spot: true
4. 运行以下命令,使用配置文件创建节点组:
# eksctl create nodegroup -f spot-cluster.yaml
与 Amazon EKS 中解决与竞价型实例相关的问题
使用 eksctl 或 Amazon EKS 控制台检查托管节点组的运行状况,如下所示:
$ eksctl utils nodegroup-health --name=<example_nodegroup> --cluster=<example_cluster>
由于已用实例类型的竞价型容量不足,竞价型托管节点组的运行状况可能会因错误而下降。请参阅以下错误示例:
AsgInstanceLaunchFailures Could not launch Spot Instances. UnfulfillableCapacity - Unable to fulfill capacity due to your request configuration. Please adjust your request and try again. Launching EC2 instance failed.
**注意:**要成功采用竞价型实例,最佳实践是在竞价型托管节点组配置中实现竞价型实例多样化。竞价型实例多样化有助于从多个竞价型实例池中获取容量。获得此容量既可用于扩展规模,也可用于替换可能会收到竞价型实例终止通知的竞价型实例。
如果您的集群竞价型节点组必须配置符合 1 vCPU:4 GB RAM 比率的实例类型,则可以多样化您的竞价型实例池。借助以下策略,多样化您的实例池:
- 创建多个节点组,每个节点组的大小各不相同。例如,一个节点组大小为 4 个 vCPU 和 16 GB RAM,另一个大小为 8 个 vCPU 和 32 GB RAM。
- 在节点组内实现实例多样化。为此,您可以从满足相同 vCPU 和内存标准的不同竞价型实例池中混合选择实例类型和系列。
运行以下命令,使用 amazon-ec2-instance-selector 选择具有足够数量的 vCPU 和 RAM 的相关实例类型和系列:
curl -Lo ec2-instance-selector https://github.com/aws/amazon-ec2-instance-selector/releases/download/v2.0.3/ec2-instance-selector-`uname | tr '[:upper:]' '[:lower:]'`-amd64 && chmod +x ec2-instance-selector sudo mv ec2-instance-selector /usr/local/bin/ ec2-instance-selector --version
示例:
ec2-instance-selector --vcpus 4 --memory 16 --gpus 0 --current-generation -a x86_64 --deny-list '.*[ni].*'
前面的命令显示了类似于以下内容的列表。在您的某个节点组中使用这些实例。
- m4.xlarge
- m5.xlarge
- m5a.xlarge
- m5ad.xlarge
- m5d.xlarge
- t2.xlarge
- t3.xlarge
- t3a.xlarge
注意:无法使用 Amazon EKS API 更改现有节点组的实例类型。最佳实践是使用所需的实例类型创建新的竞价型节点组。在 eksctl create nodegroup 命令中输入以下内容。注意新的 eksctl 标记,表示节点组运行竞价型实例:--spot。
$eksctl create nodegroup --cluster=<example_cluster> --spot --instance-types m5.xlarge,m4.xlarge,m5a.xlarge,m5d.xlarge,m5n.xlarge,m5ad.xlarge --region <example_region>

相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 10 个月前
- AWS 官方已更新 4 年前
- AWS 官方已更新 2 年前