代码之家  ›  专栏  ›  技术社区  ›  SpaceTrucker

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

  •  0
  • SpaceTrucker  · 技术社区  · 6 年前

    我想将该容器连同JMS代理和带有restapi的服务器一起部署到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>
    

    我要怎么做才能解决这个错误?是库伯内特斯 Service

    2 回复  |  直到 6 年前
        1
  •  5
  •   Michael Hausenblas    6 年前

    只需移除整个 Service 对象。既然你有一个不需要通过网络交流的应用程序,你就不需要服务了。可以将服务看作是一种专门的负载平衡器,它位于一个(HTTP?)你的豆荚暴露了。既然你没有那个API,你就不需要它了。这个 Deployment 对工人的实际监督,也就是说,不管发生什么事 foo/foo-processing-module-docker:0.0.1-SNAPSHOT

    另外,始终使用 kubectl apply create --record 选项,以便您可以访问历史记录。

        2
  •  1
  •   Matt slashingweapon    6 年前

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

    另外,在定义负载平衡器服务时,需要指定端口。