开始使用Amazon使用 Amazon EKS 的 Fargate - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

开始使用Amazon使用 Amazon EKS 的 Fargate

重要

此功能在中国区域中不可用。

本主题可帮助您开始在AmazonFargate 与您的 Amazon EKS 集群。

如果您使用 CIDR 块限制对集群的公有终端节点的访问,建议您还启用私有终端节点访问,以便 Fargate Pod 可以与集群进行通信。在未启用私有终端节点的情况下,您指定用于公有访问的 CIDR 块必须包含来自 VPC 的出口源。有关更多信息,请参阅 Amazon EKS 集群终端节点访问控制

Prerequisite

使用现有集群。Amazon亚马逊 EKS Fargate 在除中国(北京)、中国(宁夏)以外的所有亚马逊 EKS 区域都可以使用。AmazonGovCloud(美国东部),以及AmazonGovCloud(美国西部)。如果您还没有 Amazon EKS 群集,请参阅Amazon EKS 入门

确保现有节点可以与 Fargate Pod 进行通信

如果您使用的是没有节点的新集群,或是只有托管节点组,可以跳至创建 Fargate Pod 执行角色

如果您使用的是已经关联了节点的现有集群,则需要确保这些节点上的 Pod 可以与 Fargate 上运行的 Pod 自由通信。在 Fargate 上运行的 Pod 会自动配置为使用与其关联的集群的群集安全组。您必须确保集群中的任何现有节点都可以向集群安全组发送流量以及从中接收流量。托管节点组会自动配置为使用集群安全组,因此您无需修改或检查它们是否具有此兼容性。

对于使用创建的现有节点组eksctl或管理的亚马逊 EKSAmazon CloudFormation模板中,您可以手动将集群安全组添加到节点,也可以修改节点组的 Auto Scaling 组启动模板来将集群安全组附加到实例。想要了解更多有关信息,请参阅 Amazon VPC 用户指南中的更改实例的安全组主题

您可以在Amazon Web Services Management Console在群集的联网部分,或者使用以下Amazon CLI命令。Replace<cluster_name>(包括<>),将替换为您集群的名称。

aws eks describe-cluster --name <cluster_name> --query cluster.resourcesVpcConfig.clusterSecurityGroupId

创建 Fargate Pod 执行角色

当您的集群在AmazonFargate,在 Fargate 基础架构上运行的组件需要调用Amazon代表您执行从 Amazon ECR 拉取容器映像或将日志路由到其他Amazon服务。Amazon EKS Pod 执行角色提供执行此操作的 IAM 权限。

注意

如果您是使用 --fargate 选项通过 eksctl 创建了集群,那么您的集群已具有 Pod 执行角色,您可以直接跳至 为您的集群创建 Fargate 配置文件。同样,如果您使用eksctl创建您的 Fargate 配置文件,eksctl会创建您的 Pod 执行角色(如果尚不存在)。

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

重要

在 Fargate 窗格中运行的容器不能承担与容器执行角色相关联的 IAM 权限。要授予 Fargate 容器中的容器访问其他Amazon服务,则必须使用服务账户的 IAM 角色

创建AmazonFargate Pod 执行角色与Amazon Web Services Management Console

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 选择 Roles,然后选择 Create role

  3. 选择EKS从服务列表中,EKS-Fargate 舱,然后后续:Permissions (下一步:权限)

  4. 选择 Next:。标签

  5. (可选)通过以键值对的形式附加标签来向角色添加元数据。有关在 IAM 中使用标签的更多信息,请参阅标记 IAM 实体中的IAM 用户指南

  6. 选择 Next:。审核

  7. 对于 Role name (角色名称),输入您的角色的唯一名称,如 AmazonEKSFargatePodExecutionRole,然后选择 Create role (创建角色)

为您的集群创建 Fargate 配置文件

您必须先定义一个 Fargate 配置文件,以便指定启动时哪些 Pod 应使用 Fargate 应使用 Fargate,然后才能安排在集群中的 Fargate 上运行的 Pod。有关更多信息,请参阅 AmazonFargate 配置文件

注意

如果您使用创建集群eksctl使用--fargate选项,那么已经为您的集群创建了 Fargate 配置文件,而且其包含kube-systemdefault命名空间。使用以下程序为要用于 Fargate 的任何其他命名空间创建 Fargate 配置文件。

您可以使用eksctl或Amazon Web Services Management Console。

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

eksctl version

有关安装或升级 eksctl 的更多信息,请参阅安装或升级 eksctl

eksctl

使用创建 Fargate 配置文件eksctl

使用以下命令创建您的 Fargate 个人资料eksctl命令,替换<variable text>(包括<>),并使用您自己的值。您必须指定命名空间,但--labels选项不是必需的。

