configmap を外部ファイルにリンクするにはどうすればよいですか?

configmap を外部ファイルにリンクするにはどうすればよいですか?

これにより、外部ファイルにリンクされた configmap を作成できます。

kubectl create configmap database-config --from-file=database.properties

しかし、yaml を編集すると、ファイルの完全な内容がそこにダンプされていることが示されます。

プロパティ ファイルを configmap yaml と同じフォルダーに保存し、フォルダーにすべての yaml を適用できるように、yaml 内のファイルを指定する方法はありますか。

kubectl apply -f target_folder\

提案してください。

答え1

configmap

ConfigMap は、機密性のないデータをキーと値のペアで保存するために使用される API オブジェクトです。Pod は、ConfigMap を環境変数、コマンドライン引数、またはボリューム内の構成ファイルとして使用できます。

ConfigMap を使用すると、環境固有の構成をコンテナ イメージから切り離すことができるため、アプリケーションを簡単に移植できます。

つまり、configmapが外部ファイル (あなたの場合のように) または他の値から作成される場合、API サーバーはすべてが正しいかどうかを検証し、 に保存します。 これは、でのコンテキスト全体が表示されるetcd理由も説明しています。 これは、 が外部ソースではなくから読み取られるために発生します。editconfigmapconfigmapetcd

これは、大きなファイルを configmaps または secrets として保存することが推奨されない理由の 1 つでもあります。クラスターのすべてのオブジェクトが 内に保存されるため、Kubernetes クラスターのパフォーマンスに影響しますetcd

カスタマイズ

configmapこれは、同じディレクトリ内のファイルに基づいて作成/構成時に 1 つのコマンドを実行するという要件を満たす方法の 1 つです。これは、kustomization ファイルを通じて Kubernetes オブジェクトをカスタマイズするためのスタンドアロン ツールです。

このアイデアを示すために、短くて簡単な例を作成しました。

$ tree
.
├── application.properties
└── kustomization.yaml
0 directories, 2 files

$ cat kustomization.yaml 
generatorOptions:
  disableNameSuffixHash: true # this flag is used to avoid creation of new configmap, instead it will be modified when file context is changed
configMapGenerator:
- name: application-config
  files:
  - application.properties

$ cat application.properties 
listen.url=localhost:9010
client.url=some_url:3000

これをテストすると、このコマンドはレンダリングのみconfigmap の場合、まだ作成されません。

$ kubectl kustomize application.settings/
apiVersion: v1
data:
  application.properties: |
    listen.url=localhost:9010
    client.url=some_url:3000
kind: ConfigMap
metadata:
  name: application-config

最後のステップは適用するそれ:

$ kubectl apply -k application.settings/
configmap/application-config created

$ kubectl get cm
NAME                 DATA   AGE
application-config   1      23s

上記のコマンドの簡単な説明:

これらのリソースを適用するには、--kustomize または -k フラグを指定して kubectl apply を実行します。

関連情報