如果容器侦听没有端口,如何创建kubernetes部署?

问题描述 投票:0回答:2

我有一个带有后端处理应用程序的容器,该应用程序只连接到其他服务,但不暴露它侦听的任何端口。例如,在我的情况下,它连接到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 deployment kubernetes
2个回答
4
投票

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

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


1
投票

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

如果要将部署的一部分公开给群集/ Internet以接收传入连接,则只需要一项服务。

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

© www.soinside.com 2019 - 2024. All rights reserved.