AWS Fargate 配置文件 - Amazon EKS

AWS Fargate 配置文件

重要

具有 Amazon EKS 的 AWS Fargate 在 AWS GovCloud(美国东部)和 AWS GovCloud(美国西部)不可用。

您必须先定义至少一个 Fargate 配置文件,以指定在启动时哪些 Pods 使用 Fargate,然后在集群中的 Fargate 上安排 Pods。

作为管理员,您可以使用 Fargate 配置文件声明哪些 Pods 在 Fargate 上运行。您可以通过配置文件的选择器执行此操作。您最多可以为每个配置文件添加五个选择器。每个选择器都必须包含一个命名空间。选择器还可以包含标签。标注字段由多个可选键值对组成。与选择器匹配的容器组(pod)被安排在 Fargate 上。容器组(pod)使用选择器中指定的命名空间和标签进行匹配。如果定义了没有标签的命名空间选择器,Amazon EKS 会尝试使用配置文件将在该命名空间中运行的所有 Pods 安排到 Fargate。如果待安排的 Pod 与 Fargate 配置文件中的任意一个选择器匹配,则该 Pod 将被安排到 Fargate 上。

如果 Pod 匹配多个 Fargate 配置文件,您可以指定 Pod 使用的配置文件,方法为将以下 Kubernetes 标签添加到 Pod 规范:eks.amazonaws.com/fargate-profile: my-fargate-profile。Pod 必须匹配该配置文件中的选择器才能被安排到 Fargate 上。Kubernetes 亲和力/反亲和力规则不适用,Amazon EKS Fargate Pods 不需要这些规则。

创建 Fargate 配置文件时,必须指定 Pod 执行角色。此执行角色适用于使用配置文件在 Fargate 基础设施上运行的 Amazon EKS 组件。此角色将被添加到集群的 Kubernetes 基于角色的访问控制(RBAC)以进行授权。这样,Fargate 基础设施上运行的 kubelet 可以注册到您的 Amazon EKS 集群,并在您的集群中作为节点显示。Pod 执行角色还提供对 Fargate 基础设施的 IAM 权限,以允许对 Amazon ECR 映像存储库进行读取访问。有关更多信息,请参阅Amazon EKS Pod 执行 IAM 角色

您无法更改 Fargate 配置文件。但是,您可以创建新的更新配置文件来替换现有配置文件,然后删除原始配置文件。

注意

删除配置文件后,使用 Fargate 配置文件运行的任何 Pods 都会停止并进入待处理状态。

如果集群中有任何 Fargate 配置文件处于 DELETING 状态,您必须等待删除该 Fargate 配置文件后,才能在该集群中创建其他配置文件。

Amazon EKS 和 Fargate 在 Fargate 配置文件定义的每个子网中分布 Pods。但是,最终可能会出现不均匀的分布。如果您必须获得均匀的分布,请使用两个 Fargate 配置文件。在您希望部署两个副本并且不希望造成任何停机的方案中,均匀的分布非常重要。我们建议每个配置文件只有一个子网。

Fargate 配置文件组件

Fargate 配置文件中包含以下组件。

Pod 执行角色

当您的集群在 AWS Fargate 上创建 Pods 时,在 Fargate 基础设施上运行的 kubelet 必须代表您调用 AWS API。例如,它需要调用才能从 Amazon ECR 提取容器镜像。Amazon EKS Pod 执行角色提供执行此操作的 IAM 权限。

创建 Fargate 配置文件时,必须指定要用于 Pods 的 Pod 执行角色。此角色将被添加到集群的 Kubernetes 基于角色的访问控制(RBAC)以进行授权。这允许在 Fargate 基础设施上运行的 kubelet 注册到您的 Amazon EKS 集群,以便它可以作为节点显示在您的集群中。有关更多信息,请参阅Amazon EKS Pod 执行 IAM 角色

子网

