2016-06-21 55 views
7

當更新kubernetes祕密文件時,爲了應用更改,我需要運行kubectl apply -f my-secrets.yaml。如果有一個正在運行的容器,它仍然會使用舊的祕密。爲了在正在運行的容器上應用新的祕密,我當前運行命令kubectl replace -f my-pod.yaml。 我想知道這是更新正在運行的容器密碼的最佳方式,還是我錯過了一些東西。更新kubernetes祕密不會更新正在運行的容器env vars

感謝。

回答

6

The secret docs for users這樣說:

祕密安裝自動更新 當卷已經消耗祕密之中進行更新,預計鍵最終被更新。更新時間取決於kubelet同步週期。

安裝的機密已更新。問題是什麼時候。如果更新密碼的內容並不意味着您的應用程序會自動使用它。在這種情況下,應用程序監視文件更改是相應的行爲。考慮到這一點,你現在需要做更多的工作。我現在想到的一種方法是運行一個scheduled job in Kubernetes,與Kubernetes API對話,以啓動您的deployment的新推出。這樣,你可以在理論上實現你想要更新你的祕密。它有點不雅,但這是我目前唯一想到的方法。我仍然需要更多地瞭解Kubernetes概念。所以請耐心等待。

+0

監視祕密的另一種方法是使用'inotify'並觀察它所在的目錄。 –

7

按照設計,Kubernetes不會將Secret更新推送到正在運行的Pod上。如果您想更新Pod的Secret值,則必須銷燬並重新創建Pod。你可以閱讀更多關於它here

+4

在http://kubernetes.io/docs/user-guide/secrets/上,在「Mounted Secrets自動更新」中,除非另有說明 - 至少我是這樣理解的。或者這是另一種情況? –

3

假設我們[在吊艙規範安裝祕密作爲mysecret]

我們可以刪除現有的祕密

kubectl delete secret mysecret 

創建相同的祕密與更新的文件運行莢mypod

kubectl create secret mysecret <updated file/s> 

那麼做

kubectl apply -f ./mypod.yaml 

檢查mypod中的祕密,它會被更新。