#json #kubernetes #yaml
#json #кубернетес #yaml #kubernetes
Вопрос:
У меня есть файл YAML, который содержит развертывание и обслуживание нескольких ресурсов.
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: petclinic
name: petclinic
spec:
replicas: 1
selector:
matchLabels:
app: petclinic
strategy: {}
template:
metadata:
labels:
app: petclinic
spec:
containers:
- image: arey/springboot-petclinic
name: springboot-petclinic
resources: {}
ports:
- containerPort: 8080
status: {}
---
apiVersion: v1
kind: Service
metadata:
name: petclinic
spec:
type: LoadBalancer
selector:
app: petclinic
ports:
- port: 8080
targetPort: 8080
protocol: TCP
name: http
Я создаю аналогичный файл в формате JSON. Мне удалось создать ресурс развертывания с помощью JSON и успешно развернуть, но когда я пытаюсь включить ресурс службы, это не удается. Буду очень признателен за любую помощь в том, где я ошибаюсь. Вот приведенный ниже фрагмент для JSON.
{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": {
"creationTimestamp": null,
"labels": {
"app": "petclinic"
},
"name": "petclinic"
},
"spec": {
"replicas": 2,
"selector": {
"matchLabels": {
"app": "petclinic"
}
},
"strategy": {},
"template": {
"metadata": {
"labels": {
"app": "petclinic"
}
},
"spec": {
"containers": [
{
"image": "arey/springboot-petclinic",
"name": "springboot-petclinic",
"resources": {},
"ports": [
{
"containerPort": 8080
}
]
}
]
}
}
},
"status": {}
}
{
"apiVersion": "v1",
"kind": "Service",
"metadata": {
"name": "petclinic"
},
"spec": {
"type": "LoadBalancer",
"selector": {
"app": "petclinic"
},
"ports": [
{
"port": 8080,
"targetPort": 8080,
"protocol": "TCP",
"name": "http"
]
}
}
}
Ответ №1:
В вашем сервисном ресурсе имеется синтаксическая ошибка (закрывающая скобка массива в ports
). Это должно быть:
{
"apiVersion": "v1",
"kind": "Service",
"metadata": {
"name": "petclinic"
},
"spec": {
"type": "LoadBalancer",
"selector": {
"app": "petclinic"
},
"ports": [
{
"port": 8080,
"targetPort": 8080,
"protocol": "TCP",
"name": "http"
}
]
}
}
Чтобы сделать файл допустимым файлом JSON, вы можете поместить определения в List
ресурс:
{
"apiVersion": "v1",
"kind": "List",
"items": [
{
"apiVersion": "v1",
"kind": "Deployment",
...
},
{
"apiVersion": "v1",
"kind": "Service",
...
}
]
}
Комментарии:
1. Спасибо, у меня есть вопрос. Возможно ли заключить два корневых объекта (deployment и services) в массив, чтобы синтаксис JSON был удовлетворен? Могу ли я использовать синтаксис?
2. @Coolbreeze в самом массиве JSON нет, но вы можете обернуть их
List
ресурсом. Смотрите отредактированный ответ3. Огромное спасибо за отредактированный ответ. Это было именно то, что я искал. Ценю время, потраченное на то, чтобы помочь мне в этом.
Ответ №2:
Вы могли бы сначала применить yaml с помощью kubectl
, а затем получить json обратно с помощью kubectl get deploy,services -o json > example.json
Правильный синтаксис для json — это иметь ,
между двумя ресурсами, а не ---
как вы используете в yaml
...
// deployment
},
{
// service
...