Kubernetes fabric8-maven-plugin

一、概述

** fabric8 - Maven的插件(F8-MP)帶來(lái)到您的Java應(yīng)用程序KubernetesOpenShift。它提供了與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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容