Как создать развертывание kubernetes, если контейнер не прослушивает порты? - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть контейнер с приложением для обработки бэкэнда, который подключается только к другим сервисам, но не предоставляет никаких портов, которые он слушает. Например, в моем случае он подключается к JMS-брокеру и использует Rest API другого сервиса.

Я хочу развернуть этот контейнер вместе с JMS-брокером и сервером с Rest API для kubernetes. Поэтому в настоящее время у меня есть следующие объекты API kubernetes для приложения обработки бэкэнда:

---
  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 голосов
/ 07 сентября 2018

Вам не нужен сервис для приложения обработки бэкэнда, так как оно не получает никаких входящих соединений.

Служба требуется только в том случае, если вы хотите отобразить часть развертывания в кластере / Интернете для получения входящих соединений.

Кроме того, при определении службы LoadBalancer необходимо указать порт.

0 голосов
/ 07 сентября 2018

Просто удалите весь объект Service. Поскольку у вас есть приложение, которому не нужно общаться через сеть, вам не нужна услуга. Думайте о сервисе как о специализированном балансировщике нагрузки перед (HTTP?) API, предоставляемым вашими модулями. Поскольку у вас нет этого API, он вам не нужен. Deployment осуществляет фактический надзор за рабочими модулями, то есть независимо от того, что происходит в foo/foo-processing-module-docker:0.0.1-SNAPSHOT.

Кроме того, всегда используйте kubectl apply, а не create, и если вы хотите отслеживать развернутые ревизии, добавьте опцию --record, чтобы вы могли получить доступ к истории.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...