美文网首页程序员
Spring on Kubernetes 最佳实践(二) Ja

Spring on Kubernetes 最佳实践(二) Ja

作者: yongaliang | 来源:发表于2020-04-18 18:37 被阅读0次

    什么是Jib?

    • Jib 是由Google提供的一个简化Docker容器构建的工具
    • 基于Maven或Gradle插件的方式运行
    • 不需要Docker deamon
    • 自动实施很多Docker的最佳实践

    传统构建和Jib构建的区别

    传统构建镜像的方式

    • Build Jar 包
    • 通过Docker构建镜像
    • 上传镜像到镜像仓库
    fkzRqe2.png

    Jib构建镜像方式

    • 一行命令构建,自动上传到镜像仓库


      b4uolYy.png

    添加Jib到POM

    打开Spring Boot应用的pom.xml文件,添加下面的plugin 和build 选项

    ...
    <build>
       <plugins>
          ...
          <plugin>
              <groupId>com.google.cloud.tools</groupId>
              <artifactId>jib-maven-plugin</artifactId>
              <version>1.8.0</version>
              <configuration>
                 <from>
                    <image>openjdk:8u222-slim</image>
                 </from>
                 <to>
                    <image>k8s-demo-app</image>
                 </to>
                 <container>
                    <user>nobody:nogroup</user>
                 </container>
              </configuration>
           </plugin>
           ...
       </plugins>
    </build>
    ...
    

    使用Jib构建一个Docker容器

    现在构建一个Spring Boot应用的容器将会变得简单

    $ ./mvnw clean compile jib:dockerBuild
    

    输出如下

    [INFO] Built image to Docker daemon as k8s-demo-app
    [INFO] Executing tasks:
    [INFO] [==============================] 100.0% complete
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  01:21 min
    [INFO] Finished at: 2020-04-18T17:59:19+08:00
    [INFO] ------------------------------------------------------------------------
    

    NOTE: This still uses your local Docker dameon to build the container


    使用Jib推送容器到私有镜像仓库

    由于网络的原因,推送到 Docker Hub 在国内不是一个很好的选择,这里推荐两个国内的镜像仓库


    登录私有镜像仓库

    • 你需要先登录到镜像仓库,Jib才能把镜像推送到私钥的镜像仓库中,此处使用腾讯容器服务作为演示
    docker login --username=your_username --password=your_password ccr.ccs.tencentyun.com
    WARNING! Using --password via the CLI is insecure. Use --password-stdin. 
    Login Succeeded
    

    修改Jib Plugin 配置

    回到pom.xml文件,需要修改一下Jib的配置,如镜像名字.我们还添加了一个执行目标,以便在运行Maven构建后进行容器构建并推送至镜像仓库

    请务必替换 NAMPSPACE 为你自己的命名空间

    <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>jib-maven-plugin</artifactId>
        <version>1.8.0</version>
        <configuration>
            <from>
                <image>openjdk:8u222-slim</image>
            </from>
            <to>
                <image>ccr.ccs.tencentyun.com/[namespace]/k8s-demo-app</image>
            </to>
            <container>
                <user>nobody:nogroup</user>
            </container>
        </configuration>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>build</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    
    

    构建和部署容器

    • 现在你应该可以使用Maven build, 它将构建容器并将容器推送到镜像仓库
        ./mvnw clean package
    
    • 回到镜像仓库,你应该看到了你新构建的容器在镜像仓库中


      test2.png

    部署到Kubernetes

    参考第一篇文章,在deployment.yaml里面修改一些 images

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      creationTimestamp: null
      labels:
        app: k8s-demo-app
      name: k8s-demo-app
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: k8s-demo-app
      strategy: {}
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: k8s-demo-app
        spec:
          containers:
          - image: ccr.ccs.tencentyun.com/[YONUR_NAMESPACE]/k8s-demo-app:latest
            name: k8s-demo-app
            imagePullPolicy: IfNotPresent
            resources: {}
    status: {}
    

    执行命令部署

    kubectl apply -f ./k8s
    

    测试

    curl http://localhost:30080
    hello world
    

    简单吧,当你修改了代码之后,你只需要两条命令,就能将新的应用部署到kubernetes

    ./mvnw clean package
    kubectl apply -f ./k8s
    

    代码地址

    相关文章

      网友评论

        本文标题:Spring on Kubernetes 最佳实践(二) Ja

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