从CustomResourceDefinition生成k8s java模型代码

目标

已经有了go版本的模型定义,需要生成java版本

看了下官方介绍的文档 generate-model-from-third-party-resources.md 感觉不会太难,照着尝试一下。

开始干活

首先看到要k8s 1.15以上的版本,我只有1.14,只好使用minikube重新装了1.16的版本,具体安装不细说了。

然后把CRD apply进集群里面,注意CRD得带有openAPIV3Schema的validation(我的是kubebuilder生成的)

执行这个命令生成swagger json文件

kubectl get --raw="/openapi/v2" > /tmp/swagger

然后执行这个命令生成代码

docker run -i --rm dockerhub.azk8s.cn/yue9944882/java-model-gen < /tmp/swagger | tar -xzf - -C /tmp/

这里我添加了dockerhub.azk8s.cn镜像加速,这个镜像应该是别人构建好的,如果想自己构建,要用首页介绍的项目kubernetes-client/gen ,里面还会用到maven下载也是比较慢的,可以加一下mirrors

我写了个简单的Dockerfile

FROM dockerhub.azk8s.cn/yue9944882/java-model-gen
 

 
COPY ./settings.xml /usr/share/maven/conf/settings.xml

把settings.xml放到同一个目录,内容大概这样,可以加更多一些mirror

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
 
<mirrors>
 
<mirror>
 
    <id>aliyun-central</id>
 
    <mirrorOf>*</mirrorOf>
 
    <name>aliyun central</name>
 
    <url>https://maven.aliyun.com/repository/central</url>
 
</mirror>
 
</mirrors>
 
</settings>

执行完成后,生成的文件在/tmp/java里面,找一下自己要的文件在哪里。???文件呢?为什么只有个*List文件??

试了下文档给出的CRD文件,确实可以生成,但为什么我的不行?

试了执行一下explain, 发现字段没有显示出来。

kubectl explain my_crd_name --recursive

最终使用排除法的方式,对比例子和我crd的差异,找出了这里的差异

spec:
 
  preserveUnknownFields: false # 需要添加这个,这个值默认为true
 
  validation:
 
    openAPIV3Schema:
 
      type: object # 这里也要

修改后使用 kubectl explain 可以正确识别字段

版权声明:
作者:dingding
链接:https://www.techfm.club/p/3016.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>