从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 可以正确识别字段
共有 0 条评论