Fabric8に基づいてSpringBootプロジェクトのイメージをすばやく作成し、k8sの詳細なチュートリアルに公開します

序文

広く普及しているクラウドコンピューティングエコシステムにおいて、Dockerはそのリリース以来、コンテナ化技術のトレンドをリードしてきました。Dockerは単一のコンテナの管理に非常に適しています。しかし、分散アプリケーションシステムが複数のコンテナで構成されている場合、システムが繰り返し進化するにつれて、使用されるコンテナやコンテナ化されたアプリケーションがますます多くなり、それらは高い同時実行性と高可用性のために数に分割されます。何百もの部品が原因で、管理とレイアウトが非常に困難になる可能性があります。コンテナーをグループ化して、すべてのコンテナーにまたがるネットワーキング、ストレージ、セキュリティ、テレメトリなどのサービスを提供する必要があるため、Kubernetesが登場しました。

Kubernetesの概要

k8sまたは略して「kube」とも呼ばれるKubernetesは、Linuxコンテナ操作を自動的に実装できるオープンソースプラットフォームです。これは、ユーザーがアプリケーションのコンテナー化プロセスで多くの手動のデプロイメントおよび拡張操作を節約するのに役立ちます。つまり、Linuxコンテナを実行するホストの複数のグループをまとめて収集でき、Kubernetesはこれらのクラスタを簡単かつ効率的に管理するのに役立ちます。さらに、これらのクラスターは、パブリック、プライベート、またはハイブリッドクラウド全体にホストを展開できます。したがって、急速な拡張を必要とするクラウドネイティブアプリケーション(Apache Kafkaによるリアルタイムデータストリーム処理など)の場合、Kubernetesは理想的なホスティングプラットフォームです。

SpringBootアプリケーションをK8に公開する従来の方法

SpringBootアプリケーションに関する限り、k8sの技術は成熟し続け、徐々にアプリケーション管理の主流になってきているため、アプリケーションをk8sプラットフォームにリリースする方法には次の手順が必要です。

image-20200718225935393

これらの手順では、チームはDockerイメージとk8s構成機能を構築する機能が必要です。これは実装が面倒であり、Docker構成とk8s構成を個別に管理する必要があります。アプリケーションの公開は、ワンクリックではありません。我々はDevOpsチームをやる、私たちは俊敏性をやると言う、何かを得ることができるよう、継続的インテグレーション、Docker以及k8s都是好技术,但是过于麻烦且不简单的步骤,确实是大部分公司或者项目想转型DevOps的门槛。および後にjenkins登場し、自動組立ラインの出現、私は助けることはできませんが、だと思うので第一次工业革命、本当に生産性の向上を持って、我々は最終的にすべての時間を持っていませんsshsftpdocker buildkubectl apply...

惊å '†ï¼??

初めて自動実行をスクリプト工业革命依存するだけで十分ですか?

è¿˜ä¸ ??够

Docker構成とk8s構成のSpringBootプロジェクト構築の難しさをさらに減らす必要があります。これにより、Dockerイメージの構築とk8sアプリケーションの構築があまり得意でない開発者でも、プロジェクトコマンドのリリースをすばやく実現できます。この時代では、 「第二次産業革命」として。

この時代の鍵となるツールは----Fabric8

Fabric8の概要

私が毎日直面する言葉は、ファブリックはブロックチェーンに従事していることです。githubにアクセスすると、彼に似た友人のFabric8に出会うことがあります。

Fabric8とは何ですか?

Fabric8は、KubernetesJenkinsに基づくマイクロサービスの継続的なリリース提供するオープンソースの統合開発プラットフォームです

ファブリックを使用すると、継続的デリバリーパイプラインを通じてマイクロサービスを簡単に作成、コンパイル、デプロイ、テスト、継続的改善とChatOpsを通じてそれら実行および管理できます。

Fabric8マイクロサービスプラットフォームは以下を提供します。

テキスト紹介

この記事では、fabric8によって提供されるmavenプラグインに基づいて、pom.xmlファイル構成を介して、Springbootアプリケーションをk8sにすばやく公開します。

練習

環境の準備

システム環境/依存関係 バージョン 備考
Ubuntu16.04 16.04 開発/コンパイル環境システム
ジャワ 1.8
SpringBoot 2.1
メイベン 3.3.9
k8s 1.16.1
fabric8-maven-plugin 4.0.0 https://github.com/fabric8io/fabric8-maven-plugin
ドッカー 18.04