将 Pods 启动到其中使用此配置文件的子网 ID。目前,在 Fargate 上运行的 Pods 没有分配公有 IP 地址。因此,此参数仅接受私有子网(没有到互联网网关的直接路由)。

选择器

要匹配 Pods 以使用此 Fargate 配置文件的选择器。您最多可以在 Fargate 配置文件中指定五个选择器。选择器具有以下组件:

  • 命名空间 – 您必须为选择器指定命名空间。选择器仅匹配在此命名空间中创建的 Pods。但是,您可以创建多个选择器来定位多个命名空间。

  • 标签 – 您可以选择指定 Kubernetes 标签来匹配选择器。选择器只匹配具有在选择器中指定的所有标签的 Pods。

Fargate 配置文件通配符

除了 Kubernetes 允许的字符外,您可以在命名空间、标签键和标签值的选择器标准中使用 *?

  • * 表示无、一个或多个字符。例如,prod* 可以表示 prodprod-metrics

  • ? 表示单个字符(例如,value? 可以表示 valuea)。但是,它不能表示 valuevalue-a,因为 ? 只能准确地表示一个字符。

这些通配符可以在任何位置组合使用(例如,prod**dev 以及 frontend*?)。不支持其他通配符和模式匹配形式,例如正则表达式。

如果 Pod 规范中有多个配置文件与命名空间和标签匹配,Fargate 会根据配置文件名称的字母数字排序来选取配置文件。例如,如果配置文件 A(名称为 beta-workload)和配置文件 B(名称为 prod-workload)都有匹配的选择器可供要启动的 Pods 使用,则 Fargate 会为 Pods 选取配置文件 A(beta-workload)。Pods 具有标签,显示容器组 Pods 上有配置文件 A(例如 eks.amazonaws.com/fargate-profile=beta-workload)。

如果要将现有 Fargate Pods 迁移到使用通配符的新配置文件中,有两种方法可执行此操作:

  • 使用匹配的选择器创建一个新的配置文件,然后删除旧的配置文件。标有旧配置文件的容器组(pod)将被重新安排到新的匹配配置文件中。

  • 若要迁移工作负载,但不确定每个 Fargate Pod 上有哪些 Fargate 标签,则可以使用以下方法。创建一个新的配置文件,首先在同一个集群上的配置文件中按字母数字排序配置文件名称。然后,回收需要迁移到新配置文件的 Fargate Pods。

创建 Fargate 配置文件

本主题介绍如何创建 Fargate 配置文件。您还必须已经创建了要用于 Fargate 配置文件的 Pod 执行角色。有关更多信息,请参阅 Amazon EKS Pod 执行 IAM 角色。在 Fargate 上运行的 Pods 仅在私有子网上受支持(对 AWS 服务 具有 NAT 网关访问权限,但没有到互联网网关的直接路由)。因此,您的集群的 VPC 必须有可用的私有子网。您可以使用 eksctl 或 AWS Management Console 创建配置文件。

此过程需要 eksctl 版本 0.171.0 或更高版本。可以使用以下命令来查看您的版本:

eksctl version

有关安装或升级 eksctl 的说明,请参阅 eksctl 文档中的 Installation

eksctl
利用 eksctl 创建 Fargate 配置文件

使用以下 eksctl 命令创建 Fargate 配置文件,并将所有 example value 替换为您自己的值。您需要指定命名空间。但是,--labels 选项不是必选。

eksctl create fargateprofile \ --cluster my-cluster \ --name my-fargate-profile \ --namespace my-kubernetes-namespace \ --labels key=value

您可以将某些通配符用于 my-kubernetes-namespacekey=value 标签。有关更多信息,请参阅Fargate 配置文件通配符

