解析hostname.yml时出错:将YAML转换为JSON时出错:YAML:第21行:找不到所需的键



我正试图在Kubernetes集群上部署一个示例应用程序,但我遇到了错误:

解析hostname.yml时出错:将YAML转换为JSON时出错:YAML:第21行:未找到所需的密钥

下面是我的hostaname.yml文件

apiVersion: apps/v1
kind: Deployment
metadata:
name: hostname-v1 
spec:
replicas: 1
selector:
matchLabels:
app: hostname
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
labels:
app: hostname
version: v1
spec:
containers:
- image: akslearning.azurecr.io/hostname:v1
imagePullPolicy: Always
name: hostname
resources: {}
restartPolicy: Always
apiVersion: v1
kind: Service
metadata:
labels:
app: hostname
name: hostname
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: hostname
sessionAffinity: None
type: LoadBalancer

请建议如何进行

以下是格式化方面的一些问题。如前所述,如果使用多个资源(DeploymentService(,则必须使用---将它们分隔开。第二件事是,YAML格式是严格的,你不能使用TABs,只有使用spacebar的白色符号才能使用正确的indent

请在下面找到已更正的YAML:

cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: hostname-v1 
spec:
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1  
selector:
matchLabels:
app: hostname
template:
metadata:
labels:
app: hostname  
version: v1
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: hostname 
resources: {}
restartPolicy: Always
---       
apiVersion: v1
kind: Service
metadata:
labels:
app: hostname
name: hostname
spec:
type: LoadBalancer
selector:
app: hostname
ports:
- port: 80
protocol: TCP
targetPort: 80
sessionAffinity: None
EOF
deployment.apps/hostname-v1 created
service/hostname created

然而,我也会在您的DeployemntYAML中添加.metadata.labels,如Kubernetes文档中所述

apiVersion: apps/v1
kind: Deployment
metadata:
name: hostname-v1 
labels:                #This line
app: hostname        #And this line
spec:
...

如果你在在线YAML to JSON converter中检查这个YAML,就像codebeautify一样,它工作得很好。

相关内容

最新更新