我有一个简单的Flink流媒体应用程序。它在start-cluster.sh命令创建的集群中运行良好。
现在,基于Flink教程,我希望在k3d on macOS创建的Kubernetes集群中本机以应用模式部署它。
首先,我通过k3d cluster create dev创建了一个集群。
这是我的文档
FROM flink
RUN mkdir -p $FLINK_HOME/usrlib
COPY target/streaming-0.1.jar $FLINK_HOME/usrlib/streaming-0.1.jar我建造了它并把它推到码头中心。
我的集群名是k3d-dev,所以我运行
flink run-application \
--target kubernetes-application \
-Dkubernetes.cluster-id=k3d-dev \
-Dkubernetes.container.image=hongbomiao/my-flink-xxx:latest \
local:///opt/flink/usrlib/streaming-0.1.jar但是,我得到了错误:
The program finished with the following exception:
io.fabric8.kubernetes.client.KubernetesClientException: JcaPEMKeyConverter is provided by BouncyCastle, an optional dependency. To use support for EC Keys you must explicitly add this dependency to classpath.
at io.fabric8.kubernetes.client.internal.CertUtils.handleECKey(CertUtils.java:161)
at io.fabric8.kubernetes.client.internal.CertUtils.loadKey(CertUtils.java:131)
at io.fabric8.kubernetes.client.internal.CertUtils.createKeyStore(CertUtils.java:111)
at io.fabric8.kubernetes.client.internal.CertUtils.createKeyStore(CertUtils.java:243)
at io.fabric8.kubernetes.client.internal.SSLUtils.keyManagers(SSLUtils.java:128)
at io.fabric8.kubernetes.client.internal.SSLUtils.keyManagers(SSLUtils.java:122)
at io.fabric8.kubernetes.client.utils.HttpClientUtils.createHttpClient(HttpClientUtils.java:82)
at io.fabric8.kubernetes.client.utils.HttpClientUtils.createHttpClient(HttpClientUtils.java:62)
at io.fabric8.kubernetes.client.BaseClient.<init>(BaseClient.java:51)
at io.fabric8.kubernetes.client.DefaultKubernetesClient.<init>(DefaultKubernetesClient.java:105)
at org.apache.flink.kubernetes.kubeclient.FlinkKubeClientFactory.fromConfiguration(FlinkKubeClientFactory.java:102)
at org.apache.flink.kubernetes.KubernetesClusterClientFactory.createClusterDescriptor(KubernetesClusterClientFactory.java:61)
at org.apache.flink.kubernetes.KubernetesClusterClientFactory.createClusterDescriptor(KubernetesClusterClientFactory.java:39)
at org.apache.flink.client.deployment.application.cli.ApplicationClusterDeployer.run(ApplicationClusterDeployer.java:63)
at org.apache.flink.client.cli.CliFrontend.runApplication(CliFrontend.java:213)
at org.apache.flink.client.cli.CliFrontend.parseAndRun(CliFrontend.java:1057)
at org.apache.flink.client.cli.CliFrontend.lambda$main$10(CliFrontend.java:1132)
at org.apache.flink.runtime.security.contexts.NoOpSecurityContext.runSecured(NoOpSecurityContext.java:28)
at org.apache.flink.client.cli.CliFrontend.main(CliFrontend.java:1132)阅读后
我加了
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.69</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.69</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-ext-jdk15on</artifactId>
<version>1.69</version>
</dependency>到我的pom.xml文件。我又造了又推到码头中心。
当我运行上面的Flink命令时,仍然会出现相同的错误。有什么想法吗?谢谢!
更新1:
除了上面的pom.xml更改之外,我还手动下载了这3个jars,并将Dockerfile更改为
FROM flink
COPY lib/* $FLINK_HOME/lib
RUN mkdir -p $FLINK_HOME/usrlib
COPY target/streaming-0.1.jar $FLINK_HOME/usrlib/streaming-0.1.jar又试了一次,但还是犯了同样的错误。
我可以确认3个jar文件bcpkix-jdk15on-1.69.jar、bcprov-ext-jdk15on-1.69.jar、bcprov-jdk15on-1.69.jar都在docker映像中:
➜ docker run -it 6c48af48db55c334003a307d1ef7a5fc5181f389613284b66b5cb97588b9708d sh
$ cd lib && ls
bcpkix-jdk15on-1.69.jar flink-dist_2.12-1.13.2.jar flink-table_2.12-1.13.2.jar log4j-slf4j-impl-2.12.1.jar
bcprov-ext-jdk15on-1.69.jar flink-json-1.13.2.jar log4j-1.2-api-2.12.1.jar
bcprov-jdk15on-1.69.jar flink-shaded-zookeeper-3.4.14.jar log4j-api-2.12.1.jar
flink-csv-1.13.2.jar flink-table-blink_2.12-1.13.2.jar log4j-core-2.12.1.jar
$ cd ../usrlib && ls
streaming-0.1.jar更新2:
我试图通过以下方式启动会话模式
/usr/local/Cellar/apache-flink/1.13.1/libexec/bin/kubernetes-session.sh但还是有同样的错误。所以现在我可以确认,当我使用应用程序模式之前,这个问题与我的码头形象无关。
我的机器上有那些罐子位于~/.m2:

我错过其他罐子了吗?
另外,我发现错误只发生在由k3d/k3s创建的集群中,而不是minikube。
发布于 2021-08-13 23:52:58
在检查了
第一个脚本指向第二个脚本,第二个脚本
# ...
CC_CLASSPATH=`manglePathList $(constructFlinkClassPath):$INTERNAL_HADOOP_CLASSPATHS`
# ...
"$JAVA_RUN" $JVM_ARGS -classpath "$CC_CLASSPATH" $log_setting org.apache.flink.kubernetes.cli.KubernetesSessionCli "$@"我添加了echo $CC_CLASSPATH,并打印出类路径。
在我的例子中,它在/usr/local/Cellar/apache-flink/1.13.1/libexec/lib。
在我将bcprov-jdk15on-1.69.jar和bcpkix-jdk15on-1.69.jar放在上面的文件夹中之后,可以将Flink部署到k3s (k3d)中,现在在会话模式和应用程序模式中都是这样。
摘要
下载bcprov-jdk15on和bcpkix-jdk15on jar文件
然后移动到文件夹
/usr/local/Cellar/apache-flink/{version}/libexec/lib那你就可以走了。
发布于 2022-07-05 15:30:12
今天,我在我的m1 mac上偶然发现了这个问题,我使用docker和k3d创建了一个k3s集群。
实际上,我按照错误消息的话来解决这个问题:在类路径中添加一个有弹性的城堡。
但是,您需要将bc添加到插件的类路径中,如下所示:
...
<plugin>
<groupId>${quarkus.platform.group-id}</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>${quarkus.platform.version}</version>
<extensions>true</extensions>
<executions>
<execution>
<goals>
<goal>build</goal>
<goal>generate-code</goal>
<goal>generate-code-tests</goal>
</goals>
</execution>
</executions>
<!-- add bouncy castle to class path, so that elliptic curve keys work -->
<dependencies>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.69</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.69</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-ext-jdk15on</artifactId>
<version>1.69</version>
</dependency>
</dependencies>
</plugin>
...我不知道,在我看来,k3d总是生成EC密钥,因为我在一台完全不同的机器(win10 10/wsl2 2+ k3d)上也有这个问题。
https://stackoverflow.com/questions/68761409
复制相似问题