K3s部署无法识别LivenessProbe与ReadinessProbe问题求助
问题原因及解决办法
这个报错和探针语法变更完全无关,核心问题是你YAML里的探针字段放错位置了——livenessProbe和readinessProbe是容器专属配置,必须嵌套在spec.template.spec.containers数组里的具体容器定义下,不能直接丢在spec.template.spec层级。
给你看个正确的写法示例:
apiVersion: apps/v1 kind: Deployment metadata: name: demo-deployment spec: replicas: 1 selector: matchLabels: app: demo template: metadata: labels: app: demo spec: containers: - name: demo-container image: nginx:alpine # 探针必须写在容器定义内部 livenessProbe: httpGet: path: / port: 80 initialDelaySeconds: 5 readinessProbe: httpGet: path: / port: 80 initialDelaySeconds: 3
你现在的YAML应该是把探针直接放在了容器配置外面,比如这种错误写法:
# 错误示例,会触发你看到的报错 spec: template: spec: livenessProbe: # 位置错了,要移到containers里的容器下面 ... readinessProbe: # 位置错了 ... containers: - name: demo-container image: nginx:alpine
至于为什么几个月前能跑,大概率是当时的K3s版本对字段校验没那么严格(比如旧版本允许忽略未知字段),或者你之前的YAML其实是正确的,这次部署时不小心改了字段位置。但从Kubernetes的API规范来说,这两个探针的位置要求从始至终都没变过,根本没有什么重大语法变更。
内容的提问来源于stack exchange,提问作者Johnney
相关产品推荐
相关产品推荐

