如何使用 Amazon EKS 托管节点组启动竞价型实例并对其进行故障排除?

2 分钟阅读
0

我想为我的 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 官方
AWS 官方已更新 1 年前