オーケストレーションの一部では、envsubst を使用して YAML テンプレート ファイルを目的の値で更新します。
envsubst < "${SECRET_TEMPLATE}" | kubectl apply -f -
キーワード config の値は JSON 文字列です。
data=$(jq -c . ${JSON_FILE})
これにより、YAML は次のようになります (簡潔にするためにトリミングされています)。
apiVersion: v1
kind: Secret
metadata:
name: reporting-config
type: Opaque
data:
config: {"database": "foo"}
これは、以前のバージョンの Kube では機能していたようです。1.8 と言いたいです。とにかく、私たちは 1.15 を実行していますが、kubectl はこれをマップ タイプとして解釈し、次のように文句を言います。
error: error validating "STDIN": error validating data: ValidationError(Secret.data.config): invalid type for io.k8s.api.core.v1.Secret.data: got "map", expected "string"; if you choose to ignore these errors, turn validation off with --validate=false
今これを行うためのトリックはありますか。私は引用やさまざまな場所で遊んだり、引用をエスケープしたり、ジャズや灘のすべてをいじりました。
* 更新 1 *
stringData を使用しても、同じエラーが発生します。
apiVersion: v1
kind: Secret
metadata:
name: monsoon-storage-reporting-config
type: Opaque
stringData:
config: {"database": "foo"}
error: error validating "STDIN": error validating data: ValidationError(Secret.stringData.config): invalid type for io.k8s.api.core.v1.Secret.stringData: got "map", expected "string"; if you choose to ignore these errors, turn validation off with --validate=false