エンジニアリング構成

まず第一に、mavenプラグインとしてのfabric8-maven-pluginにはアプリケーションコードの概要がないため、基本的にすべてのSpringbootエンジニアリングアプリケーションは、Mavenプラグイン構成をPOMに直接追加して、k8sに公開するコマンドのアプリケーションを実現できます。

次に、fabric8-maven-pluginのデフォルトの構成方法xmlベースの構成方法外部ファイルの構成方法について説明し、Springbootアプリケーションをk8sに直接公開できるようにします。

デフォルトの構成

名前が示すように、デフォルトの設定方法はカスタム処理を行わず、実装は次のとおりです。

  1. pom.xmlを編集する
 <plugin>
      <groupId>io.fabric8</groupId>
      <artifactId>fabric8-maven-plugin</artifactId>
      <version>${fabric8.maven.plugin.version}</version>
      <executions>
          <execution>
             <goals>
                <goal>resource</goal>
                <goal>build</goal>
                </goals>
            </execution>
     </executions>
                             
    </plugin>

  1. アプリケーションをk8sに公開する

    一般的に私の操作は

    mvn fabric8:deploy
    

    次に、ミラーを構築し、アプリケーションをk8sに公開すれば完了です。

    以下は、mvnによって実行されるメインログです。

    [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ test ---
    [INFO] Building jar: /home/lps/servers/jenkins/workspace/test-pipe1/target/test-2.0.2.RELEASE.jar
    [INFO] 
    [INFO] --- sofa-ark-maven-plugin:1.1.1:repackage (default-cli) @ test ---
    [INFO] 
    [INFO] --- spring-boot-maven-plugin:1.4.2.RELEASE:repackage (default) @ test ---
    [INFO] 
    [INFO] --- fabric8-maven-plugin:4.3.1:build (default) @ test ---
    [INFO] F8: Pulling from java-alpine-openjdk8-jdk
    [INFO] F8: Digest: sha256:e8a8e8f5fcd3b545c48ade9ab5716e9414c6f60a60f07a388ff9fafbd
    [INFO] F8: Status: Downloaded newer image for registry.testdemo.com/java-alpine-openjdk8-jdk:latest
    [INFO] F8: Pulled registry.testdemo.com/java-alpine-openjdk8-jdk:latest in 588 milliseconds
    [INFO] Reading assembly descriptor: /home/lps/servers/jenkins/workspace/test-pipe1/src/main/docker/assembly.xml
    [INFO] Copying files to /home/lps/servers/jenkins/workspace/test-pipe1/target/docker/testdemo/test/2.0.2.RELEASE/build/maven
    [INFO] Building tar: /home/lps/servers/jenkins/workspace/test-pipe1/target/docker/testdemo/test/2.0.2.RELEASE/tmp/docker-build.tar
    [INFO] F8: [testdemo/test:2.0.2.RELEASE]: Created docker-build.tar in 2 seconds 
    [INFO] F8: [testdemo/test:2.0.2.RELEASE]: Built image sha256:486a1
    [INFO] 
    [INFO] --- maven-install-plugin:2.4:install (default-install) @ test ---
    [INFO] Installing /home/lps/servers/jenkins/workspace/test-pipe1/target/test-2.0.2.RELEASE.jar to /root/.m2/repository/com/testdemo/test/2.0.2.RELEASE/test-2.0.2.RELEASE.jar
    [INFO] Installing /home/lps/servers/jenkins/workspace/test-pipe1/pom.xml to /root/.m2/repository/com/testdemo/test/2.0.2.RELEASE/test-2.0.2.RELEASE.pom
    [INFO] Installing /home/lps/servers/jenkins/workspace/test-pipe1/target/classes/META-INF/fabric8/kubernetes.yml to /root/.m2/repository/com/testdemo/test/2.0.2.RELEASE/test-2.0.2.RELEASE-kubernetes.yml
    [INFO] Installing /home/lps/servers/jenkins/workspace/test-pipe1/target/classes/META-INF/fabric8/openshift.yml to /root/.m2/repository/com/testdemo/test/2.0.2.RELEASE/test-2.0.2.RELEASE-openshift.yml
    [INFO] Installing /home/lps/servers/jenkins/workspace/test-pipe1/target/test-2.0.2.RELEASE-sources.jar to /root/.m2/repository/com/testdemo/test/2.0.2.RELEASE/test-2.0.2.RELEASE-sources.jar
    [INFO] Installing /home/lps/servers/jenkins/workspace/test-pipe1/target/classes/META-INF/fabric8/kubernetes.yml to /root/.m2/repository/com/testdemo/test/2.0.2.RELEASE/test-2.0.2.RELEASE-kubernetes.yml
    [INFO] Installing /home/lps/servers/jenkins/workspace/test-pipe1/target/classes/META-INF/fabric8/openshift.yml to /root/.m2/repository/com/testdemo/test/2.0.2.RELEASE/test-2.0.2.RELEASE-openshift.yml
    [INFO] Installing /home/lps/servers/jenkins/workspace/test-pipe1/target/test-2.0.2.RELEASE-sources.jar to /root/.m2/repository/com/testdemo/test/2.0.2.RELEASE/test-2.0.2.RELEASE-sources.jar
    [INFO] 
    [INFO] <<< fabric8-maven-plugin:4.3.1:deploy (default-cli) < install @ test <<<
    [INFO] 
    [INFO] 
    [INFO] --- fabric8-maven-plugin:4.3.1:deploy (default-cli) @ test ---
    [INFO] F8: Using Kubernetes at https://localhost:6443/ in namespace baas-test with manifest /home/lps/servers/jenkins/workspace/test-pipe1/target/classes/META-INF/fabric8/kubernetes.yml 
    [INFO] F8: Using namespace: baas-test
    [INFO] F8: Using namespace: baas-test
    [INFO] F8: Updating a Service from kubernetes.yml
    [INFO] F8: Updated Service: target/fabric8/applyJson/baas-test/service-test.json
    [INFO] F8: Using namespace: baas-test
    [INFO] F8: Updating ConfigMap from kubernetes.yml
    [INFO] F8: Updated ConfigMap: target/fabric8/applyJson/baas-test/configmap-test-config.json
    [INFO] F8: Using namespace: baas-test
    [INFO] F8: Updating Deployment from kubernetes.yml
    [INFO] F8: Updated Deployment: target/fabric8/applyJson/baas-test/deployment-test.json
    [WARNING] Error reading service account token from: [/var/run/secrets/kubernetes.io/serviceaccount/token]. Ignoring.
    [INFO] F8: HINT: Use the command `kubectl get pods -w` to watch your pods start up
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    
    

    上記のログから、fabric8:deployには実際には次の手順があることがわかります。

    image-20200718234641209

上記はデフォルト設定の具体的な動作ですが、pom.xmlを設定してmvnコマンドを実行すると非常に便利です。mvnコマンドの実行はjenkinsに置くことができます。そして、fabric8には3つの基本的なミラー、すなわち:

ミラー名 解説
fabric8 / java-alpine-openjdk8-jdk java8基本イメージを使用したaplineシステムに基づく
fabric8 / java-jboss-openjdk8-jdk java8基本ミラーを備えたjbossシステムに基づく
fabric8 / java-centos-openjdk8-jdk centosシステムとjava8基本イメージに基づく

默认是使用第一个镜像,其他两个以及自定义基础镜像可以通过后面的配置自定义化。

XML構成に基づく

xmlベースの構成方法は主に、前述のように、Dockerイメージの構築とk8sリリースの構成(デプロイメント、サービス、configmap)のカスタマイズを実現することです。アプリケーション構築のベースイメージとして独自のイメージを使用する方法

実装は次のとおりです。

 <plugin>
                <groupId>io.fabric8</groupId>
                <artifactId>fabric8-maven-plugin</artifactId>
                <version>${fabric8.maven.plugin.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>resource</goal>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
     <!-- 自定义配置 -->
                <configuration>
                    <enricher>
                        <config>
                            <!-- k8s service 配置 将service开放类型改成NodePort  -->
                            <fmp-service>
                                <type>NodePort</type>
                            </fmp-service>
                        </config>
                    </enricher>
                    <images>
                        <image>
                            <!-- 自定义镜像名 -->
                            <name>lps/${project.artifactId}:${project.version}</name>
						
                            <build>
                                <!-- 自定义基础镜像-->
                                <from>registry.lps.com/fabric-base-jdk8</from>
                                <!-- 自定义文件发布 比如将项目 a-jarwithdepences.jar发布到镜像目录/deployment / -->
                                <assembly>
                                    <descriptor>assembly.xml</descriptor>
                                    <targetDir>/deployments</targetDir>
                                </assembly>

                            </build>
                        </image>
                    </images>

                </configuration>
            </plugin>

上記で一般的に使用されるいくつかの構成を示します。xml構成の詳細については、https//maven.fabric8.io/#xml-configurationを参照してください。

外部ファイルに基づく設定

外部構成ファイルに基づくのは、src/main/fabric8ディレクトリにあるYAML構成を使用する外部構成です

主なプロジェクトカタログは以下の通りです


├── README.md
├── pom.xml
└── src
    ├── main
    │   └── java 
    │   └── resource
    │   └── fabric8
             ├── service.yml 
             ├── deployment.yml 
             ├── configmap.yml 

主に、src/main/fabric8ディレクトリの3つのファイルは、主にk8sデプロイメント、サービス、configmapの構成に対応しています。fabric8-maven-pluginは、ビルド時にこのディレクトリ内のファイルを自動的に読み取り、ファイル定義のパラメーターに従って構成を生成します(プラグイン自体にデフォルトがあります)構成、カスタム構成ではカスタムパーツを変更するだけで、残りは自動的に生成されます)

テンプレートは次のとおりです。

deployment.yml

spec:
  replicas: 1
  template:
    spec:
      volumes:
        - name: config
          gitRepo:
            repository: 'https://github.com/jstrachan/sample-springboot-config.git'
            revision: 667ee4db6bc842b127825351e5c9bae5a4fb2147
            directory: .
      containers:
        - volumeMounts:
            - name: config
              mountPath: /app/config
          env:
            - name: KUBERNETES_NAMESPACE
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.namespace
      serviceAccount: ribbon

ボリューム、コンテナー、およびserviceAccontの構成は上記でカスタマイズされ、残りの構成はデフォルトのテンプレートに従って生成されます。

この方法で構成のカスタマイズを実現できます。これは、xmlと組み合わせて使用​​できます。

Fabric8 mvnコマンドの概要

fabric8:build

ビルドイメージ

使用する:

mvn  fabric8:build

fabric8:push

プッシュミラー

使用する:

mvn  fabric8:push

プライベートウェアハウスにプッシュするには、maven構成ファイルでsettings.xmlウェアハウスのURLパスワード構成する必要があります

<?xml version="1.0"?>
<settings>

  <profiles>
    <profile>
      <id>mydocker</id>
      <properties>
          <!-- 配置docker host/仓库地址 通过环境变量获取-->
        <docker.registry>${env.DOCKER_REGISTRY}</docker.registry>
        <docker.url>${env.DOCKER_HOST}</docker.url>
      </properties>
    </profile>
  </profiles>
<!-- 配置用户名密码 -->
   <servers>
       <server>
           <id>mydocker</id>
           <username>jolokia</username>
           <password>jolokia</password>
       </server>
        
  </servers>

  <activeProfiles>
    <activeProfile>mydocker</activeProfile>
  </activeProfiles>
</settings>

fabric8:deploy

アプリケーションをk8sに公開する

1.環境変数を設定する

export KUBERNETES_TRUST_CERTIFICATES=true \
&& export KUBERNETES_MASTER=${KUBERNETES_MASTER} \
&& export FABRIC8_PROFILES=kubernetes \ 
&& export DOCKER_HOST=${DOCKER_HOST} \
&& export KUBERNETES_NAMESPACE=${KUBERNETES_NAMESPACE} \
  • $ {KUBERNETES_MASTER}:k8sネットワーク内のマスターのAPIアドレス。例:http:// localhost:6443
  • $ {DOCKER_HOST}:次のようなDOCKERサービスアドレス:http:// localhost:2375
  • $ {KUBERNETES_NAMESPACE}:アプリケーションが公開されているk8の名前空間。例:test

2.コマンドを実行します

 mvn fabric8:deploy

fabric8:resource

src/main/fabric8ディレクトリ内のカスタムymlファイルに従ってk8s構成ファイルを生成します。これは通常、生成されたymlに有効なカスタム構成があるかどうかを確認するために使用されます

 mvn fabric8:resource

総括する

fabric8-maven-pluginは、現在、k8sにSpringbootプロジェクトを公開するための最良のソリューションの1つである必要があります。これにより、構成の構築の難しさが大幅に軽減され、Springbootプロジェクトからk8sで実行されているサービスに単一のコマンドでさえ実現できるため、私はそれを強くお勧めします。

より良い計画がある場合は、小さな計画にコメントしてください。

おすすめ

転載: blog.csdn.net/qq_28540443/article/details/107437916
おすすめ