美文网首页
Kubernetes fabric8-maven-plugin

Kubernetes fabric8-maven-plugin

作者: 竹智2019 | 来源:发表于2020-04-25 17:41 被阅读0次

一、概述

** 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

相关文章

网友评论

      本文标题:Kubernetes fabric8-maven-plugin

      本文链接:https://www.haomeiwen.com/subject/blbkwhtx.html