Spring Boot 应用在 kubernetes 的 sidecar 设计与实战

本文介绍了如何在Kubernetes环境中采用sidecar模式部署Spring Boot应用。通过官方文档的指导,设计了一个由两个容器组成的Pod,其中一个作为Init Container负责复制jar文件,另一个作为长期运行的服务容器。在升级过程中,仅更新应用jar的镜像,实现了应用的无缝升级。
摘要由CSDN通过智能技术生成

Spring Boot 应用

  • 基于 Spring Boot 框架的应用,通常会构建成 XXX.jar 文件,执行 java -jar XXX.jar 来运行该应用;

Docker 下的 Spring Boot 应用镜像

  • Docker 环境下,通常用 Maven 的 docker-maven-plugin 插件将应用打包成镜像,例如以 java:8u111-jdk 作为基础镜像再加入 jar 文件,这样容器启动的时候执行 java -jar XXX.jar 就能将应用运行起来了;

传统思路

  • Spring Boot 应用镜像在 kubernetes 声明为 Pod,即可正常运行;

  • 但是,这是合适的做法么?去 K8S 官网需要一些理论上的指导吧;

寻找官方的理论依据

  • 官方文档地址:https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/

  • 其中对 Pod 中多个容器的关系描述如下:

  • 上图红框中提到一个容器基于共享资源对外提供服务,另一个"sidecar"容器负责更新这些共享资源;

  • 在 Kubernetes 中文社区的文档中也对此作了阐述,地址是:http://docs.kubernetes.org.cn/312.html

  • 在提到 Pod 中的 sidecar 模式时,官方文档用到"relatively advanced"来形容,进一步证实了当下该模式的正确性,如下图:

  • 具体的实现模型如下图:

Spring Boot 应用的 sidecar 设计

  • 根据 kubernetes 官方文档的指导,再结合 SpringBoot 应用的特点,我设计出的 sidecar 部署方式如下:

  • 该应用的业务服务被封装在一个 Pod 定义中,该 Pod 由两个容器组成;

  • 绿色容器是来自 OpenJDK 官方镜像: openjdk:8u181-jre-alpine3.8 ,用 docker history 命令查看体积,几十兆不算大:

[root@localhost work]# docker history openjdk:8u181-jre-alpine3.8IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT2e01f547f003        12 days ago         /bin/sh -c set -x  && apk add --no-cache  ...   78.6 MB             <missing>           12 days ago         /bin/sh -c #(nop)  ENV JAVA_ALPINE_VERSION...   0 B                 <missing>           12 days ago         /bin/sh -c #(nop)  ENV JAVA_VERSION=8u181       0 B                 <missing>           7 weeks ago         /bin/sh -c #(nop)  ENV PATH=/usr/local/sbi...   0 B                 <missing>           7 weeks ago         /bin/sh -c #(nop)  ENV JAVA_HOME=/usr/lib/...   0 B                 <missing>           7 weeks ago         /bin/sh -c {   echo '#!/bin/sh';   echo 's...   87 B                <missing>           7 weeks ago         /bin/sh -c #(nop)  ENV LANG=C.UTF-8             0 B                 <missing>           7 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/sh"]              0 B                 <missing>           7 weeks ago         /bin/sh -c #(nop) ADD file:25c10b1d1b41d46...   4.41 MB

复制代码

  • 之所以要用 jre-alpine 版本,是因为 8u181-jdk 版本相比之下大了很多,如下所示:

[root@localhost work]# docker history openjdk:8u181-jdkIMAGE               CREATED             CREATED BY                                      SIZE                COMMENT954739b8bdfb        7 days ago          /bin/sh -c /var/lib/dpkg/info/ca-certifica...   355 kB              <missing>           7 days ago          /bin/sh -c set -ex;   if [ ! -d /usr/share...   348 MB              <missing>           7 days ago          /bin/sh -c #(nop)  ENV CA_CERTIFICATES_JAV...   0 B                 <missing>           7 days ago          /bin/sh -c #(nop)  ENV JAVA_DEBIAN_VERSION...   0 B                 <missing>           3 weeks ago         /bin/sh -c #(nop)  ENV JAVA_VERSION=8u181      
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值