Dekorate为Java项目生成Kubernetes和OpenShift清单
Dekorate(以前是ap4k项目)旨在简化基于Java的项目中Kubernetes和OpenShift清单的生成。该项目被更名,因为它现在支持在不使用注释的情况下装饰Kubernetes清单,因此名称ap4k不再准确地描述该项目。
Dekorate是用于Kubernetes和OpenShift清单的Java编译时生成器和装饰器的集合。开发人员无需编辑任何XML,JSON或YAML即可自定义这些清单。
使用Dekorate,开发人员可以使用注释处理,配置属性(application.properties)或两者来生成或自定义清单。Dekorate支持Kubernetes,OpenShift,Knative,Tekton,Prometheus,Jaeger,Service Catalog和Halkyon CRD。此外,Dekorate与Spring Boot,Quarkus,Thorntail之类的框架集成,并且还为通用Java项目提供了构建工具,该工具允许任何maven,gradle,sbt和bazel项目生成清单。
作为示例,让我们探讨Dekorate如何与Quarkus应用程序集成。
Quarkus已经有了一个Kubernetes扩展,该扩展在内部使用Dekorate为Kubernetes,OpenShift和Knative生成和自定义清单。此扩展允许Quarkus通过应用生成的清单来将应用程序部署到Kubernetes集群,甚至在部署应用程序之前创建容器映像并将其推送到注册表(有关更多详细信息,请参见容器映像指南)。
要添加扩展,您只需要在终端中执行:
mvn quarkus:add-extension -Dextensions="io.quarkus:quarkus-kubernetes"
编译完成后,生成的清单将在以下位置可用。target/kubernetes/
kubernetes.json文件如下所示:
{
"apiVersion" : "v1",
"kind" : "ServiceAccount",
"metadata" : {
"annotations" : {
"app.quarkus.io/vcs-url" : "<>",
"app.quarkus.io/build-timestamp" : "2020-06-04 - 05:13:57 +0000",
"app.quarkus.io/commit-id" : "<>"
},
"labels" : {
"app.kubernetes.io/name" : "decorate",
"app.kubernetes.io/version" : "1.0.0-SNAPSHOT"
},
"name" : "decorate"
}
}
目前,此扩展将处理端口和运行状况检查之类的事情,用户端的配置为零。重要的是要注意,根据设计,此扩展将不会使用dekorate批注自定义生成的清单。
对于 Spring Boot 应用程序,有两个可用的启动器: io.dekorate: Kubernetes-Spring-starter: 1.0.0
(Kubernetes),以及 io.dekorate: OpenShift-Spring-starter: 1.0.0
(OpenShift)。
在Spring Boot上,可以通过利用已经存在的特定于框架的元数据来绕过注释。要自定义生成的清单,可以将dekorate属性添加到application.yml / application.properties中,甚至可以将注释与application.yml / application.properties一起使用。默认情况下,dekorate属性会覆盖所有现有的注释配置。
Dekorate按优先级从高到低的顺序寻找受支持的配置:
- Annotations
- application.properties
- application.yaml
- application.yml
- application-kubernetes.properties
- application-kubernetes.yaml
- application-kubernetes.yml
对于Thorntail应用程序,提供了两个启动器:io.dekorate
(Kubernetes) 和 jar:1.0.0
io.dekorate
(OpenShift)。jar:1.0.0
从这些启动器,你就可以开始使用Dekorate注释,比如@KubernetesApplication
,@OpenShiftApplication
等
要为通用Java应用程序生成Kubernetes清单,必须为Kubernetes和OpenShift 添加依赖项。
然后,您需要在一个Java源文件中添加@Dekorate
注解或@KubernetesApplication
,这是一种更专业的形式@Dekorate
。
import io.dekorate.kubernetes.annotation.KubernetesApplication;
@KubernetesApplication
public class Main {
public static void main(String[] args) {
}
}
运行后,mvn clean package
您将在target / classes / META-INF / dekorate下看到生成的清单。
kubernetes.yml如下所示:
apiVersion: "apps/v1"
kind: "Deployment"
metadata:
name: "kubernetes-example"
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: "my-gradle-app"
app.kubernetes.io/version: "1.0-SNAPSHOT"
template:
metadata:
labels:
app.kubernetes.io/name: "my-gradle-app"
app.kubernetes.io/version: "1.0-SNAPSHOT"
spec:
containers:
- env:
- name: "KUBERNETES_NAMESPACE"
valueFrom:
fieldRef:
fieldPath: "metadata.namespace"
image: "default/my-gradle-app:1.0-SNAPSHOT"
imagePullPolicy: "IfNotPresent"
name: "my-gradle-app"
要为通用Java应用程序生成OpenShift清单,可以使用@Dekorate
注释或@OpenshiftApplication
,它的工作原理与完全相同@KubernetesApplication
,但是会生成openshift.yml / openshift.json。
Dekorate除了核心清单生成功能之外,还带来了一些其他功能。这些功能包括构建,部署和测试之类的功能。
Dekorate允许用户挂钩外部工具(例如docker或oc)以在编译结束后触发容器映像构建,因为它不生成Docker文件,也不为执行docker或s2i构建提供内部支持。
目前,作为实验功能,提供了以下挂钩:
- docker build hook(需要使用-Ddekorate.build = true触发的docker二进制文件)
- docker push hook(需要docker二进制文件,由-Ddekorate.push = true触发)
- OOpenShift s2i build hook(需要oc二进制文件,由-Ddekorate.deploy = true触发)
Dekorate还为Kubernetes和Openshift带来了JUnit 5扩展,这些扩展使开发人员可以运行端到端测试。目前,受支持的功能包括环境条件,容器构建,应用生成的清单来测试环境以及使用客户端/应用程序容器注入测试。
可以在GitHub repo上找到更多详细信息,例如所有配置选项和代码示例(Spring Boot,Thorntail,Vertx,Istio)。
还没有评论,来说两句吧...