kubernetes AWS EKS - Dead Container清理

htzpubme  于 2023-06-05  发布在  Kubernetes
关注(0)|答案(2)|浏览(145)

我正在使用Terraform在AWS环境中创建基础设施。在众多服务中,我们还使用terraform-aws-modules/eks/aws模块创建了AWS EKS。EKS主要用于旋转动态容器以处理异步作业执行。一旦给定任务完成,容器释放资源并终止。
我注意到的是,死容器永远躺在EKS集群上。这导致太多的死容器只是坐在EKS和消耗存储。我遇到过一些提到Kubernetes有垃圾收集过程的博客,但没有一个描述如何使用Terraform或显式地为AWS EKS指定它。
因此,我正在寻找一个解决方案,这将有助于为AWS EKS上的死容器指定垃圾收集策略。如果不能通过Terraform实现,我可以使用kubectl与AWS EKS。

nimxete2

nimxete21#

这两个kubelet标志将导致节点在文件系统达到这些百分比时清理docker镜像。https://kubernetes.io/docs/concepts/architecture/garbage-collection/#container-image-lifecycle

--image-gc-high-threshold="85"
--image-gc-low-threshold="80"

但您可能还希望设置--maximum-dead-containers 1,以便运行多个(相同)映像不会留下死容器。
在EKS中,您可以将这些标志添加到EC2示例/自动缩放组的UserData部分。

#!/bin/bash 
set -o xtrace 
/etc/eks/bootstrap.sh --apiserver-endpoint ..... --kubelet-extra-args '<here>'
23c0lvtd

23c0lvtd2#

要为AWS EKS中的死容器指定垃圾收集策略,您可以使用Kubernetes原生机制而不是Terraform。Kubernetes提供了一个名为“TTL控制器”(TTL是生存时间的缩写)的功能,可以根据定义的TTL值自动对资源进行垃圾收集。
以下是如何使用kubectl为AWS EKS配置基于TTL的垃圾收集:
1.创建一个Kubernetes清单文件,例如garbage-collection.yaml,包含以下内容:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: garbage-collection
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: garbage-collection
              image: appropriate/curl
              command: ["curl", "-X", "POST", "http://localhost:10251/gc"]
          restartPolicy: OnFailure

此清单定义了每5分钟运行一次的CronJob资源,并触发对垃圾收集器端点(http://localhost:10251/gc)的POST请求。我们使用appropriate/curl图像来发出请求。
1.使用kubectl应用清单:

kubectl apply -f garbage-collection.yaml

这将在AWS EKS集群中创建CronJob,它将定期触发垃圾收集。
注意:这假设您在EKS控制平面上运行了一个集群范围的垃圾收集器。对于AWS EKS集群,垃圾收集过程也由Kubernetes管理。当容器终止时,Kubernetes会自动将它们从集群中删除。
通过使用此方法,您可以为AWS EKS集群中的死容器安排定期垃圾收集,从而帮助释放资源并管理存储消耗。
我也在GitHub上找到了这个open-source project。他们正在创建一个开源框架,用于使用Jupyter Notebooks编写Runbook。他们有many EKS actions,可用于自动执行一些与AWS EKS相关的任务。

相关问题