如果容器不监听任何端口,如何创建kubernetes部署?

时间:2018-09-07 07:04:16

标签: service deployment kubernetes

我有一个带有后端处理应用程序的容器,该应用程序仅连接到其他服务,但不公开其侦听的任何端口。例如,在我的情况下,它连接到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对象吗?

2 个答案:

答案 0 :(得分:4)

只需删除整个Service对象。由于您拥有不需要通过网络进行通信的应用程序,因此不需要服务。将服务视为Pod公开的(HTTP?)API前面的一种专用负载平衡器。由于您没有该API,因此不需要它。 Deployment实际监视工人吊舱,即foo/foo-processing-module-docker:0.0.1-SNAPSHOT中发生的一切。

此外,请始终使用kubectl apply而不是create,如果要跟踪已部署的修订,请添加--record选项,以便访问历史记录。

答案 1 :(得分:1)

您不需要后端处理应用程序的服务,因为它不接收任何传入连接。

仅在要将部署的一部分公开到群集/互联网以接收传入连接时才需要服务。

此外,在定义LoadBalancer服务时,您需要指定端口。