你不需要修改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
分離艙是一個運行上述腳本的好地方。它可以自動訪問API和複製控制器,它將永遠運行。
我喜歡你的解決方法@EricTune,但它不能夠使用Etcd已經支持的TTL機制似乎是一種恥辱。所需要的只是讓Kubernetes API服務器在請求中接受TTL,並簡單地將它傳遞給Etcd,並且我們不需要按照您的建議運行我們自己的守護進程。任何想法在哪裏問/請求類似的東西?似乎這不是正確的地方。 –
Kubernetes開發人員希望能夠在將來爲多種存儲層提供支持。例如,BoltDB已經被考慮,並且Hashicorp領事已經被要求。 BoltDB沒有TTL,我認爲Consul也沒有。如果他們公開特定於etcd的功能,以後很難支持備用存儲層。 –