我有一个带有后端处理应用程序的容器,该应用程序仅连接到其他服务,但不公开其侦听的任何端口。例如,在我的情况下,它连接到JMS代理并使用其他服务的Rest API。
我想将该容器以及带有Rest API的JMS代理和服务器部署到kubernetes。因此,我目前正在为后端处理应用程序使用这些kubernetes API对象:
---
kind: "Deployment"
apiVersion: "extensions/v1beta1"
metadata:
name: "foo-processing-module"
namespace: "foo-4"
labels:
foo.version: "0.0.1-SNAPSHOT"
k8s-app: "foo-processing-module"
annotations:
deployment.kubernetes.io/revision: "1"
description: "Processing Modules App for foo"
spec:
replicas: 1
selector:
matchLabels:
foo.version: "0.0.1-SNAPSHOT"
k8s-app: "foo-processing-module"
template:
metadata:
name: "foo-processing-module"
labels:
foo.version: "0.0.1-SNAPSHOT"
k8s-app: "foo-processing-module"
annotations:
description: "Processing Modules App for foo"
spec:
containers:
-
name: "foo-processing-module"
image: "foo/foo-processing-module-docker:0.0.1-SNAPSHOT"
resources: {}
terminationMessagePath: "/dev/termination-log"
terminationMessagePolicy: "File"
imagePullPolicy: "IfNotPresent"
securityContext:
privileged: false
restartPolicy: "Always"
terminationGracePeriodSeconds: 30
dnsPolicy: "ClusterFirst"
securityContext: {}
schedulerName: "default-scheduler"
strategy:
type: "RollingUpdate"
rollingUpdate:
maxUnavailable: "25%"
maxSurge: "25%"
revisionHistoryLimit: 10
progressDeadlineSeconds: 600
---
kind: "Service"
apiVersion: "v1"
metadata:
name: "foo-processing-module"
namespace: "foo-4"
labels:
foo.version: "0.0.1-SNAPSHOT"
k8s-app: "foo-processing-module"
annotations:
description: "Processing Modules App for foo"
spec:
selector:
foo.version: "0.0.1-SNAPSHOT"
k8s-app: "foo-processing-module"
type: "LoadBalancer"
sessionAffinity: "None"
externalTrafficPolicy: "Cluster"
但是,当我使用kubectl create
时,在创建上述API对象时会收到以下错误消息:
Error from server (Invalid): error when creating "foo.yml": Service "foo-processing-module" is invalid: spec.ports: Required value
error converting YAML to JSON: yaml: line 22: did not find expected <document start>
我该怎么做才能解决该错误?在这种情况下,kubernetes Service
甚至是正确的API对象吗?
答案 0 :(得分:4)
只需删除整个Service
对象。由于您拥有不需要通过网络进行通信的应用程序,因此不需要服务。将服务视为Pod公开的(HTTP?)API前面的一种专用负载平衡器。由于您没有该API,因此不需要它。 Deployment
实际监视工人吊舱,即foo/foo-processing-module-docker:0.0.1-SNAPSHOT
中发生的一切。
此外,请始终使用kubectl apply
而不是create
,如果要跟踪已部署的修订,请添加--record
选项,以便访问历史记录。
答案 1 :(得分:1)
您不需要后端处理应用程序的服务,因为它不接收任何传入连接。
仅在要将部署的一部分公开到群集/互联网以接收传入连接时才需要服务。
此外,在定义LoadBalancer服务时,您需要指定端口。