Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
aks上的java spingboot微服务部署抛出不受支持的ClassVersionError_Java_Docker_Kubernetes - Fatal编程技术网

aks上的java spingboot微服务部署抛出不受支持的ClassVersionError

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

在尝试在aks上部署java springboot微服务时,我不断地遇到不受支持的ClassVersionError。我正在使用“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)

请求善意的帮助


关于

默认的拉取策略设置为
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选项强制重新创建部署和服务,该选项是从最新(新)映像部署的,而不是使用其缓存。谢谢