使用kubectl的YAML占位符



我在deployment.yaml使用下面的模板

apiVersion: v1
kind: Service
metadata:
name: httpbin-diffy
labels:
app: httpbin-diffy
namespace: {{ Values.namespace.name }}

和对

使用单独的values.yaml
namespace:
name: diffy

当我运行kubectl apply -f Deployment.yaml

我得到下面的错误。

error: error parsing Deployment.yaml: error converting YAML to JSON: yaml: invalid map key: map[interface {}]interface {}{"Values.namespace.name":interface {}(nil)}

我哪里错了?

使用Go的模板语言和values.yaml是Helm的一个特性,不是Kubernetes的原生特性。如果你想创建一个模板化的deployment.yaml文件,你可以使用像sed这样的本地工具在发送到kubectl之前进行查找和替换,或者可以使用yq作为一个更能识别yaml的替换工具。

$ cat deployment.yml
apiVersion: v1
kind: Service
metadata:
name: httpbin-diffy
labels:
app: httpbin-diffy
namespace: PLACEHOLDER
$ yq '.metadata.namespace = "NAMESPACE_VALUE"' deployment.yml 
apiVersion: v1
kind: Service
metadata:
name: httpbin-diffy
labels:
app: httpbin-diffy
namespace: NAMESPACE_VALUE

该文件可以写入文件系统并应用kubectl apply -f,也可以从stdin中读取,例如

$ yq '.metadata.namespace = "NAMESPACE_VALUE"' deployment.yml | kubectl apply -f -

相关内容

  • 没有找到相关文章

最新更新