我在创建 AWS Fargate 配置文件时遇到了问题。
简述
Fargate 配置文件是一种机制,指定在 Amazon Elastic Kubernetes Service (Amazon EKS) 集群的 Fargate 节点上计划哪些容器组(pod)。
Fargate 配置文件的选择器将与每个传入容器组(pod)规范 YAML 文件进行匹配。在 Fargate 节点上计划容器组(pod)之前,匹配必须成功,并且必须满足 AWS Fargate 注意事项。容器组(pod)使用子网和 Fargate 配置文件中指定的 AWS Identity and Access Management (IAM) 角色进行计划。
一些容器组(pod)放置规则如下所示:
- 如果容器组(pod)规范具有命名空间和匹配标签配置,该容器组(pod)将被放在与命名空间匹配的 Fargate 配置文件中。容器组(pod)规范还必须与容器组(pod)规范选择器的标签匹配
- 如果 Fargate 配置文件有多个容器组(pod)选择器配置,将使用与任一容器组(pod)选择器配置相匹配的计划容器组(pod)。
- 如果一个容器组(pod)规范与多个 Fargate 配置文件相匹配,将根据随机的 Fargate 配置文件来计划容器组(pod)。除非在容器组(pod)规范中指定了以下注释,否则会出现这种情况:eks.amazonaws.com/fargate-profile。
- Amazon EKS Fargate 容器组(pod)不适用也不需要 Kubernetes 关联性和反关联性规则。
解决方法
以下是您在创建 Fargate 配置文件时会遇到的常见问题:
我如何创建 Fargate 配置文件来在 Fargate 节点计划容器组(pod)?
您可以使用 Amazon EKS 控制台、AWS 命令行界面 (AWS CLI)、SDK 或 API 来创建 Fargate 配置文件。
我如何使用 AWS CloudFormation 创建 Fargate 配置文件?
可以使用 AWS::EKS::FargateProfile CloudFormation 资源类型创建 Fargate 配置文件。
我怎样才能只在 Fargate 节点上运行 CoreDNS 容器组(pod)?
默认情况下,CoreDNS 配置为在 Amazon EKS 集群上在 Amazon EC2 基础结构上运行。如果您想要在集群中在 Fargate 无服务器计算上运行 CoreDNS 容器组(pod),必须为 CoreDNS 部署执行推出重启。
如果您使用 eksctl 和**--fargate** 选项创建集群,使用后续步骤中的操作。
**注意:**使用 eksctl 创建或更新 EKS 集群是最佳做法,这可以简化集群资源管理。有关更多信息,请参阅 eksctl 网站上的 EKS Fargate 支持。
Fargate 配置文件的默认限制是多少?
创建 Fargate 配置文件时默认限制为:
- 一个 EKS 集群最多可以有十个 Fargate 配置文件。
- Fargate 配置文件最多可以有五个选择器。
- Fargate 配置文件选择器最多可以有五对标签。
Fargate 配置文件必须包含哪个容器组(pod)执行角色?
容器组(pod)执行角色是一个 IAM 角色,Fargate 节点使用它来进行 AWS API 调用。必须将 AmazonEKSFargatePodExecutionRolePolicy 托管策略附加到此角色。
Fargate 节点上的 Kubelet 使用此 IAM 角色与 API 服务器通信。此角色必须包含在 aws-auth ConfigMap 中,这样,Kubelet 才能向 API 服务器进行身份验证。创建 Fargate 配置文件时,Fargate 工作流会自动将此角色添加到集群的 aws-auth ConfigMap。
如果您的 Fargate 节点显示“未就绪”,应确保容器组(pod)执行角色包含在 aws-auth ConfigMap 中。
以下是创建具有容器组(pod)执行角色的 Fargate 配置文件后 aws-auth ConfigMap mapRoles 部分代码片段的示例:
mapRoles: | - groups:
- system:bootstrappers
- system:nodes
- system:node-proxier
rolearn: <Pod_execution_role_ARN>
username: system:node:{{SessionName}}
如果您创建 Fargate 配置文件后 aws-auth ConfigMap 被更改,当计划 Fargate 节点上的容器组(pod)时,您可能会收到此警告:
Pod provisioning timed out (will retry) for pod: <pod_nginx>
我想要将工作负载迁移到 EKS Fargate。我如何创建要使用的子网和安全组?
EKS Fargate 仅支持私有子网。这意味着在附加到您的 Fargate 配置文件中指定的子网的路由表中,没有到互联网网关的默认路由。因此,您可以为打算用于 Fargate 配置文件的子网配置 NAT 网关或 VPC 端点。
集群安全组默认会附加到 Fargate 节点。您无需专门为此目的预配安全组。
如果您为子网使用 VPC 端点,确保集群已激活私有端点访问权限。附加到 VPC 端点的安全组必须具有允许来自集群的 VPC CIDR 的 HTTPS 端口 443 流量的入站规则。
我使用基于 API 的预配程序(如 Terraform 或 AWS CloudFormation)创建了 Fargate 配置文件。为什么我的 Fargate 配置文件是 CREATE_FAILED 状态?
一次只能创建或删除一个 Fargate 配置文件。如果您在删除某个 Fargate 配置文件,则无法同时创建或删除其他 Fargate 配置文件。
如果您使用基于 API 的预配程序,必须在成功创建或删除所有其他 Fargate 配置文件后再开始创建或删除 Fargate 配置文件。
我能否在 Fargate 配置文件中指定要为 Fargate 节点预配的资源(CPU、内存)?
您无法直接在 Fargate 配置文件中指定要预配的资源量。最佳做法是在 Fargate 容器组(pod)规范 YAML 文件中指定资源请求。这样可以帮助 Fargate 工作流至少为该容器组(pod)分配这一数量的资源。有关更多信息,请参阅 Kubernetes 网站上的 Kubernetes 应用哪些资源请求和限制。
您在运行 kubectl describe node 命令后看到的 vCPU 或内存量可能与您为容器组(pod)请求的数量不同。节点的内存和 CPU 量取决于 Fargate 资源分配池中的可用容量。我们将根据您在 容器组(pod)规范中请求的数量向您计费。不会按照 kubectl 显示的资源量计费。
**注意:**如果您未指定 vCPU 和内存组合,将使用最小的可用组合(0.25 vCPU 和 0.5 GB 内存)。