Kubernetes fabric8-maven-plugin

一、概述

** fabric8 - Maven的插件(F8-MP)带来到您的Java应用程序KubernetesOpenShift。它提供了与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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 229,362评论 6 537
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,013评论 3 423
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 177,346评论 0 382
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,421评论 1 316
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,146评论 6 410
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,534评论 1 325
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,585评论 3 444
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,767评论 0 289
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,318评论 1 335
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,074评论 3 356
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,258评论 1 371
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,828评论 5 362
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,486评论 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,916评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,156评论 1 290
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,993评论 3 395
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,234评论 2 375

推荐阅读更多精彩内容