2016-07-06 4 views
13

私はK8S ConfigMapとSecretを使ってプロパティを管理していました。私のデザインは非常にシンプルで、git repoにプロパティファイルを保存し、Thoughtworks GOなどのビルドサーバーを使用してConfigMapsまたはSecrets(選択条件)をk8sクラスタに自動的に展開します。既存のものを削除せずにk8s ConfigMapまたはSecretを更新してください

は現在、私はそれは私が常に既存のConfigMapとシークレットを削除し、

STEP1以下のように更新するように新しいものを作成する必要があることは本当に効率的ではありませんが見つかりました:configmap FOOに

STEP2を削除kubectl:configmap FOOを作成kubectl --from-file foo.properties

上記を一歩進めて、現在の削除よりも効率的な方法がありますか?現在私がやっていることは、古いconfigmapが削除され、新しいconfigmapが作成されていない間にマウントしようとすると、これらのconfigmapsを使用するコンテナを危険にさらす可能性があります。事前

答えて

32

おかげであなたはkubectl replaceにそれをkubectl create configmapコマンドからYAMLを取得し、パイプすることができ、このように:今後の参考のため

kubectl create configmap foo --from-file foo.properties -o yaml --dry-run | kubectl replace -f - 
+0

パイプコマンドは、ように見える--dry・ランのことを考えていませんでしたを移動するための方法でありますコマンドの重要な部分! –

+1

ここに示すConfigMapsの例に加えて、この同じパターンは秘密のために働くことができます。 – rwehner

10

kubectl replaceは今、この

を達成するために非常に便利な方法です。

kubectl replace -f some_spec.yaml完全なconfigMap(または他のオブジェクト)を更新しましょう

を参照してくださいドキュメントやヘルプから貼り付けhttps://kubernetes.io/docs/user-guide/kubectl/kubectl_replace/

コピー/で直接例:

# Replace a pod using the data in pod.json. 
kubectl replace -f ./pod.json 

# Replace a pod based on the JSON passed into stdin. 
cat pod.json | kubectl replace -f - 

# Update a single-container pod's image version (tag) to v4 
kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f - 

# Force replace, delete and then re-create the resource 
kubectl replace --force -f ./pod.json 
関連する問題