我有一个没有选择器的Kubernetes服务,我想通过让端点服务器自己注册/心跳来手动管理端点。
当我将端点发送到Kubernetes API服务器时,有没有办法为端点指定TTL,以便它们会超时并在我的端点服务器终止并停止心跳时自动删除?
如果没有,如果我通过直接POST到底层的Etcd而不是通过Kubernetes API将端点添加到注册表是否合理,还是会导致其他问题?
答案 0 :(得分:3)
您无需修改kubernetes来执行此操作。
以下是如何自己动手。
以下是为端点执行此操作的特定命令。
向端点添加注释,从现在起一分钟到期:
#!/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,并且使用复制控制器,它将永远运行。
答案 1 :(得分:0)
端点API对象中没有内置TTL或心跳。你真的不想直接写给etcd但是......最终会咬你的