AWS Management Console
使用 AWS Management Console 为集群创建 Fargate 配置文件
  1. 从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters

  2. 选择要为其创建 Fargate 配置文件的集群。

  3. 请选择 Compute(计算)选项卡。

  4. Fargate profiles(Fargate 配置文件)下,选择 Add Fargate profile(添加 Fargate 配置文件)

  5. Configure Fargate profile(配置 Fargate 配置文件)页面上,执行以下操作:

    1. 对于 Name(名称),为 Fargate 配置文件输入唯一名称,例如 my-profile

    2. 对于 Pod execution role(容器组(pod)执行角色),选择要用于您的 Fargate 配置文件的 Pod 执行角色。将仅显示具有 eks-fargate-pods.amazonaws.com 服务委托人的 IAM 角色。如果您未看到列出的任何角色,则必须创建一个角色。有关更多信息,请参阅Amazon EKS Pod 执行 IAM 角色

    3. 根据需要修改选定的子网

      注意

      Fargate 上运行的 Pods 仅支持私有子网。

    4. 对于 Tags(标签),您可以自行选择是否为 Fargate 配置文件添加标签。这些标签不会传播到与配置文件关联的其他资源,例如 Pods。

    5. 选择下一步

  6. Configure Pod selection(配置选择)页面上,请执行以下操作:

    1. 对于 Namespace(命名空间),输入与 Pods 匹配的命名空间。

      • 您可以使用匹配的特定命名空间,例如 kube-systemdefault

      • 您可以使用某些通配符(例如 prod-*)以匹配多个命名空间(例如,prod-deploymentprod-test)。有关更多信息,请参阅Fargate 配置文件通配符

    2. (可选)将 Kubernetes 标签添加到选择器中。特别是将它们添加到指定命名空间中的 Pods 需要匹配的那个。

      • 您可以将标签 infrastructure: fargate 添加到选择器中,以便只有指定命名空间中也具有 infrastructure: fargate Kubernetes 标签的 Pods 与选择器匹配。

      • 您可以使用某些通配符(例如 key?: value?)以匹配多个命名空间(例如,keya: valueakeyb: valueb)。有关更多信息,请参阅Fargate 配置文件通配符

    3. 选择下一步

  7. Review and create(查看和创建)页面上,查看 Fargate 配置文件的信息,然后选择 Create(创建)

删除 Fargate 配置文件

本主题介绍如何删除 Fargate 配置文件。

当您删除 Fargate 配置文件时,使用该配置文件安排到 Fargate 的所有 Pods 都将被删除。如果这些 Pods 与另一个 Fargate 配置文件匹配,则将使用该配置文件在 Fargate 上安排它们。如果它们不再匹配任何 Fargate 配置文件,则不会被安排到 Fargate,并仍可能处于待处理状态。

集群中一次只能有一个 Fargate 配置文件处于 DELETING 状态。等待 Fargate 配置文件完成删除,然后才能删除该集群中的任何其他配置文件。

您可以使用 eksctl、AWS Management Console 或 AWS CLI 来删除配置文件。请选择包含要用于删除您的配置文件的工具名称的选项卡。

eksctl

使用 eksctl 删除 Fargate 配置文件

使用以下命令从集群中删除配置文件。请将每个 example value 替换为您自己的值。

eksctl delete fargateprofile --name my-profile --cluster my-cluster
AWS Management Console
利用 AWS Management Console 从集群中删除 Fargate 配置文件
  1. 从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters

  2. 在左侧导航窗格中,选择集群。在集群列表中,选择要从中删除 Fargate 配置文件的集群。

  3. 请选择 Compute(计算)选项卡。

  4. 选择要删除的 Fargate 配置文件,然后选择 Delete(删除)。

  5. Delete Fargate profile(删除 Fargate 配置文件)页面上,输入配置文件的名称,然后选择 Delete(删除)。

AWS CLI

使用 AWS CLI 删除 Fargate 配置文件

使用以下命令从集群中删除配置文件。请将每个 example value 替换为您自己的值。

aws eks delete-fargate-profile --fargate-profile-name my-profile --cluster-name my-cluster