如何将 nginx 负载均衡器添加到 Jelastic 上的 kubernetes 集群?

How do I add an nginx load balancer to a kubernetes cluster on Jelastic?

我有以下 jps 清单:

jpsVersion: 1.3
jpsType: install
application:
  id: my-app
  name: My App
  version: 0.0

  settings:
    fields:
    - name: envName
      caption: Env Name
      type: string
      required: true
    - name: topo
      type: radio-fieldset
      values:
        0-dev: '<b>Development:</b> one master (1) and one scalable worker (1+)'
        1-prod: '<b>Production:</b> multi master (3) with API balancers (2+) and scalable workers (2+)'
      default: 0-dev
    - name: k8s-version
      type: string
      caption: k8s manifest version
      default: v1.16.3

  onInstall:
  - installKubernetes

  actions:
    installKubernetes:
      install:
        jps: https://github.com/jelastic-jps/kubernetes/blob/${settings.k8s-version}/manifest.jps
        envName: ${settings.envName}
        displayName: ${settings.envName}
        settings:
          deploy: cc
          topo: ${settings.topo}
          dashboard: version2
          ingress-controller: Nginx
          storage: true
          api: true
          monitoring: true
          version: ${settings.k8s-version}
          jaeger: false

现在,我想在k8s集群前面加一个负载均衡器,比如

  env:
    topology:
      nodes:
      - nodeGroup: bl
        nodeType: nginx-dockerized
        tag: 1.16.1
        displayName: Node balancing
        count: 1
        fixedCloudlets: 1
        cloudlets: 4

当然是上面的kubernetes jps安装创建了一个topology。因此,我无法调用上面的 env 部分。如何将新节点添加到由 jelastic kubernetes jps 创建的拓扑中?我找到了 addNodes,但它似乎不允许定义进入 bl 节点组的内容。

在 Jelastic API 中,我找到了 EditNodeGroup 方法,我相信它可以解决我的问题。但是,文档不是很清楚,它缺少一个示例,我可以从中猜测如何填充参数。我如何使用该方法将 nginx 负载平衡器添加到我的 k8s 环境?

编辑

EditNodeGroup方法对那个问题没有用。我认为,目前,我最好的选择是根据我的需要分叉 jelastic-jps/kubernetes and adapt the beforeinstall。我还有其他选择吗?我浏览了 API,发现无法添加我的 nginx 负载均衡器。

在外部清单调用期间无法更改环境拓扑,因为它是在该清单中创建的。但它可以在清单完成后进行更改。 整个方法是:

onInstall:
  - installKubernetes
  - addBalancer
actions:
  installKubernetes:
    install:
      jps: https://github.com/jelastic-jps/kubernetes/blob/${settings.k8s-version}/manifest.jps
      envName: ${settings.envName}
...
  addBalancer:
    - install:
        envName: ${settings.envName}
        jps:
          type: update
          name: Add Balancer Node
          onInstall:
            - addNodes:
....

请参考 https://github.com/jelastic-jps/kubernetes/blob/ad62208a5b3796bb7beeaedfce5c42b18512d9f0/addons/storage.jps 示例,了解如何在清单中使用 "addNodes" 操作。

此外,参考 https://docs.cloudscripting.com/creating-manifest/actions/#addnodes 描述了所有可以使用的字段。

K8s for Jelastic 的最新发布版本是:v1.16.6,因此您可以在您的清单中使用它。

但是,请注意,通过此 Balancer 实例,您将访问默认的 Kubernetes 入口控制器,即您当前在 "http(s)://".

上拥有的相同 ingresses/paths

当然,您可以为添加的 BL 分配一个 public ip,并且不再像以前那样通过共享平衡器访问相同的功能,而是从现在开始通过 public IP。

简而言之,Jelastic Balancer 实例目前不提供 Kubernetes 服务 LoadBalancer 功能——如果您正好需要这个功能。 K8S LoadBalancer 功能将在下一个版本中添加: public 添加到 "cp" worker 的 IP 可以自动用于在 Kubernetes 集群内创建的 LoadBalancer。我们希望将此功能添加到 1.16.8+

如果您还有其他问题,请告诉我们。