AWS EKS 计算资源自动扩缩之Fargate[AWS 海外区]

Fargate是AWS的无服务器计算引擎 。在EKS中使用Fargate,您无需管理服务器,它开箱即用,我们只需定义Pod所需的CPU和内存即可让pod在Fargate上运行起来。前面我们学习过AWS EKS 计算资源自动扩缩之Karpenter[AWS 海外区],当您选择EC2作为EKS的工作节点时,您需要自己创建和管理一个EC2节点组,这需要你承担更多管理责任,带来了运维负担。相比下Fargate简单,精确匹配了pod的资源需求,减少了资源浪费。

Fargate最大的优点在其开箱即用的免运维简单性,尽量按需匹配pod所需资源减少资源浪费从而提升了性价比(例如4C8G的EC2上运行了一个4C4G的Java程序就导致了EC2浪费了4G的内存),最后是其底层架构做了优化,pod弹性就绪的速度更快。

本文基于上一篇文章AWS EKS 创建K8S集群[AWS 海外区]中创建的AWS EKS集群进行说明。

设置Fargate

AWS IAM Role设置

Fargate正常运行需要有Amazon EKS Pod execution IAM role ,详情可以参考Amazon EKS Fod execution IAM role

编辑policy内容,并保存为pod-execution-role-trust-policy.json,其中region-code,aws-account,your-eks-cluster-name需要填你真实的内容

bash 复制代码
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Condition": {
         "ArnLike": {
            "aws:SourceArn": "arn:aws:eks:region-code:aws-account:fargateprofile/your-eks-cluster-name/*"
         }
      },
      "Principal": {
        "Service": "eks-fargate-pods.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

创建role,名称可以自定义,我设置为AmazonEKSFargatePodExecutionRole

bash 复制代码
aws iam create-role --role-name AmazonEKSFargatePodExecutionRole  --assume-role-policy-document file://"pod-execution-role-trust-policy.json"

AmazonEKSFargatePodExecutionRoleAmazonEKSFargatePodExecutionRolePolicy关联

bash 复制代码
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSFargatePodExecutionRolePolicy --role-name AmazonEKSFargatePodExecutionRole

如果你习惯AWS控制台可视化操作,上述步骤也可以直接在AWS控制台完成,如下图是我创建好的role

创建fargate profile

填写自己的fargate profile名称,这里我简单的写成fargate-profile,并选定刚才创建的AmazonEKSFargatePodExecutionRole

为这个profie填入合适的namespace设置,详情见AWS Fargate profile

例如下面我设置的pod选择器规则为prod-*,如果pod部署在以prod-开头的namespace中,并且标签选择器为infrastructure=fargate时,那么pod就优先运行在fargate上,而不是默认的EC2上。

检查上述设置后直接创建profile,创建需要几分钟

创建完成

测试fargate的使用

这里是一个简单的nginx deployment样例,请注意它的namesapce必须要和fargate proflie中的namespace设置相匹配 ,匹配规则为AWS Fargate profile

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: eks-sample-linux-deployment
  # 必须和fargate proflie中的namespace设置相匹配,https://docs.aws.amazon.com/eks/latest/userguide/fargate-profile.html
  namespace: prod-fargate
  labels:
    app: eks-sample-linux-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: eks-sample-linux-app
  template:
    metadata:
      labels:
        app: eks-sample-linux-app
        # 可选,必须和fargate proflie中的Match labels相匹配,https://docs.aws.amazon.com/eks/latest/userguide/fargate-profile.html
        infrastructure: fargate
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: kubernetes.io/arch
                    operator: In
                    values:
                      - amd64
                      - arm64
      containers:
        - name: nginx
          image: public.ecr.aws/nginx/nginx:1.23
          ports:
            - name: http
              containerPort: 80
          imagePullPolicy: IfNotPresent
      nodeSelector:
        kubernetes.io/os: linux

部署上面的deployment:

bash 复制代码
kubectl create ns prod-fargate
kubectl apply -f nginx-deployment.yml

等待片刻我们会发现fargate作为底层计算资源已经运行了正确的nginx

通过kubectl进行部署和查询

通过aws控制台进行查询

fargate和ec2 node group不一样,fargate只需要你设置好pod的HPA后,pod就可以自动的水平扩展并及时获取对应的fargate计算资源,不再需要autosacler等插件。

关于fargate详情请看:

相关推荐
代码与野兽3 分钟前
AI交易,怎么让LLM自己挑选数据源?
前端·javascript·后端
天天摸鱼的java工程师19 分钟前
JDK 25 到底更新了什么?这篇全景式解读带你全面掌握
java·后端
非鱼feiyu24 分钟前
自关联数据表查询优化实践:以 Django + 递归 CTE 构建树结构为例
数据库·后端·django
零日失眠者30 分钟前
这5个Python库一旦掌握就离不开
后端·python
幌才_loong33 分钟前
.NET8 × Redis 实战宝典:从配置到落地,搞定高并发缓存就这篇!
后端·.net
用户83562907805136 分钟前
如何使用 Python 从 Word 文档中批量提取表格数据
后端·python
l***37091 小时前
spring 跨域CORS Filter
java·后端·spring
aiopencode1 小时前
APP 公钥与 MD5 信息在工程中的价值 一次签名排查过程带来的经验总结
后端
ServBay2 小时前
Django 6.0 发布,新增原生任务队列与 CSP 支持
后端·python·django
用户2190326527352 小时前
Spring Boot 4.0 整合 RabbitMQ 注解方式使用指南
后端