eksctl create fargateprofile \ --cluster <cluster_name> \ --name <fargate_profile_name> \ --namespace <kubernetes_namespace> \ --labels <key=value>
Amazon Web Services Management Console

使用为集群创建 Fargate 配置文件Amazon Web Services Management Console

  1. 从打开 Amazon EKS 控制台https://console.aws.amazon.com/eks/home#/clusters

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

  3. 在下Fargate 配置文件中,选择添加 Fargate 配置文件

  4. 在存储库的配置文件” 页面上,输入以下信息,然后选择下一步

    1. 适用于名称下,为 Fargate 配置文件输入唯一名称。

    2. 适用于Pod 执行角色下,选择要用于 Fargate 配置文件的 Pod 执行角色。只有具有eks-fargate-pods.amazonaws.com将显示服务委托人。如果您未看到此处列出的任何角色,则必须创建一个角色。有关更多信息,请参阅 Pod 执行角色

    3. 对于 Subnets (子网),选择要用于 Pod 的子网。默认情况下,集群 VPC 中的所有子网都处于选中状态。Fargate 上运行的 Pod 仅支持私有子网;您必须取消选择任何公有子网。

    4. 适用于标签,您可以选择为 Fargate 配置文件添加标签。这些标签不会传播到与配置文件关联的其他资源,如 Pod。

  5. Configure pods selection (配置 Pod 选择) 页面上,输入以下信息并选择 Next (下一步)

    1. 对于 Namespace (命名空间),输入与 Pod 匹配的命名空间,如 kube-systemdefault

    2. (可选)将 Kubernetes 标签添加到指定命名空间中的 Pod 必须与选择器匹配的选择器中。例如,您可以将标签 infrastructure: fargate 添加到选择器中,以便只有指定命名空间中也具有 infrastructure: fargate Kubernetes 标签的 Pod 与选择器匹配。

  6. 在存储库的审核和创建页面上,查看 Fargate 配置文件的信息,然后选择Create

(可选)更新 CoreDNS

默认情况下,CoreDNS 配置为在 Amazon EKS 集群上的 Amazon EC2 基础设施上运行。如果要仅限在集群的 Fargate 上运行 Pod,您需要修改 CoreDNS 部署以删除eks.amazonaws.com/compute-type : ec2注释。您还需要创建一个 Fargate 配置文件来定位 CoreDNS Pod。以下 Fargate 配置文件 JSON 文件将执行此操作。

注意

如果您使用创建集群eksctl使用--fargate选项,然后coredns已经过修补以在 Fargate 上运行,您可以直接跳至后续步骤

{ "fargateProfileName": "coredns", "clusterName": "<dev>", "podExecutionRoleArn": "<arn:aws:iam::111122223333:role/AmazonEKSFargatePodExecutionRole>", "subnets": [ "subnet-<0b64dd020cdff3864>", "subnet-<00b03756df55e2b87>", "subnet-<0418fcb68ed294abf>" ], "selectors": [ { "namespace": "kube-system", "labels": { "k8s-app": "kube-dns" } } ] }

您可以使用下面的将此 Fargate 配置文件应用于集群Amazon CLI命令。首先,创建一个名为coredns.json,然后将上一步中的 JSON 文件粘贴到其中,并 <variable text> 用您自己的集群值替换。

aws eks create-fargate-profile --cli-input-json file://coredns.json

然后,使用下面的 kubectl 命令从 CoreDNS Pod 中删除 eks.amazonaws.com/compute-type : ec2 注释。

kubectl patch deployment coredns \ -n kube-system \ --type json \ -p='[{"op": "remove", "path": "/spec/template/metadata/annotations/eks.amazonaws.com~1compute-type"}]'

后续步骤

  • 您可以开始使用下面的工作流迁移现有应用程序在 Fargate 上运行。

    1. 创建 Fargate 配置文件,匹配您的应用程序的 Kubernetes 命名空间和 Kubernetes 标签。

    2. 删除并重新创建所有现有的 Pod,以便可以在 Fargate 上安排它们。例如,以下命令触发 coredns 部署的推广。您可以修改命名空间和部署类型以更新特定 Pod。

      kubectl rollout restart -n <kube-system> <deployment coredns>
  • 部署Amazon EKS 上的 Application Load Balancing以允许在 Fargate 上运行的 Pod 的入口对象。

  • 您可以将Vertical Pod Autoscaler最初为 Fargate 窗格调整 CPU 和内存的大小,然后使用Horizontal Pod Autoscaler来缩放这些窗格。如果您希望垂直窗格自动缩放器自动将窗格重新部署到具有较大 CPU 和内存组合的 Fargate,请将垂直窗格自动缩放器模式设置为Auto或者Recreate以确保正确的功能。有关更多信息,请参阅 。Vertical Pod Autoscaler文档。