首页 > 解决方案 > 无法让我的 .jar 启动 Ignite 在 GKE 上工作

问题描述

我已经正确设置了我的 RBAC 和我的服务,如 Ignite doc 中所述,并带有此处描述的修复>>无法检索 Ignite pod IP 地址 我设法运行 docker 映像“apacheignite/ignite”,之后没有问题。

但是,当我无法运行此代码时:

    IgniteConfiguration cfg = new IgniteConfiguration();
    cfg.setExecutorConfiguration(new ExecutorConfiguration("myPool").setSize(1));

    DataStorageConfiguration dsCfg = new DataStorageConfiguration();
    DataRegionConfiguration dataRegionConfigurations = new DataRegionConfiguration();
    dataRegionConfigurations.setPersistenceEnabled(true);

    dsCfg.getDefaultDataRegionConfiguration();
    dsCfg.setDefaultDataRegionConfiguration(dataRegionConfigurations);
    cfg.setDataStorageConfiguration(dsCfg);

    TcpDiscoverySpi tcpDS = new TcpDiscoverySpi();
    TcpDiscoveryKubernetesIpFinder ipFinder = new TcpDiscoveryKubernetesIpFinder();
    ipFinder.setNamespace("ignite");
    tcpDS = tcpDS.setIpFinder(ipFinder);        
    cfg.setDiscoverySpi(tcpDS);

    Ignite ignite = Ignition.start(cfg);

我收到以下错误:class org.apache.ignite.spi.IgniteSpiException: Failed to retrieve Ignite pods IP addresses.

这似乎是由以下异常引起的:java.io.FileNotFoundException: https://kubernetes.default.svc.cluster.local:443/api/v1/namespaces/default/endpoints/ignite-worker

我的泊坞窗文件如下:

# Use an official Python runtime as a parent image
FROM openjdk:8

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
ADD . /app

EXPOSE 47100
EXPOSE 47500
EXPOSE 49112
EXPOSE 10900
EXPOSE 10800
EXPOSE 11211

# Run app.py when the container launches
CMD ["java", "-Xms3g", "-Xmx3g", "-jar", "ignite-app.jar"]

我的部署的 yaml 文件如下所示:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  # Custom Ignite cluster's name.
  name: ignite-cluster
spec:
  # A number of Ignite pods to be started by Kubernetes initially.
  replicas: 1
  template:
    metadata:
      labels:
        app: ignite
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - ignite
            topologyKey: kubernetes.io/hostname
      serviceAccount: ignite
      containers:
        # Custom Ignite pod name.
      - name: ignite-node
        image: gcr.io/my-project/my-image:v1
        env:
        - name: OPTION_LIBS
          value: ignite-kubernetes
        - name: CONFIG_URI
          value: https://raw.githubusercontent.com/apache/ignite/master/modules/kubernetes/config/example-kube-persistence.xml
        ports:
        # Ports to open.
        # Might be optional depending on your Kubernetes environment.
        - containerPort: 11211 # REST port number.
        - containerPort: 47100 # communication SPI port number.
        - containerPort: 47500 # discovery SPI port number.
        - containerPort: 49112 # JMX port number.
        - containerPort: 10800 # SQL port number.
        - containerPort: 10900 # Thin clients port number.

我无法理解如何解决我的"java.io.FileNotFoundException: https://kubernetes.default.svc.cluster.local:443/api/v1/namespaces/default/endpoints/ignite-worker"异常。

堆栈如下:

org.apache.ignite.spi.IgniteSpiException: Failed to retrieve Ignite pods IP addresses.
    at org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes.TcpDiscoveryKubernetesIpFinder.getRegisteredAddresses(TcpDiscoveryKubernetesIpFinder.java:172)
    at org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi.registeredAddresses(TcpDiscoverySpi.java:1828)
    at org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi.resolvedAddresses(TcpDiscoverySpi.java:1776)
    at org.apache.ignite.spi.discovery.tcp.ServerImpl.sendJoinRequestMessage(ServerImpl.java:1029)
    at org.apache.ignite.spi.discovery.tcp.ServerImpl.joinTopology(ServerImpl.java:890)
    at org.apache.ignite.spi.discovery.tcp.ServerImpl.spiStart(ServerImpl.java:373)
    at org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi.spiStart(TcpDiscoverySpi.java:1948)
    at org.apache.ignite.internal.managers.GridManagerAdapter.startSpi(GridManagerAdapter.java:297)
    at org.apache.ignite.internal.managers.discovery.GridDiscoveryManager.start(GridDiscoveryManager.java:915)
    at org.apache.ignite.internal.IgniteKernal.startManager(IgniteKernal.java:1721)
    at org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.java:1028)
    at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start0(IgnitionEx.java:2014)
    at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1723)
    at org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1151)
    at org.apache.ignite.internal.IgnitionEx.startConfigurations(IgnitionEx.java:1069)
    at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:955)
    at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:854)
    at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:724)
    at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:693)
    at org.apache.ignite.Ignition.start(Ignition.java:352)
    at Initiator.main(Initiator.java:17)
Caused by: java.io.FileNotFoundException: https://kubernetes.default.svc.cluster.local:443/api/v1/namespaces/default/endpoints/ignite-worker
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1890)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263)
    at org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes.TcpDiscoveryKubernetesIpFinder.getRegisteredAddresses(TcpDiscoveryKubernetesIpFinder.java:153)

请问有人知道发生了什么吗?

标签: javakubernetesignitegoogle-kubernetes-engine

解决方案


查看堆栈跟踪中的 URL,我可以看出 IP​​ 查找器使用default名称空间和ignite-worker服务名称。但是,这与您提供的配置不对应。您应该检查实际使用的配置以及ignite-worker服务名称的来源。在 IP finder 上正确设置所有正确设置后,它应该可以正常工作。


推荐阅读