新版spark-operator与k8s1.16版本兼容问题

前段时间我们团队升级了下k8s平台中使用的spark-operator镜像的版本,升级到了v1beta2-1.3.7-3.1.1,但在测试时发现webhook逻辑执行异常,排查发现是因为spark-operator版本与k8s版本不兼容导致的。
我在此将问题原因和解决方案记录下来,供有需要的同学参考。

1. 问题原因

我们当时使用的k8s版本是1.16,升级后的spark-operator镜像版本是v1beta2-1.3.7-3.1.1。
在新版spark-operator的源码中,提交mutatingWebhookConfiguration和validatingWebhookConfiguration时,声明了admissionReviewVersions只支持v1:
spark-operator源码
但我们正在使用的k8s 1.16版本不允许只声明v1,必须带上v1beta1才行:
k8s官方讨论
所以新版spark-operator不能在k8s1.16及之前的版本上直接使用,需要修改源码,声明支持v1beta1,然后重新打镜像。

2. 解决方案

其实新版的spark-operator代码还是支持v1beta1的,只是提交webhookConfiguration对象时没有声明,我们只需要添加上声明即可,代码diff如下:
代码diff
修改完后重新打镜像即可,可以直接用spark-operator官方的Dockerfile。

3. 后记

其实,修改源码的方案只是在短时间内无法升级k8s版本时的一种折中方案。后来,我们团队升级了k8s版本到1.20,支持只声明v1了,也就不再需要定制spark-operator源码,直接使用官方镜像就行了。

发表评论