我尝试在 Kubernetes 集群中部署带有 MySQL 数据库的 producer-service
应用程序。当我尝试部署 producer app
时,抛出了以下验证错误。
error: error validating "producer-deployment.yml": error validating data: apiVersion not set; if you choose to ignore these errors, turn validation off with --validate=false
producer-deployment.yml
apiVerion: v1
kind: Service
metadata:
name: producer-app
labels:
name: producer-app
spec:
ports:
-nodePort: 30163
port: 9090
targetPort: 9090
protocol: TCP
selector:
app: producer-app
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: producer-app
spec:
selector:
matchLabels:
app: producer-app
replicas: 3
template:
metadata:
labels:
app: producer-app
spec:
containers:
- name: producer
image: producer:1.0
ports:
- containerPort: 9090
env:
- name: DB_HOST
valueFrom:
configMapKeyRef:
name: db-config
key: host
- name: DB_NAME
valueFrom:
configMapKeyRef:
name: db-config
key: name
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: db-user
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-user
key: password
我试图在配置文件中找到错误或拼写错误,但仍然无法找到。 producer-deployment.yml
文件有什么问题
答案 0 :(得分:2)
多个问题:
在 apiVersion: v1
中应该是 apiVerion: v1
而不是 Service
错误的 Spec.ports
格式 Service
。由于 nodePort
、port
、targetPort
和 protocol
作为列表位于 ports
下,但您的编队错误。
您的服务 yaml 应如下所示:
apiVersion: v1
kind: Service
metadata:
name: producer-app
labels:
name: producer-app
spec:
ports:
- nodePort: 30163
port: 9090
targetPort: 9090
protocol: TCP
selector:
app: producer-app
type: NodePort
所以你的整体 yaml
应该是:
apiVersion: v1
kind: Service
metadata:
name: producer-app
labels:
name: producer-app
spec:
ports:
- nodePort: 30163
port: 9090
targetPort: 9090
protocol: TCP
selector:
app: producer-app
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: producer-app
spec:
selector:
matchLabels:
app: producer-app
replicas: 3
template:
metadata:
labels:
app: producer-app
spec:
containers:
- name: producer
image: producer:1.0
ports:
- containerPort: 9090
env:
- name: DB_HOST
valueFrom:
configMapKeyRef:
name: db-config
key: host
- name: DB_NAME
valueFrom:
configMapKeyRef:
name: db-config
key: name
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: db-user
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-user
key: password
答案 1 :(得分:1)
来自
apiVerion: v1
到
apiVersion: v1
答案 2 :(得分:0)
第一行有一个错字:“apiVerion”应该是“apiVersion”。
答案 3 :(得分:0)
您的第一个错误(超过 1 个)只是将您指向应该开始调查的地方..
error validating data: apiVersion not set;
众所周知,kubernetes 中的每个对象都有自己的 apiVersion。 检查 Understanding Kubernetes Objects,尤其是 Required Fields 部分:
<块引用>在要创建的 Kubernetes 对象的 .yaml 文件中,您将 需要为以下字段设置值:
apiVersion
- 您使用的 Kubernetes API 版本
创建这个对象
kind
- 你想创建什么样的对象
metadata
- 有助于唯一识别对象的数据,包括
名称字符串、UID 和可选的命名空间
spec
- 你想要什么状态
对于对象对象规范的精确格式是不同的
每个 Kubernetes 对象,并包含特定于该对象的嵌套字段
对象。
Kubernetes API 参考可以帮助您找到 spec
格式
对于您可以使用 Kubernetes 创建的所有对象。
您可以查看Latest 1.20 API here
这些值是强制性的,没有它们您将无法创建对象。所以,下次请仔细阅读您收到的错误。