我有一个容器,它有一个后端处理应用程序,它只连接到其他服务,但不公开它侦听的任何端口。例如,在我的例子中,它连接到一个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
时,当需要创建上述接口对象时,我收到以下错误消息:
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
对象?
发布于 2018-09-07 07:58:53
只需删除整个Service
对象。因为你有一个不需要通过网络通信的应用程序,所以你不需要服务。将服务看作是一种专用的负载均衡器(HTTP?)应用程序接口暴露你的pod。因为您没有该API,所以您不需要它。Deployment
负责对工作进程pod的实际监督,也就是对foo/foo-processing-module-docker:0.0.1-SNAPSHOT
中发生的任何事情进行监督。
此外,始终使用kubectl apply
而不是create
,如果您希望跟踪已部署的修订,请添加--record
选项,以便可以访问历史记录。
发布于 2018-09-07 08:00:07
您不需要为后端处理应用程序提供服务,因为它不接收任何传入连接。
仅当您想要将部署的一部分公开到群集/internet以接收传入连接时,才需要服务。
此外,在定义LoadBalancer服务时,您需要指定端口。
https://stackoverflow.com/questions/52217034
复制