aks上的java spingboot微服务部署抛出不受支持的ClassVersionError
在尝试在aks上部署java springboot微服务时,我不断地遇到不受支持的ClassVersionError。我正在使用“kubectl apply-f file.yaml”命令应用部署。即使现在编译为正确的编译器版本,它仍然会抱怨相同的问题。不知道我在哪里失踪 第一次尝试aks上的java spingboot微服务部署抛出不受支持的ClassVersionError,java,docker,kubernetes,Java,Docker,Kubernetes,在尝试在aks上部署java springboot微服务时,我不断地遇到不受支持的ClassVersionError。我正在使用“kubectl apply-f file.yaml”命令应用部署。即使现在编译为正确的编译器版本,它仍然会抱怨相同的问题。不知道我在哪里失踪 第一次尝试 使用oracle openjdk 11编译 使用javap检查编译类版本-verbose MyApplication | findstr“major”控制台输出-主要版本:55 部署到aks失败 第二次尝试 使用or
使用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)
请求善意的帮助
关于默认的拉取策略设置为
IfNotPresent
,它告诉Kubelet,如果图像已经存在于正在调度pod
的节点上,则跳过拉取。
如果要强制始终拉取图像,可以执行以下操作:
- 将容器的
设置为始终imagePullPolicy
- 省略
并使用imagePullPolicy
作为要使用的图像的标记:latest
- 省略要使用的图像的
和标记imagePullPolicy
- 启用准入控制器
:latest
标记,有关更多信息,请参阅
默认的拉取策略设置为
IfNotPresent
,这会告诉Kubelet,如果图像已经存在于正在调度pod
的节点上,则跳过拉取。
如果要强制始终拉取图像,可以执行以下操作:
- 将容器的
设置为始终imagePullPolicy
- 省略
并使用imagePullPolicy
作为要使用的图像的标记:latest
- 省略要使用的图像的
和标记imagePullPolicy
- 启用准入控制器
:latest
标记,有关更多信息,请参阅
希望这会有所帮助:您使用的是哪个spring启动版本?确保您使用的是支持正确JDK的spring引导版本。虽然您可能已经使用Java 8编译器编译了代码,但运行时类路径似乎仍然包含使用Java 11.Thx@Stephen编译的类,但在第二次尝试中,我验证了编译的类主版本,它显示的是52而不是55。当我尝试使用本地docker时,这是如何改变的,与aks上的部署相比,本地docker工作得很顺利。Hi解决了这个问题。部署的吊舱没有拉取最新版本的映像。With imagePullPolicy:始终添加到yaml清单中,并使用kubectl replace--force选项强制重新创建部署和服务,该选项是从最新(新)映像部署的,而不是使用其缓存。Thankshope这将有帮助:您使用的是哪个spring引导版本?确保您使用的是支持正确JDK的spring引导版本。虽然您可能已经使用Java 8编译器编译了代码,但运行时类路径似乎仍然包含使用Java 11.Thx@Stephen编译的类,但在第二次尝试中,我验证了编译的类主版本,它显示的是52而不是55。当我尝试使用本地docker时,这是如何改变的,与aks上的部署相比,本地docker工作得很顺利。Hi解决了这个问题。部署的吊舱没有拉取最新版本的映像。With imagePullPolicy:始终添加到yaml清单中,并使用kubectl replace--force选项强制重新创建部署和服务,该选项是从最新(新)映像部署的,而不是使用其缓存。谢谢