0Pricing
AWS Solutions Architect · 课时

用于无服务器 Pod 的 Fargate 配置文件

无需管理 EC2 节点即可在 Fargate 上运行 Kubernetes Pod,配置 Fargate 配置文件,并了解其命名空间限制

用于无服务器 Pod 的 Fargate 配置文件 是 CoddyKit 上的免费 AWS Solutions Architect 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AWS Solutions Architect 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AWS Solutions Architect 课程共包含 4 节课。

什么是 Fargate Profiles

AWS Fargate for EKS 让您无需预置或管理 EC2 节点即可运行 Kubernetes Pod。您不必再考虑实例类型和节点组,而是定义一个 Fargate profile,根据命名空间和可选的标签选择器,告知 EKS 哪些 Pod 应在 Fargate 上运行。AWS 会自动为每个 Pod 预置适量的计算资源,并在 Pod 停止后终止这些资源。

Fargate Profile 配置

Fargate profile 会附加到 EKS 集群,并包含一个或多个选择器——每个选择器指定一个命名空间以及可选的 Kubernetes 标签键值对。Pod 必须至少匹配一个选择器,才能被调度到 Fargate 上。该配置还会指定 Pod 执行角色(一个 IAM 角色)以及 Fargate 启动 Pod 时应使用的私有子网。

# Create a Fargate profile for the 'production' namespace
aws eks create-fargate-profile \
  --cluster-name my-cluster \
  --fargate-profile-name production-profile \
  --pod-execution-role-arn arn:aws:iam::111122223333:role/EKSFargatePodExecutionRole \
  --subnets subnet-aaa subnet-bbb \
  --selectors '[{"namespace":"production"},{"namespace":"staging","labels":{"fargate":"true"}}]'

Pod 执行角色

Pod 执行角色是一个 IAM 角色,EKS 在 Fargate 拉取容器 Image 并将 Pod 日志发送到 CloudWatch 时会使用该角色。该角色必须包含 AWS 托管策略 AmazonEKSFargatePodExecutionRolePolicy。如果没有此角色,调度到 Fargate 的 Pod 将无法启动,因为 Fargate 无法向 ECR 进行身份验证,也无法写入 CloudWatch Logs。

# Create the pod execution role trust policy
cat fargate-trust-policy.json
# {
#   "Version": "2012-10-17",
#   "Statement": [{
#     "Effect": "Allow",
#     "Principal": {"Service": "eks-fargate-pods.amazonaws.com"},
#     "Action": "sts:AssumeRole"
#   }]
# }

aws iam attach-role-policy \
  --role-name EKSFargatePodExecutionRole \
  --policy-arn arn:aws:iam::aws:policy/AmazonEKSFargatePodExecutionRolePolicy

Fargate 上的命名空间限制

Fargate 施加了重要的命名空间限制。由于 kube-proxy 等系统 Pod 在 kube-system 命名空间中运行,大多数 Fargate profiles 都不允许使用该命名空间。CoreDNS 是一个例外:AWS 提供了引导式流程,用于 Patch CoreDNS Deployment,移除 eks.amazonaws.com/compute-type: ec2 注释,使其能够在 Fargate 上运行。如果没有可用的 EC2 节点,被排除命名空间中的 Pod 将一直无法完成调度。

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

# Restart CoreDNS to apply the patch
kubectl rollout restart deployment coredns -n kube-system

Fargate Pod 资源配置

Fargate 根据 Pod 规范中定义的 CPU 和内存请求分配计算资源。它会将资源向上取整到 Fargate 支持的最接近的 vCPU/内存组合(例如从 0.25 vCPU / 0.5 GB 到 16 vCPU / 120 GB)。Pod 运行期间,您只需按每秒实际分配的资源付费。请始终设置准确的资源请求——请求过低会导致因内存不足而终止;请求过高则会增加成本。

# Pod spec with explicit resource requests and limits
apiVersion: v1
kind: Pod
metadata:
  name: api-pod
  namespace: production
spec:
  containers:
  - name: api
    image: 111122223333.dkr.ecr.us-east-1.amazonaws.com/my-api:latest
    resources:
      requests:
        cpu: '500m'
        memory: '1Gi'
      limits:
        cpu: '1'
        memory: '2Gi'

Fargate 与 EC2 节点组:权衡

Fargate 消除了节点管理工作,但也存在限制:不支持 daemonsets(因为没有可供其调度的持久节点)、不支持特权容器,并且对某些存储类型的支持有限。EC2 节点组支持 GPU、自定义内核,以及使用本地 NVMe 驱动器的有状态工作负载。一种常见模式是在同一个 EKS 集群中,将无状态服务运行在 Fargate 上,将有状态工作负载或 GPU 工作负载运行在专用 EC2 节点组上。

Fargate 网络与安全组

每个 Fargate Pod 都会获得自己的弹性网络接口(ENI),以及从您在 profile 中指定的子网分配的私有 IP。这意味着您可以使用 Security Groups for Pods 功能,为每个 Pod 应用唯一的安全组。Fargate Pod 支持所有标准的 VPC 安全组规则,因此您可以在单个 Pod 层面精细控制入站和出站流量——与共享节点级安全组相比,这是显著的安全优势。

