Ali*_*Ali 8 json yaml go-templates kubernetes kubernetes-helm
收到此错误消息后 kubectl apply -f .
error: error converting YAML to JSON: yaml: invalid map key: map[interface {}]interface {}{"include (print $.Template.BasePath \"/configmap.yaml\") . | sha256sum":interface {}(nil)}
Run Code Online (Sandbox Code Playgroud)
我试过放在checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
不同的地方,但我不太了解 YAML 或 JSON 来找出问题所在。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: demo
spec:
replicas: 1
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- name: demo
image: cloudnatived/demo:hello-config-env
ports:
- containerPort: 8888
env:
- name: GREETING
valueFrom:
configMapKeyRef:
name: demo-config
key: greeting
annotations:
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
Run Code Online (Sandbox Code Playgroud)
我只是希望能够在配置更改时更新我的 pod。我应该在helm upgrade
这里某个地方,但我不确定要给出什么论据。
您不能将{{ ... }}
语法与kubectl apply
. 该语法通常与Helm包管理器匹配。不知道应用模板语法,{ ... }
看起来像 YAML 映射语法,解析器会感到困惑。
annotations:
一般属于下metadata:
,旁边labels:
。 Kubernetes 文档中的注释可能很有用。
我只是希望能够在不重新启动它们的情况下更新我的 pod。
Kubernetes 不是这样工作的,只有一些非常有限的例外。
如果您只讨论配置数据而不讨论代码,则可以将 ConfigMap 数据添加到 Volume;那么如果 ConfigMap 发生变化,pod 看到的文件也会发生变化。您遇到的语法实际上是一种在 ConfigMap 数据更改时强制 pod 重新启动的解决方法:它与您要尝试的相反,您应该删除这两行。
对于例行代码更改,标准路径是构建并推送新的 Docker 镜像,然后使用新的镜像标签更新您的部署对象。(它必须是与之前不同的图像标签字符串,仅仅推送具有相同标签的新图像是不够的。)然后 Kubernetes 将自动使用新图像启动新的 pod,一旦这些启动,关闭 pod与旧图像。在某些情况下,Kubernetes 甚至可以自行删除和重新创建 Pod。
你在使用头盔吗?尝试将其移至annotations
顶级元数据下方:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: demo
annotations:
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
spec:
replicas: 1
...
Run Code Online (Sandbox Code Playgroud)
在任何情况下,通常需要(滚动)重新启动来获取某些更改,除非应用程序可以检测到外部配置的更改并热重载它们。
归档时间: |
|
查看次数: |
13717 次 |
最近记录: |