Docker镜像仓库过大的解决方案(使用Kubernetes的容器设计模式的解决方案)

公司应用Kubernetes已经有大半年的时间了,一些问题开始暴露出来.

问题

  • 镜像包过大,Harbor 存储空间不足了(貌似不是分层存储)

这就是个悲剧!
对于一个成本有限的公司来说,架构师就必须把成本作为一个考量的维度.

最初上线的系统在CI阶段是会把WAR文件和基础TOMCAT结合在一起打出一个业务的镜像包.

然后业务每打包一次,就会有一个业务镜像,灰常大!
临时的解决方案是每个业务只保留3个最新版以及线上版本,但是还是捉襟见肘!
甚至把基础TOMCAT包中的JDK换成JRE!但是都不解决根本问题.

背景是公司服务化做的比较好,拆出来的应用有300多个!
对于存储来说这就是一个巨坑!

解决方案

重新学习了一下kubernetes的课程,看到了"容器设计模式",终于发现了一个比较好的解决方案,要感谢张磊老师.

Pod是一个逻辑概念,本质是同一个Pod中的容器可以共享NETWORK namespaceVolume.

那么是不是说我在一个Pod中启动2个容器,一个TOMCAT,一个WAR.他们共享一个路径,启动的时候让WAR包先启动,是不是问题就完美解决了!

参考yaml文件

apiVersion: v1
kind: Pod
metadata:
  name: javaweb-2
spec:
  initContainers:
  - image: rockyhsu/hello:v2
    name: war
    command: ["cp", "/hello.war", "/app"]
    volumeMounts:
    - mountPath: /app
      name: app-volume
  containers:
  - image: rockyhsu/tomcat:7.0
    name: tomcat
    command: ["sh","-c","/root/apache-tomcat-7.0.42-v2/bin/start.sh"]
    volumeMounts:
    - mountPath: /root/apache-tomcat-7.0.42-v2/webapps
      name: app-volume
    ports:
    - containerPort: 8080
      hostPort: 8001 
  volumes:
  - name: app-volume
    emptyDir: {}

2019/7/2追加内容

优点

这个模式的最大优点其实是解耦了基础包和业务的资源包.
现在公司升级基础包要便捷很多.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容