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

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

通过 Amazon EKS 开始使用 AWS Fargate

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

注意

Amazon EKS 的 AWS Fargate 目前仅在以下区域可用:

区域名称 区域(可用区约束)
美国东部(俄亥俄州) us-east-2
美国东部(弗吉尼亚北部) us-east-1
美国西部(加利福尼亚北部) us-west-1
美国西部(俄勒冈) us-west-2
亚太地区(香港) ap-east-1
亚太地区(孟买) ap-south-1
亚太区域(首尔) ap-northeast-2
亚太区域(新加坡) ap-southeast-1
亚太区域(悉尼) ap-southeast-2
亚太区域(东京) ap-northeast-1 (仅限 apne1-az1apne1-az2apne1-az4
加拿大 (中部) ca-central-1 (仅限 cac1-az1cac1-az2
欧洲(法兰克福) eu-central-1
欧洲(爱尔兰) eu-west-1
欧洲(伦敦) eu-west-2
欧洲(巴黎) eu-west-3
欧洲(斯德哥尔摩) eu-north-1
南美洲(圣保罗) sa-east-1
中东(巴林) me-south-1

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

(可选)创建集群

Prerequisite

支持的区域中的现有集群。如果您还没有 Amazon EKS 集群,可以使用以下 eksctl 命令创建一个。

注意

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

eksctl version

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

eksctl create cluster --name <my-cluster> --version <1.18> --fargate

在上述命令中添加 --fargate 选项将创建没有节点组的集群。不过,eksctl 会创建 Pod 执行角色、defaultkube-system 命名空间的 Fargate 配置文件,并对 coredns 部署进行修补,使其可以在 Fargate 上运行。

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

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

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

对于使用 eksctl 或 Amazon EKS 托管 AWS CloudFormation 模板创建的现有节点组,您可以手动将集群安全组添加到节点,也可以修改节点组的 Auto Scaling 组启动模板以将集群安全组附加到实例。有关更多信息,请参阅 https://docs.amazonaws.cn/vpc/latest/userguide/VPC_SecurityGroups.html#SG_Changing_Group_Membership 中的更改实例的安全组Amazon VPC 用户指南。

您可以在 AWS 管理控制台 中集群的 Networking (联网) 部分下,或使用以下 AWS CLI 命令检查您集群的集群安全组:

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

创建 Fargate Pod 执行角色

当您的集群在 AWS Fargate 上创建 Pod 时,在 Fargate 基础设施上运行的组件需要代表您调用 AWS APIs,以执行从 Amazon ECR 中提取容器映像或将日志路由到其他 AWS 服务等操作。Amazon EKS Pod 执行角色提供执行此操作的 IAM 权限。

注意

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

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

重要

在 Fargate pod 中运行的容器无法代入与 Pod 执行角色关联的 IAM 权限。要授予 Fargate Pod 中的容器访问其他 AWS 服务的权限,您必须使用 服务账户的 IAM 角色

使用 AWS Fargate 创建 AWS 管理控制台 Pod 执行角色

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

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

  3. 从服务列表中选择 EKS,为您的使用案例选择 EKS - Fargate pod,然后选择 Next: (下一步:)。权限。

  4. 选择 Next: (下一步:)。 标签

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

  6. 选择 Next: (下一步:)。 审核

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

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

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

注意

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

您可以使用 Fargateeksctl 或 AWS 管理控制台 创建一个 配置文件。

使用 eksctl 为集群创建 Fargate 配置文件

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

eksctl version

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

  • 使用以下 Fargate 命令创建 eksctl 配置文件,同时将 <variable text> 替换为您自己的值。您必须指定命名空间,但不需要提供标签选项。

    eksctl create fargateprofile --cluster <cluster_name> --name <fargate_profile_name> --namespace <kubernetes_namespace> --labels <key=value>

使用 AWS 管理控制台 为集群创建 Fargate 配置文件

  1. Open the Amazon EKS console at https://console.amazonaws.cn/eks/home#/clusters.

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

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

  4. Configure Fargate profile (配置 Fargate 配置文件) 页面上,输入以下信息并选择 下一步 (Next)

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

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

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

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

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

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

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

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

(可选)更新CoreDNS

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

注意

如果您是使用 --fargate 选项通过 eksctl 创建了集群,那么 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" } } ] }

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

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

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

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

后续步骤

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

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

    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 以确保功能正常运行。有关更多信息,请参阅 上的 Vertical Pod AutoscalerGitHub 文档。