应用容器化

为什么要应用容器化?

  1. 可扩展性

如果业务应用会突然有大量业务请求的情况,传统的业务部署方式不太能应对突增的请求。
简单比方,支撑一个web应用业务,需要两台服务器跑web,两台服务器跑数据库,再上个负载均衡。
如果采用传统部署方式,需要增大业务容量的话只能增加服务器/虚拟机数量,而增加服务器/虚拟机的过程并不能特别简单快速,可能需要在新服务器上重新部署应用,重新配置等,操作非常繁琐。
如果应用容器化了,针对突增的性能需求,kubernets之类的容器解决方案可以通过快速增加资源池:部署新服务器,新服务器上快速部署k8s环境,接入到k8s资源池内。然后k8s就能自动利用新部署的资源快速复制容器的instance来应对突增容量。

  1. 方便移动和备份

如果应用使用了容器需要备份,则需要备份的实际内容只有容器的可持续volume,应用本身运行需要的组件及环境可以通过镜像快速部署,而业务数据等都存储在可持续性volume里面,而且可持续volume能直接上云,挂载在OSS,s3 bucket上,避免本地硬件问题导致的数据丢失情况。

  1. 避免环境兼容问题

假设你只有一台服务器,你需要在服务器上跑各种各样的应用和软件,不可避免地会出现环境兼容性问题,比如有的应用要依靠golang,有的依靠python2,有的依靠python3等等,在一个操作系统上维护这样的环境是噩梦,而容器因为使用了linux不同的namespace,会有完全隔离的环境,不需要考虑兼容问题,直接一个namespace跑一个业务,互不影响。

  1. 性能

不使用容器的话往往需要用虚拟机提供给不同的用户和业务,而虚拟化一定会有相当程度的性能损失,容器本身都运行在一个linux内核上,不存在性能丢失问题。

应用容器化一般步骤

在dockerhub找到你原来跑的应用的容器版本
用docker-compose构造好service的配置文件,运行测试
将docker-compose配置转移到kubernets配置上(kompose)