带 TTL 的 Kubernetes 端点
Kubernetes Endpoints with TTL
我有一个没有选择器的 Kubernetes 服务,我想通过让端点服务器 register/heartbeat 自己手动管理端点。
当我 POST 端点到 Kubernetes API 服务器时,有没有办法为端点指定 TTL,这样如果我的端点服务器终止并停止心跳,它们就会超时并自动删除?
如果不是,如果我通过 POST 将端点直接添加到底层 Etcd 而不是通过 Kubernetes API 将端点添加到注册表是否合理,或者这会导致其他有问题吗?
端点 API 对象中没有内置 TTL 或心跳。你真的不想直接写到 etcd ……那最终会咬你一口
您无需修改 kubernetes 即可执行此操作。
这是你自己做的方法。
- 为您希望拥有 TTL 的每个对象添加注释。注释可以说明它何时应该过期。您可以选择此注释的名称和格式。
- 每次更新对象时更新注释。
- 运行 重复列出给定类型的所有对象并删除需要过期的对象的另一个进程。
以下是针对端点执行此操作的特定命令。
向端点添加注解,并在一分钟后过期:
#!/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 并使用复制控制器,它将永远 运行。
我有一个没有选择器的 Kubernetes 服务,我想通过让端点服务器 register/heartbeat 自己手动管理端点。
当我 POST 端点到 Kubernetes API 服务器时,有没有办法为端点指定 TTL,这样如果我的端点服务器终止并停止心跳,它们就会超时并自动删除?
如果不是,如果我通过 POST 将端点直接添加到底层 Etcd 而不是通过 Kubernetes API 将端点添加到注册表是否合理,或者这会导致其他有问题吗?
端点 API 对象中没有内置 TTL 或心跳。你真的不想直接写到 etcd ……那最终会咬你一口
您无需修改 kubernetes 即可执行此操作。
这是你自己做的方法。
- 为您希望拥有 TTL 的每个对象添加注释。注释可以说明它何时应该过期。您可以选择此注释的名称和格式。
- 每次更新对象时更新注释。
- 运行 重复列出给定类型的所有对象并删除需要过期的对象的另一个进程。
以下是针对端点执行此操作的特定命令。
向端点添加注解,并在一分钟后过期:
#!/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 并使用复制控制器,它将永远 运行。