Aks上的Java spingboot微服务部署引发UnsupportedClassVersionError

时间:2020-06-01 14:24:30

标签: java docker kubernetes

尝试在aks上连续部署java springboot微服务时,却给了我UnsupportedClassVersionError。我正在使用“ kubectl apply -f file.yaml” 命令来应用部署。即使现在编译正确的编译器版本后,它仍然会抱怨相同。不知道我在哪里失踪。

首次尝试
-使用oracle openjdk 11进行编译
-使用 javap -verbose MyApplication |检查编译的类版本findstr “ major”
控制台输出-主要版本:55
-向aks部署失败

第二次尝试
-使用oracle jdk 1.8编译
-使用' javap -verbose MyApplication |检查编译的类版本。 findstr “ major”'
控制台输出-主要版本:52
-部署到aks失败

两种部署的共同点
-使用命令“ kubectl apply -f myapp.yaml ”部署在aks集群上
-收到相同的错误,即

> Exception in thread "main" java.lang.UnsupportedClassVersionError:
> MyApplication has been compiled by a more recent version of the Java
> Runtime (class file version 55.0), this version of the Java Runtime
> only recognizes class file versions up to 52.0
>         at java.lang.ClassLoader.defineClass1(Native Method)
>         at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
>         at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
>         at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
>         at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
>         at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
>         at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
>         at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:92)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
>         at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:46)
>         at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
>         at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
>         at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)


请求帮助

致谢

1 个答案:

答案 0 :(得分:0)

默认拉取策略设置为IfNotPresent,它告诉Kubelet如果计划pod的节点上已经存在该图像,则跳过该图像。 如果要强制将图像始终拉出,可以执行以下操作:

  • 将容器的imagePullPolicy设置为Always
  • 省略imagePullPolicy,并使用:latest作为要使用的图像的标签。
  • 省略imagePullPolicy和要使用的图像标签。
  • 启用AlwaysPullImages准入控制器。

请注意,您应该避免使用:latest标记,有关更多信息,请参见Best Practices for Configuration

相关问题