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

Spa*_*ker 2 deployment service kubernetes

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

但是,当我使用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>
Run Code Online (Sandbox Code Playgroud)

我该怎么办才能解决该错误?Service在这种情况下,kubernetes 甚至是正确的API对象吗?

Mic*_*las 5

只需删除整个Service对象。由于您拥有不需要通过网络进行通信的应用程序,因此不需要服务。将服务视为Pod公开的(HTTP?)API前面的一种专用负载平衡器。由于您没有该API,因此不需要它。该Deployment做工人豆荚,也就是在那张任何的实际监管foo/foo-processing-module-docker:0.0.1-SNAPSHOT

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