具有TTL的Kubernetes端点

具有TTL的Kubernetes端点,kubernetes,Kubernetes,我有一个没有选择器的Kubernetes服务,我希望通过让端点服务器自己注册/心跳来手动管理端点 当我将端点发布到Kubernetes API服务器时,是否有办法为它们指定一个TTL,这样当我的端点服务器终止并停止心跳时,它们将超时并自动删除 如果不是,我是否可以通过直接发布到基础Etcd而不是通过Kubernetes API将端点添加到注册表中,或者这会导致其他问题?端点API对象中没有内置TTL或心跳信号。不过,您确实不想直接写入etcd…这最终会让您感到痛苦端点API对象中没有内置TTL或

我有一个没有选择器的Kubernetes服务,我希望通过让端点服务器自己注册/心跳来手动管理端点

当我将端点发布到Kubernetes API服务器时,是否有办法为它们指定一个TTL,这样当我的端点服务器终止并停止心跳时,它们将超时并自动删除


如果不是,我是否可以通过直接发布到基础Etcd而不是通过Kubernetes API将端点添加到注册表中,或者这会导致其他问题?

端点API对象中没有内置TTL或心跳信号。不过,您确实不想直接写入etcd…这最终会让您感到痛苦

端点API对象中没有内置TTL或心跳信号。不过,你真的不想直接写入etcd…这最终会让你感到痛苦

你不需要修改kubernetes来完成这项工作

下面是你自己怎么做的

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

    向端点添加注释,从现在起过期时间为一分钟:

       #!/bin/bash
       expiretime=$(date -v+60S +%s)
       kubectl annotate endpoints/somename expires-at=$expiretime
    
    脚本以列出端点,并删除在之后过期的端点:

       #!/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
    
    #/bin/bash
    而1
    做
    对于以美元表示的NS(kubectl获取名称空间-o name | cut-f 2-d/)
    做
    对于$中的名称(kubectl--namespace=$NS get endpoints-o NAME)
    做
    exp=$(kubectl-get--namespace$NS$NAME-o jsonpath={.metadata.annotations.”在“}2>/dev/null”过期)&&\
    [$exp<$(日期+%s)]和\
    echo“删除$NS中的过期端点$NAME”&&&\
    kubectl删除$NS$NAME
    完成
    完成
    完成
    

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

    您无需修改kubernetes即可完成此操作

    下面是你自己怎么做的

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

    向端点添加注释,从现在起过期时间为一分钟:

       #!/bin/bash
       expiretime=$(date -v+60S +%s)
       kubectl annotate endpoints/somename expires-at=$expiretime
    
    脚本以列出端点,并删除在之后过期的端点:

       #!/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
    
    #/bin/bash
    而1
    做
    对于以美元表示的NS(kubectl获取名称空间-o name | cut-f 2-d/)
    做
    对于$中的名称(kubectl--namespace=$NS get endpoints-o NAME)
    做
    exp=$(kubectl-get--namespace$NS$NAME-o jsonpath={.metadata.annotations.”在“}2>/dev/null”过期)&&\
    [$exp<$(日期+%s)]和\
    echo“删除$NS中的过期端点$NAME”&&&\
    kubectl删除$NS$NAME
    完成
    完成
    完成
    
    pod是运行上述脚本的好地方。它将自动访问API,使用复制控制器,它将永远运行。

    也将此发布到也将此发布到