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

通过 Amazon EKS 开始使用 Amazon Fargate

重要

此功能在 Amazon Web Services 区域(中国)不可用。

本主题可帮助您开始在 Amazon EKS 集群的 Amazon Fargate 上运行 Pod。

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

先决条件

现有集群。AmazonAmazon EKS 上的 Fargate 在除中国(北京)、中国(宁夏)、Amazon GovCloud(美国东部)和 Amazon GovCloud(美国西部)以外的所有 Amazon EKS 区域推出。如果您还没有 Amazon EKS 集群,请参阅 开始使用 Amazon EKS

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

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

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

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

您可以在 Amazon Web Services Management Console 中集群的 Networking(联网)部分下,检查您集群的集群安全组。或者,您可以使用下面的 Amazon CLI 命令进行这项操作。使用此命令时,请将 my-cluster 替换为您的集群名称。

aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.clusterSecurityGroupId

创建 Fargate Pod 执行角色

当您的集群在 Amazon Fargate 上创建容器组时,在 Fargate 基础设施上运行的组件必须代表您调用 Amazon API。这是为了他们可以执行诸如从 Amazon ECR 中拉取容器镜像或将日志路由到其他 Amazon 服务的操作。Amazon EKS Pod 执行角色提供执行此操作的 IAM 权限。

注意

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

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

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

  • 角色 ARN 不能包含路径。角色 ARN 的格式必须为 arn:aws:iam::111122223333:role/role-name。有关更多信息,请参阅 aws-auth ConfigMap 不授予对集群的访问权限

使用 Amazon Web Services Management Console 创建 Amazon Fargate Pod 执行角色

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

  2. 在左侧导航窗格中,选择 Roles (角色)

  3. 角色页中,选择创建角色

  4. Select trusted entity(选择受信任的实体)页面上,执行以下操作:

    1. Trusted entity type(受信任的实体类型)部分中,选择 Amazon Web Service

    2. Use cases for other Amazon Web Services(其他 Amazon Web Services 的使用案例)下拉列表中,选择 EKS

    3. 选择 EKS - Fargate pod(EKS - Fargate 容器)。

    4. 选择 Next (下一步)

  5. Add permissions(添加权限)页面上,选择 Next(下一步)。

  6. Name, review, and create(命名、查看和创建)页面中,执行以下操作:

    1. 对于 Role name (角色名称),为角色输入唯一名称,例如 AmazonEKSFargatePodExecutionRole

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

    3. 选择 Create role (创建角色)

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

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

注意

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

您可以使用 eksctl 或 Amazon Web Services Management Console 创建 Fargate 配置文件。

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

eksctl version

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

eksctl

利用 eksctl 创建 Fargate 配置文件

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

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

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

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

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

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

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

    1. 对于 Name(名称),为 Fargate 配置文件输入唯一名称。

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

    3. 选择 Subnets(子网)下拉列表并取消选择名称中带有 Public 的所有子网。Fargate 上运行的 Pod 仅支持私有子网。

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

    5. 选择 Next (下一步)

  5. 请在 Configure pod selection(配置容器选择)页面上,执行以下操作:

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

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

    3. 选择 Next (下一步)

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

更新 CoreDNS

预设情况下,CoreDNS 配置为在 Amazon EKS 集群的 Amazon EC2 基础设施上运行。如果在集群的 Fargate 上运行 Pod(一组容器),请完成以下步骤。

注意

如果使用 --fargate 选项用 eksctl 创建集群,则可以跳至 后续步骤

  1. 为 CoreDNS 创建 Fargate 配置文件。将 my-cluster 替换为集群名称,将 111122223333 替换为账户 ID,将 AmazonEKSFargatePodExecutionRole 替换为容器执行角色名称,并将 000000000000000100000000000000020000000000000003 替换为私有子网的 ID。如果没有 Pod(一组容器)执行角色,则必须先创建一个

    重要

    角色 ARN 不能包含路径。角色 ARN 的格式必须为 arn:aws:iam::111122223333:role/role-name。有关更多信息,请参阅 aws-auth ConfigMap 不授予对集群的访问权限

    aws eks create-fargate-profile \ --fargate-profile-name coredns \ --cluster-name my-cluster \ --pod-execution-role-arn arn:aws:iam::111122223333:role/AmazonEKSFargatePodExecutionRole \ --selectors namespace=kube-system,labels={k8s-app=kube-dns} \ --subnets subnet-0000000000000001 subnet-0000000000000002 subnet-0000000000000003
  2. 然后,使用下面的命令从 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 上的应用程序负载均衡 以允许在 Fargate 上运行的 Pod 的入口对象。

  • 您可以使用 Vertical Pod Autoscaler 最初针对您的 Fargate Pod 合理调整 CPU 和内存的大小,然后使用 Horizontal Pod Autoscaler 来扩展这些 Pod。如果您希望 Vertical Pod Autoscaler 自动将 Pod 重新部署到具有更大 CPU 和内存组合的 Fargate,请将 Vertical Pod Autoscaler 的模式设置为 AutoRecreate。这是为了确保正确的功能。有关更多信息,请参阅 GitHub 上的 Vertical Pod Autoscaler 文档。

  • 您可以依照这些说明设置 Amazon Distro for OpenTelemetry (ADOT) 收集器,用于监控应用程序。