RightSizing

RightSizing是调整分配给 pod 的资源以匹配其实际资源使用情况的过程。这可以帮助优化资源利用率、降低成本和提高应用程序性能。Karpenter 通过根据节点池中的实例要求和 pod spec中的资源请求来创建实例,从而提供了对RightSizing的支持。当 Karpenter 对我们的工作负载需求有准确信息时,它能够启动最适合我们的工作负载的节点。

部署应用

重新部署应用, 在NodePool spec中指定了以下内容:

  1. 容器资源请求为"1” CPU 和"1Gi” 内存。
  2. 我们还将副本数更改为 8
mkdir ~/environment/karpenter
cd ~/environment/karpenter
cat <<EoF> basic-rightsizing.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: inflate
spec:
  replicas: 8
  selector:
    matchLabels:
      app: inflate
  template:
    metadata:
      labels:
        app: inflate
    spec:
      terminationGracePeriodSeconds: 0
      containers:
        - name: inflate
          image: public.ecr.aws/eks-distro/kubernetes/pause:3.7
          resources:
            requests:
              memory: 1Gi
              cpu: 1
      nodeSelector:
        eks-immersion-team: my-team
EoF

kubectl apply -f basic-rightsizing.yaml
deployment.apps/inflate configured

检查 Karpenter 的日志(我们应该在 karpenter 控制器 pod 日志中看到此日志)。

kubectl -n karpenter logs -l app.kubernetes.io/name=karpenter
  • Karpenter 日志显示,它查找了 c3.2xlarge, c4.2xlarge, c5.2xlarge, c5a.2xlarge, c5ad.2xlarge 和其他 43 种类型的实例,以容纳 {“cpu”:“7150m”,“memory”:“7Gi”,“pods”:“9”}
  • 并从 c1.medium, c3.large, c4.large, c5.large, c5a.large 和其他 45 种类型的实例中选择,以容纳 {“cpu”:“1150m”,“memory”:“1Gi”,“pods”:“3”}
  • 然后它从这些 c6 实例 中选择,以容纳我们请求的 8 个 pod,每个 pod 都有 1 个 CPU 和 1Gi 内存,并选择了合适大小的实例,即"c6a.2xlarge"和"c6a.large”
  • Karpenter 还比较了价格,并找到了最合适的合理调整和价格。

image-20240803170418309

有 7 个 pod 落在一个 c6a.2xlarge 实例(8 vCPU 和 16GIB)上,另一个 pod 落在另一个 c6a.large 实例(2 vCPU 和 4GIB)上。

image-20240803170708748