Как включить несколько модулей с одинаковыми портами на узле k8s? - PullRequest
0 голосов
/ 27 марта 2019

я получаю:
0/3 nodes are available: 3 node(s) didn't have free ports for the requested pod ports.
при попытке запустить несколько подчиненных jenkins на одном узле k8s.

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

есть возможность создать службу, которая будет генерировать случайные порты для каждого созданного модуля?

Спасибо !!!

изменить: эта служба настроена:

{
  "kind": "Service",
  "apiVersion": "v1",
  "metadata": {
    "name": "jnlp",
    "namespace": "default",
    "selfLink": "/api/v1/namespaces/default/services/jnlp",
    "uid": "345230eb-5078-11e9-959a-1690183aeeb4",
    "resourceVersion": "90390",
    "creationTimestamp": "2019-03-27T10:08:01Z",
    "annotations": {.....}
  },
  "spec": {
    "ports": [
      {
        "name": "ssh",
        "protocol": "TCP",
        "port": 22,
        "targetPort": 22,
        "nodePort": 32417
      }
    ],
    "selector": {
      "app": "jnlp"
    },
    "clusterIP": "....",
    "type": "LoadBalancer",
    "sessionAffinity": "None",
    "externalTrafficPolicy": "Cluster"
  },
  "status": {
    "loadBalancer": {
      "ingress": [
        {
          "ip": "......"
        }
      ]
    }
  }
}

jenkins config:

podTemplate(label: slave, 
containers: [
    containerTemplate(name: 'mongodb',
            image: mongo_image,
            ttyEnabled: true,
            ports: [portMapping(name: 'mongo', containerPort: 27017, hostPort: 27017)],
    ),
    containerTemplate(name: 'elasticsearch',
            image: elastic_image,
            ttyEnabled: true,
            ports: [portMapping(name: 'elastic', containerPort: 9200, hostPort: 9200)],
    ),
    containerTemplate(name: 'jnlp',
            image: "******:${CONTAINER_TAG}",
            command: 'jenkins-slave',
            alwaysPullImage: true,
            privileged: true,
            label: 'jnlp', 
            envVars: [
                    envVar(key: 'HOME', value: "${JENKINS_HOME}"),
            ])
],
        imagePullSecrets: ['*******'],
        podRetention: always()
)

1 Ответ

0 голосов
/ 27 марта 2019

Нельзя, чтобы несколько модулей использовали один и тот же nodePort, так как это порт на фактическом компьютере, который вы будете привязывать к вашему модулю. Поскольку вы используете loadbalancer, я не понимаю, зачем вам нужно использовать nodePorts. Если вам абсолютно не нужно использовать nodePorts, просто удалите его из службы.

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