我有一个带有后端处理应用程序的容器,该应用程序只连接到其他服务,但不暴露它侦听的任何端口。例如,在我的情况下,它连接到JMS代理并使用另一个服务的Rest API。
我想将该容器与JMS代理和带有Rest API的服务器一起部署到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对象吗?
只需删除整个Service
对象。由于您的应用程序不需要通过网络进行通信,因此您不需要服务。将服务视为您的pod公开的(HTTP?)API前面的一种专门的负载均衡器。由于您没有该API,因此您不需要它。 Deployment
对工人舱进行实际监督,即foo/foo-processing-module-docker:0.0.1-SNAPSHOT
发生的任何事情。
此外,始终使用kubectl apply
而不是create
,如果您想跟踪部署的修订版,请添加--record
选项,以便您可以访问历史记录。
您不需要后端处理应用程序的服务,因为它不接收任何传入连接。
如果要将部署的一部分公开给群集/ Internet以接收传入连接,则只需要一项服务。
此外,在定义LoadBalancer服务时,您需要指定端口。