# Assign a security group to a pod via annotation
apiVersion: v1
kind: Pod
metadata:
  name: secure-api
  namespace: production
  annotations:
    vpc.amazonaws.com/pod-eni: 'true'
spec:
  securityGroups:
    groupIds:
    - sg-0abc1234def56789a
  containers:
  - name: api
    image: 111122223333.dkr.ecr.us-east-1.amazonaws.com/secure-api:v2

Fargate 将日志发送到 CloudWatch

Fargate Pod 使用内置的 Fluent Bit 日志路由器,将日志发送到 Amazon CloudWatch Logs。您可以在 aws-observability 命名空间中创建名为 aws-logging 的 ConfigMap 来配置日志记录。Pod 执行角色必须拥有创建日志组和写入日志事件的权限。日志会按集群和命名空间归入 CloudWatch 日志组,因此无需运行单独的日志代理即可轻松集中汇总日志。

# ConfigMap to enable Fargate logging
apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-logging
  namespace: aws-observability
data:
  flb_log_cw: 'true'
  output.conf: |
    [OUTPUT]
        Name cloudwatch_logs
        Match *
        region us-east-1
        log_group_name /aws/eks/my-cluster/fargate
        log_stream_prefix fargate-
        auto_create_group true

Fargate 上的 Horizontal Pod Autoscaler

Fargate 支持 Kubernetes 的 Horizontal Pod Autoscaler(HPA)。当 HPA 扩展副本数时,Fargate 会自动预置新的微型虚拟机,您无需调整任何节点组大小。这带来了真正的无服务器自动扩展体验:HPA 控制 Pod 数量,而 Fargate 弹性地处理计算资源。您仍然需要在集群中部署 Metrics Server,以便 HPA 读取 CPU 和内存使用情况。

# Deploy Metrics Server (required for HPA)
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

# Create an HPA for a Fargate-scheduled deployment
kubectl autoscale deployment my-api \
  --namespace production \
  --cpu-percent=60 \
  --min=2 \
  --max=20

Fargate 定价模型

您需要按照消耗的 vCPU-second 和 GB-second 为 Fargate 付费,每个 Pod 的最低计费时长为 1 分钟。没有节点级成本、预留容量费用,也没有 AMI/OS Patch 成本。Fargate 的单位计算资源价格通常高于经过合理配置的 EC2 按需实例,但如果将节点管理、Patch 和扩展决策所节省的工程时间计算在内,其总拥有成本通常更低。

需要了解的 Fargate 常见限制

SAA-C03 考试中需要注意的 Fargate 主要限制包括:不支持 DaemonSet(由于没有持久节点,Pod 无法放置到每个节点上)、不支持特权容器、不支持 hostNetwork 模式;临时存储限制为每个 Pod 20 GB(通过配置可扩展到 200 GB)。Fargate 不支持使用 EBS 的持久块存储——对于 Fargate Pod 的共享持久文件存储,请使用 EFS。

# Mount EFS in a Fargate pod (EBS is NOT supported on Fargate)
apiVersion: v1
kind: Pod
metadata:
  name: efs-pod
  namespace: production
spec:
  volumes:
  - name: efs-storage
    persistentVolumeClaim:
      claimName: efs-pvc
  containers:
  - name: app
    image: my-image:latest
    volumeMounts:
    - name: efs-storage
      mountPath: /data

快速检查

请测试您对本课 AWS Solutions Architect(SAA-C03)概念的理解。

课程回顾

在本课中,您学习了:Fargate profiles 使用命名空间和标签选择器,以无服务器方式调度 Pod;Pod 执行角色授予 Fargate 拉取 Image 和写入日志的权限;以及 Fargate 不支持 DaemonSets 或 EBS——持久存储请使用 EFS。接下来我们将探索使用 VPC CNI 插件和 AWS Load Balancer Controller 的 EKS 网络。

常见问题解答

「用于无服务器 Pod 的 Fargate 配置文件」课时是免费的吗?

是的 — 「用于无服务器 Pod 的 Fargate 配置文件」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AWS Solutions Architect 课程的其余内容,请升级到 CoddyKit PRO。 AWS Solutions Architect 课程共包含 4 节课。

「用于无服务器 Pod 的 Fargate 配置文件」这节课中我会学到什么?

无需管理 EC2 节点即可在 Fargate 上运行 Kubernetes Pod,配置 Fargate 配置文件,并了解其命名空间限制 你通过在浏览器中直接运行的动手代码来练习 AWS Solutions Architect,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 AWS Solutions Architect 需要有经验吗?

无需任何先前经验。CoddyKit 上的 AWS Solutions Architect 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「用于无服务器 Pod 的 Fargate 配置文件」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 AWS Solutions Architect 课中编写并运行代码吗?

能。每节 AWS Solutions Architect 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. EKS 控制平面与工作节点
  2. 用于无服务器 Pod 的 Fargate 配置文件
  3. EKS 网络:VPC CNI 与负载均衡
  4. 服务账户的 IAM 角色(IRSA)
← 返回 AWS Solutions Architect