一、概述
** fabric8 - Maven的插件(F8-MP)带来到您的Java应用程序Kubernetes和OpenShift。它提供了与Maven的紧密集成,并受益于已经提供的构建配置。该插件专注于两个任务:构建Docker映像以及创建Kubernetes和OpenShift资源描述符。它可以非常灵活地进行配置,并支持创建多个配置模型:零配置设置允许快速增加一些默认值。对于更高级的要求,XML配置提供了其他配置选项,可以将其添加到pom.xml
。为了充分发挥作用,为了调整创建的各个方面,可以使用外部资源片段和Dockerfile。
1.1 、构建镜像
该fabric8:构建的目标是创建包含实际应用泊坞的图像。然后可以将它们部署在Kubernetes或OpenShift上。将构建构件及其依赖项包含到这些映像中很容易。该插件使用maven-assembly-plugin中的程序集描述符格式来指定将添加到映像中的内容。然后可以使用fabric8:push将映像推送到公共或私有Docker注册中心。
根据操作模式,要构建实际映像,请直接使用Docker守护程序或执行OpenShift Docker Build。
一个特殊的fabric8:watch目标允许对代码更改做出反应,以自动重新创建图像或将新的工件复制到正在运行的容器中。
这些与图像相关的功能从该插件的fabric8io / docker-maven-plugin继承。
1.2、Kubernetes和OpenShift资源
可以从fabric8:resource创建或生成Kubernetes和OpenShift资源描述符。这些文件打包在Maven工件中,并可以通过fabric8:apply部署到正在运行的业务流程平台。
通常,您只指定实际资源描述符的一小部分,此插件将利用从中获取的各种额外信息来丰富这些资源描述符pom.xml
。这大大减少了常见情况的样板代码。
二、官方说明
1、github地址: https://github.com/fabric8io/fabric8-maven-plugin
2、详细使用文档:http://maven.fabric8.io/
3、官方网址:http://fabric8.io/
三、使用说明
3.1、pom.xml配置
我们要在项目的POM.XML文件引入fabric8-maven-plugin相关的配置,这个才能构造镜像及发布到kubernetes中去,配置如下:
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 指定该Main Class为全局的唯一入口 -->
<mainClass>com.ruoyi.RuoYiApplication</mainClass>
<layout>JAR</layout>
</configuration>
<executions>
<execution>
<goals>
<!--可以把依赖的包都打包到生成的Jar包中-->
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<warName>${project.artifactId}</warName>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- docker plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<!-- Dockerfile的地址 -->
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>run.sh</include>
</resource>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>fabric8-maven-plugin</artifactId>
<version>${fabric8.maven.plugin.version}</version>
<executions>
<execution>
<id>fmp</id>
<goals>
<goal>resource</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
具体配置的详细说明,请参与说明文档。
3.2、构建镜像
1、Dockerfile的配置
fabric8-maven-plugin 功能强大,我们在构建镜像时,在默认情况可以不用自定义 Dockerfile,插件会自动的构建。当然为了构建的镜像更合的要求,可以选择自定义 Dockerfile。请在 src/main/docker目录下创建Dockerfile,如:
# 指定基础镜像
# FROM openjdk:8-jdk-alpine
FROM java:8
# 维护者信息
MAINTAINER zhuzhi sunney888@qq.com
# 用于指定持久化目录
VOLUME /tmp
# 将本地文件添加到容器中
# RUN apt-get update && apt-get install -y curl vim net-tools iputils-ping &&
RUN mkdir -p /home
WORKDIR /home
ADD admin.jar /home/admin.jar
ADD run.sh /home/run.sh
RUN chmod +x /home/run.sh
# 指定于外界交互的端口
EXPOSE 9411
# 配置容器,使其可执行化
ENTRYPOINT exec java $JAVA_OPTS -jar /home/admin.jar
更详细的Dockerfile内容,请参考Dockerfile的说明。
2、镜像的构建
mvn fabric8:build
通过这个命令可以构建,镜像。
可以通过docker查询镜像。
docker image -a
3.3、发布
1、kubernetes发布配置
fabric8-maven-plugin 功能强大,我们在发布到kubernetes,正常情况下我们都编写deployment.yml及service.yml文件,但在默认情况可以不用编写这两个文件,会自动生成。当然为了更合的我们的要求,可以选择自定义 这两个文件。请在 src/main/fabric8目录下创建xxx-deployment.yml、xxx-service.yml文件,如:
admin-service.yml
apiVersion: v1
kind: Service
metadata:
annotations:
prometheus.io/port: 9779
prometheus.io/scrape : true
labels:
app : admin
group : com.ruoyi
provider : fabric8
version: 4.2.0
name: admin
namespace : default
spec:
type: NodePort
ports:
- port : 90
protocol : TCP
targetPort : 90
name: http
nodePort: 30090
selector :
app : admin
group : com.zhuzhi
provider : fabric8
admin-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
generation: 1
labels:
app: admin
group : com.zhuzhi
provider: fabric8
version: 4.2.0
name: admin
namespace: default
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 2
selector:
matchLabels:
app: admin
group: com.zhuzhi
provider : fabric8
template:
metadata:
labels:
app: admin
group: com.zhuzhi
provider: fabric8
version : 4.2.0
spec:
containers:
- env:
- name: KUBERNETES_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
image: zhuzhi/admin:4.2.0
imagePullPolicy: IfNotPresent
name: spring-boot
ports:
- containerPort: 90
name: dnsix
protocol: TCP
- containerPort: 9779
name: prometheus
protocol: TCP
- containerPort: 8778
name: jolokia
protocol: TCP
securityContext:
privileged: false
更详细的iml内容,请参考kubernetes的说明。
2、kubernetes发布
mvn fabric8:resource fabric8:deploy
3、查看发布情况
可以通过命令来查看,也可以通过kubernetes的界面来查看。
查看pod:
kubectl get pod -n default -o wide
查看service:
kubectl get svc -n default -o wide