但是,这是合适的做法么?去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.8
IMAGE CREATED CREATED BY SIZE COMMENT
2e01f547f003 12 days ago /bin/sh -c set -x && apk add --no-cache … 78.6 MB
12 days ago /bin/sh -c #(nop) ENV JAVA_ALPINE_VERSION… 0 B
12 days ago /bin/sh -c #(nop) ENV JAVA_VERSION=8u181 0 B
7 weeks ago /bin/sh -c #(nop) ENV PATH=/usr/local/sbi… 0 B
7 weeks ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/lib/… 0 B
7 weeks ago /bin/sh -c { echo