一、概述
** fabric8 - Maven的插件(F8-MP)帶來(lái)到您的Java應(yīng)用程序Kubernetes和OpenShift。它提供了與Maven的緊密集成,并受益于已經(jīng)提供的構(gòu)建配置。該插件專注于兩個(gè)任務(wù):構(gòu)建Docker映像以及創(chuàng)建Kubernetes和OpenShift資源描述符。它可以非常靈活地進(jìn)行配置,并支持創(chuàng)建多個(gè)配置模型:零配置設(shè)置允許快速增加一些默認(rèn)值。對(duì)于更高級(jí)的要求,XML配置提供了其他配置選項(xiàng),可以將其添加到pom.xml。為了充分發(fā)揮作用,為了調(diào)整創(chuàng)建的各個(gè)方面,可以使用外部資源片段和Dockerfile。
1.1 、構(gòu)建鏡像
該fabric8:構(gòu)建的目標(biāo)是創(chuàng)建包含實(shí)際應(yīng)用泊塢的圖像。然后可以將它們部署在Kubernetes或OpenShift上。將構(gòu)建構(gòu)件及其依賴項(xiàng)包含到這些映像中很容易。該插件使用maven-assembly-plugin中的程序集描述符格式來(lái)指定將添加到映像中的內(nèi)容。然后可以使用fabric8:push將映像推送到公共或私有Docker注冊(cè)中心。
根據(jù)操作模式,要構(gòu)建實(shí)際映像,請(qǐng)直接使用Docker守護(hù)程序或執(zhí)行OpenShift Docker Build。
一個(gè)特殊的fabric8:watch目標(biāo)允許對(duì)代碼更改做出反應(yīng),以自動(dòng)重新創(chuàng)建圖像或?qū)⑿碌墓ぜ?fù)制到正在運(yùn)行的容器中。
這些與圖像相關(guān)的功能從該插件的fabric8io / docker-maven-plugin繼承。
1.2、Kubernetes和OpenShift資源
可以從fabric8:resource創(chuàng)建或生成Kubernetes和OpenShift資源描述符。這些文件打包在Maven工件中,并可以通過(guò)fabric8:apply部署到正在運(yùn)行的業(yè)務(wù)流程平臺(tái)。
通常,您只指定實(shí)際資源描述符的一小部分,此插件將利用從中獲取的各種額外信息來(lái)豐富這些資源描述符pom.xml。這大大減少了常見情況的樣板代碼。
二、官方說(shuō)明
1、github地址: https://github.com/fabric8io/fabric8-maven-plugin
2、詳細(xì)使用文檔:http://maven.fabric8.io/
3、官方網(wǎng)址:http://fabric8.io/
三、使用說(shuō)明
3.1、pom.xml配置
我們要在項(xiàng)目的POM.XML文件引入fabric8-maven-plugin相關(guān)的配置,這個(gè)才能構(gòu)造鏡像及發(fā)布到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>
具體配置的詳細(xì)說(shuō)明,請(qǐng)參與說(shuō)明文檔。
3.2、構(gòu)建鏡像
1、Dockerfile的配置
fabric8-maven-plugin 功能強(qiáng)大,我們?cè)跇?gòu)建鏡像時(shí),在默認(rèn)情況可以不用自定義 Dockerfile,插件會(huì)自動(dòng)的構(gòu)建。當(dāng)然為了構(gòu)建的鏡像更合的要求,可以選擇自定義 Dockerfile。請(qǐng)?jiān)?src/main/docker目錄下創(chuàng)建Dockerfile,如:
# 指定基礎(chǔ)鏡像
# FROM openjdk:8-jdk-alpine
FROM java:8
# 維護(hù)者信息
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
# 配置容器,使其可執(zhí)行化
ENTRYPOINT exec java $JAVA_OPTS -jar /home/admin.jar
更詳細(xì)的Dockerfile內(nèi)容,請(qǐng)參考Dockerfile的說(shuō)明。
2、鏡像的構(gòu)建
mvn fabric8:build
通過(guò)這個(gè)命令可以構(gòu)建,鏡像。
可以通過(guò)docker查詢鏡像。
docker image -a
3.3、發(fā)布
1、kubernetes發(fā)布配置
fabric8-maven-plugin 功能強(qiáng)大,我們?cè)诎l(fā)布到kubernetes,正常情況下我們都編寫deployment.yml及service.yml文件,但在默認(rèn)情況可以不用編寫這兩個(gè)文件,會(huì)自動(dòng)生成。當(dāng)然為了更合的我們的要求,可以選擇自定義 這兩個(gè)文件。請(qǐng)?jiān)?src/main/fabric8目錄下創(chuàng)建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
更詳細(xì)的iml內(nèi)容,請(qǐng)參考kubernetes的說(shuō)明。
2、kubernetes發(fā)布
mvn fabric8:resource fabric8:deploy
3、查看發(fā)布情況
可以通過(guò)命令來(lái)查看,也可以通過(guò)kubernetes的界面來(lái)查看。
查看pod:
kubectl get pod -n default -o wide
查看service:
kubectl get svc -n default -o wide