web-dev-qa-db-ja.com

Kubernetesシークレットを更新しても、実行中のコンテナー環境変数は更新されません

現在、kubernetesシークレットファイルを更新する場合、変更を適用するには、kubectl apply -f my-secrets.yaml。実行中のコンテナがあった場合、古いシークレットを使用しています。実行中のコンテナに新しいシークレットを適用するために、現在コマンドkubectl replace -f my-pod.yaml。これが実行中のコンテナシークレットを更新するための最良の方法であるか、または何かが足りないのではないかと思っていました。

ありがとう。

13
OmriToptix

ユーザーの秘密文書 はこう言っています:

マウントされたシークレットは自動的に更新されますボリュームですでに消費されているシークレットが更新されると、最終的に予測されるキーも更新されます。更新時間は、kubeletの同期期間によって異なります。

マウントされたシークレットが更新されます。問題はいつですか。シークレットのコンテンツが更新されても、アプリケーションがそれを自動的に消費するわけではありません。このシナリオでファイルの変更を監視し、それに応じて動作するのは、アプリケーションの仕事です。これを念頭に置いて、現在はもう少し作業が必要です。私が今考えている1つの方法は、 Kubernetesでスケジュールされたジョブを実行することです Kubernetes APIと通信して、 展開 。そうすれば、理論的には秘密を更新したいものを達成できます。それはどういうわけかエレガントではありませんが、これが現時点で私が念頭に置いている唯一の方法です。 Kubernetesの概念については、自分自身でさらに確認する必要があります。だから私と一緒に耐えてください。

14
xh3b4sd

ポッドmypodを実行していると仮定する[ポッド仕様でmysecretとしてシークレットをマウント]

既存のシークレットを削除できます

kubectl delete secret mysecret

更新されたファイルで同じシークレットを再作成します

kubectl create secret mysecret <updated file/s>

それから

kubectl apply -f ./mypod.yaml

mypod内の秘密を確認すると、更新されます。

9
sangeeta maurya

K8sのバージョン> v1.15の場合:kubectl rollout restart deployment $deploymentname:これにより、ダウンタイムを発生させることなくポッドが段階的に再起動されます。

2
victortv

誰か(私のような)が、これらの秘密を使用しているローリングアップデートポッドを強制する場合。これから issue 、トリックはコンテナー内のEnv変数を更新することです、そしてk8sは自動的にポッド全体をローリング更新します

kubectl patch deployment mydeployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"mycontainer","env":[{"name":"RESTART_","value":"'$(date +%s)'"}]}]}}}}'
1
windyzboy

設計上、Kubernetesは実行中のポッドにシークレットの更新をプッシュしません。ポッドのシークレット値を更新する場合は、ポッドを破棄して再作成する必要があります。それについてもっと読むことができます こちら

0
Thomas Mullaly