随着互联网的发展,目前云原生的趋势已经是势在必行,例如容器化、微服务、DevOps、持续交付等等等等,都在大大冲击着传统架构的模式,逼着运维人员去转型。
先来讲一下我,我也是从传统架构过渡过来的,之前公司的业务模型全部依托于宿主机,虽说也是分布式部署,可扩展,勉强可以算是微服务,但远远达不到持续交付的层次。因此,之前我们尝试过 ansible 以及 shell 脚本作为持续交付的一种方式。
ansible 在我看来,也能和云原生扯上关系,毕竟在运维层面也是可以持续交付的一种方式,于是今年着重与学习 ansibie 的语法与原理,让管理起服务来不在那么累。(PS:之前有的项目 5、60 台机器,升级一次真的就是通宵了,ansible 至少可以省去几倍的时间)
后面公司看着这样不行啊,人力成本太高了,于是容器化被我们采用了,目前使用 docker-compose 编排,生成容器,部署快了很多,再结合 ansible,一套几十台机器的集群,基本也是很快就能完成。
那么,docker 的好处有哪些呢?我认为有以下几点:
1、更快地交付部署
参考之前,升级一次大集群,手工敲需要通宵,如今只需要几十分钟
2、节省开支
容器化替代传统的虚拟化模式,最显著的特点就是内核虚拟化,使每个物理机的机器的资源都能得到最大的发挥,因此说是节省了开支
3、移植性
docker 可以将一个开发环境轻松地移植到其他环境中,避免了传统项目的繁琐移植过程。同时,Docker 容器也可以轻松扩展,可以部署在公共服务器上,方便团队协作和快速部署。
4、一致的运行环境
使用 docker,不管在什么环境下,只要安装 docker 服务,都可以运行起和你的测试环境一模一样的程序,不会说因为换了操作系统,应用就无法生成。
那 docker 好处这么多,就没有坏处了吗?答案也是有的
1、安全问题
如果 Docker 没有正确配置,那么一个容器中的恶意代码可以轻易地影响到主机上的其他容器以及主机本身的安全。
2、存储问题
当使用大量容器时,存储和管理容器映像可以变得非常困难。这可能需要使用分布式存储或其他解决方案来管理管理大量容器的存储。
3、性能问题
在某些情况下,容器和虚拟机相比会导致性能损失。这些性能问题越来越少,但是他们仍然需要考虑。
4、网络问题
Docker 可能会在网络配置上存在一些问题,如果除了问题会影响宿主机上所有的容器。
5、资源消耗
使用 Docker 必须占用一些资源,包括 CPU、内存、磁盘等等。如果运行容器的主机资源不足,可能会导致性能问题。
我们选择了传统+容器化的方式。例如,数据库,队列等关键性组件选择传统部署,直接运行在宿主机上,以便他能获得更直接的资源,也避免由于磁盘或者网络问题,造成数据都是。其余业务软件运行在容器化里,便于扩展与维护。