NodeJS 服务 Docker 镜像极致优化指北( 四 )

Cluster IP,因此跟 StatefulSet 对接的 Service 被称为 Headless Service
通过这里我们就应该明白 , 如果在 k8s 上部署的是单个服务,或是多服务间没有依赖关系 , 那么 Deployment 一定是简单而又效果最佳的选择,自动调度,自动负载均衡 。而如果服务的启停必须满足一定顺序,或者每一个 pod 所挂载的数据 volume 需要在销毁后依然存在,那么建议选择 StatefulSet
本着如无必要,勿增实体的原则,强烈建议所有运行单个服务工作负载采用 Deployment 作为 Controller 。
写在结尾一通研究下来,差点把一开始的目标忘了,赶紧将 Docker 重新构建一遍,看看优化成果 。

NodeJS 服务 Docker 镜像极致优化指北

文章插图
可以看到 , 对于镜像体积的优化效果还是不错的,达到了 10 倍左右 。当然,如果项目中不需要如此高版本的 node 支持,还能进一步缩小大约一半的镜像体积 。
之后镜像仓库会对存放的镜像文件做一次压缩,以 node14 打包的镜像版本最终被压缩到了 50M 以内 。
NodeJS 服务 Docker 镜像极致优化指北

文章插图
当然,除了看得到的体积数据之外,更重要的优化其实在于,从面向物理机的服务向容器化云服务在架构设计层面上的转变 。
容器化已经是看得见的未来,作为一名开发人员,要时刻保持对前沿技术的敏感,积极实践,才能将技术转化为生产力,为项目的进化做出贡献 。
参考资料:
  1. 《Kubernetes in action》--Marko Luk?a
  2. Optimizing Docker Images

推荐阅读