【问题标题】:Kubernetes Endpoints with TTL具有 TTL 的 Kubernetes 端点
【发布时间】:2016-01-20 08:29:45
【问题描述】:

我有一个没有选择器的 Kubernetes 服务,我想通过让端点服务器自己注册/检测信号来手动管理端点。

当我将端点 POST 到 Kubernetes API 服务器时,有没有办法为端点指定 TTL,以便在我的端点服务器终止并停止心跳时它们将超时并自动删除?

如果不是,如果我通过直接 POST 到底层 Etcd 而不是通过 Kubernetes API 将 Endpoints 添加到注册表中是否合理,还是会导致其他问题?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    您无需修改​​ Kubernetes 即可执行此操作。

    这里是如何自己做。

    1. 为您希望拥有 TTL 的每个对象添加注释。注释可以说明何时到期。您可以选择此注释的名称和格式。
    2. 每次更新对象时更新注释。
    3. 运行另一个进程,重复列出给定类型的所有对象并删除需要过期的对象。

    以下是针对端点执行此操作的特定命令。

    将注解添加到过期时间为一分钟后的端点:

       #!/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
    

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

    【讨论】:

    【解决方案2】:

    端点 API 对象中没有内置 TTL 或心跳。你真的不想直接写到 etcd ……这最终会咬你的

    【讨论】:

      猜你喜欢
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多