上面左边是我的个人微信,如需进一步沟通,请加微信。 右边是我的公众号“Openstack私有云”,如有兴趣,请关注。
前段时间去参加一个devops的峰会,参会的人大多数都是互联网企业的从业人员,讲师也多是互联网企业的技术专家,主题都是开源社区现阶段比较活跃的项目,具体的内容我记得不是很多,对于我个人来讲,参加此次峰会后我最大的感触或者收获,就是看到了现在的IT技术发展趋势向容器化方向发展已经确定无疑。
对于生产平台的全生命周期管理,是每一个IT建设和维护人员所要面对的难题。让我们设想一个场景:
一个IT互联网企业运营一个互联网产品,有复杂的业务逻辑,业务程序和数据库及接口程序等,起始阶段需要搭建基础IT硬件设施提供操作系统和网络、存储,为了加快建设步伐,可以直接使用公有云,然后在私有云或者公有云上面部署自己的应用和数据库网关接口等等,然后对外开始提供业务。接着随着业务的扩张,业务在两个维度开始扩容,一方面是业务功能扩容,一方面是业务量的扩容,两个维度在同步发生,此时运维人员面对严峻的挑战,既要平行扩容相应的功能节点,比如web服务和数据库服务器升级,还要测试新功能并安全平稳升级新业务系统版本。
现在大部分的企业对于上面场景的两项工作都是会花费巨大的时间和精力去进行管理,每次的变更都需要提前规划并制定实施方案并在合适的时间割接升级或者扩容。在基础设施领域出现了云计算,解决了基础计算资源存储资源网络资源的快速交付和灵活管理的问题,在业务管理方面同样也出现了革命性的解决方案,那就是容器编排技术,具体的产品有以kubernetes(K8S)为代表的开源版本,和以红帽Openshift为代表的各个商业版本。有了这两个解决方案,对于上面提到的那个场景就有了很好的应对方案。提炼一下,如果从开源角度,那就是:
Openstack + Kubernetes(K8S)!
Openstack其实已经在近两年已经开始拥抱容器技术了,现在最活跃的一个子项目之一Kolla,就是通过docker来对Openstack的组件进行部署和管理,即Openstack本身就被容器化了,具体可以参考另一篇文章“openstack 之 Kolla部署指南(容器化方式)” 。K8S是容器编排技术,用于生产环境情景下的应用系统管理,K8S的官方定义:
Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.
Kubernetes是一个开源系统,用于自动化容器化应用程序的部署,扩展和管理。
Kubernetes 已经承担了google的生产应用已经有15年,让google有能力做到一周内10亿级别的容器的增减调节而不增加运维团队;无论的你的应用多么的复杂,它都能从容应对,自动调节;它可以在私有云、混合云、公有云、原始的硬件平台环境运行,没有环境依赖。它主要有以下的特性:
自动管理容器
根据资源需求和其他约束自动放置容器,同时不牺牲可用性。混合关键和尽力而为的工作负载,以提高利用率并节省更多资源。
自愈
重新启动失败的容器,在节点死亡时替换容器并重新安排容器,杀死不响应用户定义运行状况检查的容器,并在客户端准备好提供服务之前不会将它们通告给客户端。
水平缩放
使用一个简单的命令,使用UI或根据CPU使用情况自动扩展和缩小您的应用程序。
服务发现和负载平衡
无需修改应用程序即可使用不熟悉的服务发现机制。Kubernetes为容器提供了自己的IP地址和一组容器的单个DNS名称,并且可以在它们之间进行负载平衡。
自动发布和回滚
Kubernetes逐步推出对应用程序或其配置的更改,同时监视应用程序运行状况以确保它不会同时终止所有实例。如果出现问题,Kubernetes会为您回滚更改。充分利用日益增长的部署解决方案生态系统。
密码和配置管理
部署和更新密码和应用程序配置,无需重新构建映像,也不会在您的堆栈配置中暴露秘密。
存储编排
自动安装您选择的存储系统,无论是从本地存储,公共云提供商(如GCP或AWS)还是网络存储系统(如NFS,iSCSI,Gluster,Ceph,Cinder或Flocker)。
批量执行
除了服务之外,Kubernetes还可以管理您的批处理和CI工作负载,并根据需要替换失败的容器。
所以可以说,如果要讲到生产环境的搭建和运维,就不能不对Kubernetes重点关注,因为这是一个趋势。