bash - kubectl apply-ing时替换所有文件中的环境变量

标签 bash kubernetes kubectl envsubst

假设我们在文件夹 kubernetes 中有许多 Kubernetes 配置文件。我们想全部应用它们:

kubectl apply -f kubernetes -n MyNamespace
其中一些文件包含需要首先替换的环境变量(在 Kubernetes 中没有 templating)。例如,一些部署 yaml 包含以下内容:
image: myregistry.com/myrepo:$TAG
对于单个 yaml 文件,这可以是 done例如通过像这样使用 envsubst:
envsubst < deploy.yml | kubectl apply -f -
对所有 yaml 文件进行这些替换的最佳方法是什么?
(循环文件夹中的文件并调用 envsubst 如上所述是一种选择,但我怀疑最好将整个文件夹传递给 kubectl 而不是单个文件)

最佳答案

您可以让 envsubst从标准输入读取多个文件的内容,就像读取一个文件 < deploy.yaml要么使用进程替换 <(..) bash 的特点或使用普通的 ol' cat

envsubst < <(cat *.yaml) | kubectl apply -f -
或者
cat *.yaml | envsubst - | kubectl apply -f -

关于bash - kubectl apply-ing时替换所有文件中的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65705619/

相关文章:

kubernetes - 在 GKE 的私有(private)集群上使用 Linkerd 时出现 "unable to retrieve the complete list of server APIs: tap.linkerd.io/v1alpha1"错误

kubernetes - kubectl 等到 pod 消失(终止)

bash - 如何使用 bash 在 CURL 请求中使用变量?

amazon-web-services - 如何优雅地排空 EKS 中的节点?

linux - 允许 ssh 传入/传出并阻止除特定端口外的所有传出

macos - 无法执行 k8s 模块

c# - AKS集群Pod Kube配置位置

kubernetes - 在哪里可以找到 kubernetes 集群中 pod/容器的权威资源限制?

linux - bash 根据另一个命令的输出替换部分命令的输出

"does not begin with"的正则表达式