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

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

文章插图
当然,除了看得到的体积数据之外,更重要的优化其实在于,从面向物理机的服务向容器化云服务在架构设计层面上的转变 。
容器化已经是看得见的未来,作为一名开发人员,要时刻保持对前沿技术的敏感,积极实践,才能将技术转化为生产力,为项目的进化做出贡献 。
参考资料:
- 《Kubernetes in action》--Marko Luk?a
- Optimizing Docker Images
推荐阅读
- 记一次 .NET 某企业OA后端服务 卡死分析
- 配置DNS域名解析服务
- CRESDA 陆地观测卫星数据服务订单ftp地址错误—已解决不能下载问题
- Docker | 数据持久化与数据共享
- Docker | Compose创建mysql容器
- 糟了,线上服务出现OOM了
- Docker 部署Kibana
- Docker | 容器数据卷详解
- 使用docker-compose安装Prometheus
- Docker | 部署nginx服务