AWS Fargate - Amazon EKS

AWS Fargate

重要

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

本主题讨论使用 Amazon EKS 在 AWS Fargate 上运行 Kubernetes Pods。Fargate 是一种为容器按需提供大小合适的计算容量的技术。使用 Fargate,您不必再自己预置、配置或扩展虚拟机组即可运行容器。您无需再选择服务器类型、确定扩展节点组的时间和优化集群打包。

您可以控制要在 Fargate 上启动的 Pods,以及它们如何利用 Fargate 配置文件运行。Fargate 配置文件被定义为 Amazon EKS 集群的一部分。Amazon EKS 使用由 AWS 构建的控制器(使用 Kubernetes 提供的上游可扩展模型)将 Kubernetes 与 Fargate 集成。这些控制器作为 Amazon EKS 托管 Kubernetes 控制面板的一部分运行,负责将本机 Kubernetes Pods 安排到 Fargate 上。除了若干转换和验证准入控制器外,Fargate 控制器还包括一个与默认 Kubernetes 调度器一起运行的新调度器。当您启动满足 Fargate 上的运行条件的 Pod 时,集群中运行的 Fargate 控制器会识别、更新 Pod 并将其安排到 Fargate 上。

本主题介绍 Fargate 上运行的 Pods 的不同组件,还列出了将 Fargate 与 Amazon EKS 结合使用时的特别注意事项。

AWS Fargate 注意事项

以下是使用 Amazon EKS 上的 Fargate 时要考虑的一些事项。

  • 在 Fargate 上运行的每组 Pod 都有自己的隔离边界。其不与其他组的 Pod 共享底层内核、CPU 资源、内存资源或弹性网络接口。

  • 网络负载均衡器和 Application Load Balancer (ALB) 只能与具有 IP 目标的 Fargate 一起使用。有关更多信息,请参阅 创建网络负载均衡器Amazon EKS 上的应用程序负载均衡

  • Fargate 暴露的服务仅在目标类型 IP 模式下运行,而不是在节点 IP 模式下运行。推荐通过服务名称进行连接来检查托管节点上运行的服务和 Fargate 上运行服务的连接性。

  • 在对 Pod 进行安排时,它们必须与 Fargate 配置文件匹配,才能在 Fargate 上运行。与 Fargate 配置文件不匹配的容器组可能会卡在 Pending 状态。如果存在匹配的 Fargate 配置文件,您可以删除已创建的待处理 Pods,以将它们重新安排到 Fargate。

  • Fargate 上不支持 Daemonset。如果您的应用程序需要进程守护程序,则应将该进程守护程序重新配置为在您的 Pods 中作为辅助容器运行。

  • Fargate 上不支持特权容器。

  • 在 Fargate 上运行的容器组(pod)无法在 Pod 清单中指定 HostPortHostNetwork

  • 对于 Fargate Pods,默认 nofilenproc 软限制为 1024,硬限制为 65535。

  • GPU 目前在 Fargate 上不可用。

  • 在 Fargate 上运行的 Pod 仅在私有子网上受支持(对AWS服务具有 NAT 网关访问权限,但没有到互联网网关的直接路由),因此您的集群的 VPC 必须具有可用的私有子网。对于没有出站 Internet 访问的集群,请参阅 私有集群要求

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

  • 必须为 VPC 启用 DNS 解析和 DNS 主机名。有关详细信息,请参阅查看和更新您的 VPC 的 DNS 支持

  • Amazon EKS Fargate 通过将虚拟机(VM)中的每个容器组(pod)隔离出来,从而为 Kubernetes 应用程序添加深度防御。此 VM 边界可防止在容器逃离情况下访问其他容器组使用的基于主机的资源,容器逃离是攻击容器化应用程序和获取容器外部资源访问权限的常见方法。

    使用 Amazon EKS 不会更改您在责任共担模式下的责任。您应该仔细考虑集群安全和治理控制的配置。隔离应用程序的最安全方法始终是在单独的集群中运行该程序。

  • Fargate 配置文件支持从 VPC 辅助 CIDR 块指定子网。您可能想要指定辅助 CIDR 块。这是因为子网中可用 IP 地址的数量是有限的。因此,可在集群中创建的 Pods 数量受到限制。对 Pods 使用不同的子网让您可以增加可用 IP 地址的数量。有关更多信息,请参阅向 VPC 中添加 IPv4 CIDR 块。

  • 部署到 Fargate 节点的 Pods 无法使用 Amazon EC2 实例元数据服务(IMDS)。如果您在 Fargate 部署了需要 IAM 凭证的 Pods,请使用 服务账户的 IAM 角色 将它们分配到您的 Pods。如果您的 Pods 需要通过 IMDS 访问其他可用信息,则必须将此信息硬编码到 Pod 规范中。这包括 Pod 部署到的 AWS 区域 或可用区。

  • 您不能将 Fargate Pods 部署到 AWS Outposts、AWS Wavelength 或 AWS Local Zones。

  • Amazon EKS 必须定期修补 Fargate Pods 来确保它们的安全。我们以减少影响的方式尝试更新,但是有时候,如果没有成功驱逐 Pods,必须删除它们。您可以采取一些措施来尽量减少中断。有关更多信息,请参阅Fargate 操作系统修补

  • 适用于 Amazon EKS 的 Amazon VPC CNI 插件安装在 Fargate 节点上。您不可以将 备选的兼容 CNI 插件 与 Fargate 节点一起使用。

  • 在 Fargate 上运行的 Pod 会自动挂载 Amazon EFS 文件系统。您不能将动态持久性卷预置与 Fargate 节点结合使用,但可以使用静态预置。

  • 您无法将 Amazon EBS 卷挂载到 Fargate Pods。

  • 您可以在 Fargate 节点上运行 Amazon EBS CSI 控制器,但要在 Amazon EBS CSI 节点 DaemonSet 只能在 Amazon EC2 实例上运行。

  • Kubernetes Job 被标记为 CompletedFailed 后,Job 创建的 Pods 通常会继续存在。此行为允许您查看日志和结果,但在使用 Fargate 的情况下,如果您过后不清理 Job,则将会产生费用。

    要在 Job 完成或失败后自动删除相关的 Pods,您可以使用生存时间(TTL)控制器指定时间段。以下示例显示了在 Job 清单中指定 .spec.ttlSecondsAfterFinished

    apiVersion: batch/v1 kind: Job metadata: name: busybox spec: template: spec: containers: - name: busybox image: busybox command: ["/bin/sh", "-c", "sleep 10"] restartPolicy: Never ttlSecondsAfterFinished: 60 # <-- TTL controller