2016-01-11 70 views
0

跟進Kubernetes Endpoints with TTL增加TTL來kubernetes API服務器

是否有計劃的TTL在將來添加到Kubernetes API資源?

如果我想嘗試嘗試向API自己添加可選的TTL,有人可以幫助我開始,將代碼或文檔中的正確位置指向我應該開始查找我需要的東西改變?

我假設底層存儲接口有TTL,我需要改變的是API服務器如何傳遞一個TTL,然後轉發到存儲。這聽起來是對的嗎?

回答

0

你不需要修改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 

分離艙是一個運行上述腳本的好地方。它可以自動訪問API和複製控制器,它將永遠運行。

+0

我喜歡你的解決方法@EricTune,但它不能夠使用Etcd已經支持的TTL機制似乎是一種恥辱。所需要的只是讓Kubernetes API服務器在請求中接受TTL,並簡單地將它傳遞給Etcd,並且我們不需要按照您的建議運行我們自己的守護進程。任何想法在哪裏問/請求類似的東西?似乎這不是正確的地方。 –

+0

Kubernetes開發人員希望能夠在將來爲多種存儲層提供支持。例如,BoltDB已經被考慮,並且Hashicorp領事已經被要求。 BoltDB沒有TTL,我認爲Consul也沒有。如果他們公開特定於etcd的功能,以後很難支持備用存儲層。 –