将TTL添加到kubernetes api服务器

时间:2016-01-11 15:41:49

标签: kubernetes

跟进Kubernetes Endpoints with TTL

是否有计划在未来将TTL添加到Kubernetes API资源中?

如果我想尝试自己尝试向API添加可选的TTL,有人可以帮我开始指向我在代码或文档中的正确位置,我应该开始寻找我需要的东西改变?

我假设底层存储的接口有TTL,我需要改变的是API服务器如何传递一个TTL然后转发到存储。听起来不错吗?

1 个答案:

答案 0 :(得分:0)

您无需修改​​kubernetes来执行此操作。

以下是如何自己动手。

  1. 为要拥有TTL的每个对象添加注释。注释可以说何时到期。您可以选择此注释的名称和格式。
  2. 每次更新对象时都会更新注释。
  3. 运行另一个进程,该进程重复列出给定类型的所有对象并删除需要过期的对象。
  4. 以下是为端点执行此操作的特定命令。

    向端点添加注释,从现在起一分钟到期:

       #!/bin/bash
       expiretime=$(date -v+60S +%s)
       kubectl annotate endpoints/somename expires-at=$expiretime
    

    列出端点的脚本,并在此之后删除带有expires-at的端点:

       #!/bin/bash
       while 1
       do 
         for NS in $(kubectl get namespaces -o name | cut -f 2 -d "/")
         do 
             for NAME in $(kubectl --namespace=$NS get endpoints -o name)
             do
                 exp=$( kubectl get --namespace $NS $NAME -o jsonpath={.metadata.annotations."expires-at"} 2> /dev/null) && \
                 [[ $exp < $(date +%s) ]] && \
                 echo "Deleting expired endpoints $NAME in $NS" && \ 
                 kubectl delete $NS $NAME
             done
         done
       done
    

    pod是运行上述脚本的好地方。它将自动访问API,并且使用复制控制器,它将永远运行。