我在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 -