web-dev-qa-db-ja.com

既存のものを削除せずにk8s ConfigMapまたはSecretを更新する

K8S ConfigMapとSecretを使用してプロパティを管理しています。私の設計は非常にシンプルで、プロパティファイルをgitリポジトリに保持し、Thoughtworks GOなどのビルドサーバーを使用して、自動的にConfigMapsまたはSecrets(選択条件に応じて)をk8sクラスターに展開します。

現在、私は既存のConfigMapとSecretを常に削除し、新しいものを作成して以下のように更新する必要があることはあまり効率的ではないことがわかりました。

  1. kubectl delete configmap foo

  2. kubectl create configmap foo --from-file foo.properties

上記の手順を1つ削除して、現在の手順を削除するよりも効率的な、素敵で簡単な方法はありますか?古いconfigmapが削除され、新しいconfigmapが作成されていないときにマウントしようとすると、これらのconfigmapを使用するコンテナーが危険にさらされる可能性があります。

前もって感謝します。

54
James Jiang

次のように、kubectl create configmapコマンドからyamlを取得し、kubectl replaceにパイプすることができます。

kubectl create configmap foo --from-file foo.properties -o yaml --dry-run | kubectl replace -f -
102
Jordan Liggitt

将来の参照のために、kubectl replaceはこれを実現する非常に便利な方法になりました

kubectl replace -f some_spec.yaml configMap(または他のオブジェクト)全体を更新できます

ドキュメントと例を直接参照してください here

ヘルプからコピー/貼り付け:

# 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
22

configMapの小さな変更には、editを使用します

kubectl edit configmap <cfg-name>

これにより、viエディターでconfigMapが開きます。変更を加えて保存します。

9
deepdive