json - kubectl apply 错误:将 YAML 转换为 JSON 时出错
问题描述
之后收到此错误消息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)}
我试过放在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 }}
我只是希望能够在配置更改时更新我的 pod。我应该helm upgrade
在某个地方,但我不确定要给出什么论据。
解决方案
您不能将{{ ... }}
语法与kubectl apply
. 该语法通常与Helm包管理器匹配。在不知道应用模板语法的情况下,{ ... }
看起来像 YAML 映射语法,并且解析器会感到困惑。
annotations:
一般属于under metadata:
,next to labels:
。 Kubernetes文档中的注释可能有助于阅读。
我只想能够在不重新启动它们的情况下更新我的 pod。
Kubernetes 不是这样工作的,只有一些非常有限的例外。
如果您只谈论配置数据而不是代码,您可以将 ConfigMap 数据添加到 Volume;那么如果 ConfigMap 发生变化,pod 看到的文件也会发生变化。您遇到的语法实际上是在 ConfigMap 数据更改时强制重新启动 pod 的解决方法:它与您尝试的相反,您应该删除这两行。
对于例行代码更改,标准路径是构建并推送新的 Docker 镜像,然后使用新的镜像标签更新您的部署对象。(它必须是与之前不同的图像标签字符串,仅推送具有相同标签的新图像是不够的。)然后Kubernetes会自动使用新图像启动新的Pod,一旦启动,关闭Pod与旧图像。在某些情况下,Kubernetes 甚至可以自行删除和重新创建 Pod。
推荐阅读
- javascript - frappe-gantt 在我的 Angular 10 应用程序中不起作用
- c - 复制字符串中的第一个字母更改为@
- typescript - 打字稿字符串拆分删除引号
- android-source - 如何制作指定JDK版本的AOSP模块?
- javascript - ReactJS 和 Redux - TypeError:state.reduxCart 不可迭代
- java - Young GC发生时,ext root扫描需要很长时间。可能的原因是什么?
- javascript - 你好,我的目标是,当我点击“创建复选框”按钮时,它会自动创建一个带有 ID 的复选框,而不使用输入类型文本
- jquery - 使用动画的 jQuery 滚动到 div 在 safari 中无法正常工作
- android - 如何通过特定端口路由我的 android 应用程序的互联网数据?
- android - 类在firebase消息颤动上找不到异常