很多公司技术支持岗位的工作,如配置域名,部署环境,修改复位配置,服务重启,扩容缩容,梳理和完善监控,根据开发的需要查找日志等工作,需要和开发进行大量的沟通,如什么是外网域名,什么是内网域名、A name、C name,防火墙规则该如何设定,操作系统等基础环境需要什么依赖。因为很多研发不了解运维的术语和知识点,导致沟通困难,效率很低。而且这样的需求还很多,把运维压的喘不过气,占用了几乎所有的时间,但是开发的需求可能还是迟迟不能满足。
这样的公司可能遇到了以下问题:
如何才能解决?答案是流程化、标准化、自动化、平台化。
即主动梳理运维工作任务,形成标准化的操作流程,尤其是针对需要多人协作完成的任务,比如应用的发布部署,把流程固化到流程平台系统中,保证每个人执行都能按照流程严格执行,不会有哪些环节遗漏,而且当前的流程状态对所有人都可见,能清晰的看到谁正在处理,处理人也会更主动尽快的完成该任务。
从架构角度按照应用类别制定应用的部署标准,比如Web类型的应用,服务化的应用(我们内部用的.NET Core),或者是比较新的微服务的应用(.NET Core等),部署脚本和工具平台按照约定好的规范进行设计开发(基于Kubernetes),减少了因为应用种类繁多导致工具和平台的复杂。
很多公司早期写了非常多的脚本,任务执行机到要执行任务的服务器之间通过SSH免密钥认证,再根据需要批量执行命令。随着服务器规模和应用数量的扩张,很快脚本执行的方式无法满足业务发展,难以理解,同一个类型的任务多个脚本并存,存在误操作,缺乏清晰的操作历史记录和回滚机制,即使后续替换了如Puppet,Saltstack,Ansible这样的配置管理工具,但根本问题并没有解决。
平台化一定要在前面三条的基础上进行建设,如果没有清晰的流程,明确的标准,平台建设起来也只是自动化工具的集成,解决不了公司核心问题。
以下说的平台化内容主要是PaaS平台化,即主要从应用和中间件的角度,这里不讨论IaaS的内容。
PasS平台化将问题的关注点从基础资源上升到了应用层面,目标是提供一个帮助开发人员运行、管理应用的平台,让使用者更关注运行的代码(业务逻辑)。
PaaS能解决的问题:
随着Docker容器技术的出现,让我们有了更合适的工具建设PaaS平台,具备了基于应用构建服务的能力。 在Docker容器调度框架上,我们自然选择了Kubernetes平台。Kubernetes具有资源调度、服务发现、服务编排、资源逻辑隔离、服务自愈、安全配置管理、Job任务支持、自动回滚、内部域名服务、健康检查、有状态支持、运行监控/日志、扩容缩容、负载均衡、灰度升级、容灾恢复、应用HA等。Kubernetes的核心是如何解决自动部署,扩展和管理容器化(containerized)应用程序。
下图是一张最小化的PaaS 架构图:
Kubernetes 选用腾讯云 TKE ,TKE 服务在集群内默认启用了基于腾讯云负载均衡器实现的 l7-lb-controller
,支持 HTTP、HTTPS,同时也支持 nginx-ingress 类型,可以根据业务需要选择不同的 Ingress 类型。
具体实施时,主要有几个基础组件需要开发:
虽然我们属于创业公司,我们相信技术的力量,技术帮助我们实现业务的持续健康发展,从发展的初期就规避很多公司的一些困境,一个中小企业做成这样后,日常运维的工作量即可大量减少,两三个人就能完成日常的应用运维工作,有兴趣地话可以去挑战一下。当然做完这些后,还只是一个小型的PaaS平台,我们基于腾讯云的TKE 平台构建这样一个小型的PaaS平台。
如果是再复杂一点的PaaS平台,应该还有哪些要继续做的呢?环境管理:即一套平台管理多套不同的Kubernetes集群、安全管理、流程管理、计费管理等功能模块。还有因为规模增加和更高的可靠性要求,对应的网络,IO等各种优化。其实还有很多功能就不一一列举了,可以根据自己的实际情况添加功能模块,设计有自己公司特色的PaaS平台。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。