02.自动化运维

自动化运维

近几年随着大数据技术的爆发、系统规模和复杂度的提升以及行业开始对 ServiceMesh、FaaS 等云原生技术体系的探索,自动化运维与管控在业界及公司内的重要性越发凸显。直观来看,服务器的数量迅速地从几十台、上百台增加到成千上万台。企业内部服务器数量的大幅增长,使得服务器出现故障的频次也大幅增加,手工运维时代的瓶颈随之到来。运维工程师越来越难以远程登录每一台服务器去搭建环境、部署应用、清理磁盘、查看服务器状态以及排查系统错误,此时急需自动化运维体系与开发技术体系配合。

从工具的角度来看,自动化运维工具主要包括两大类:监控自动化工具以及流程自动化工具:

  • 监控自动化工具可以对服务器的 CPU、内存、磁盘 IO、网络 IO 等重要配置进行主动探测监控,一旦指标超过或接近阈值则自动通过邮件、短信等方式通知相关责任人。使用 Nagios、Zabbix 等系统监控工具可以有效实现这一点。

  • 流程自动化工具主要对服务器进行维护,同时实现应用上线部署等日常操作的自动化和标准化。Puppet、Chef、Ansible、SaltStack 等自动化运维管理工具的出现,快速地将运维工作推向自动化,让一名运维工程师可以很容易地维护成千上万台服务器。

从解决问题的角度来看,自动化运维又可以分为三个发展阶段:

  • 操作自动化:采用集成的脚本或 Web 类工具来解决同一类问题。

  • 场景自动化:基于自动化系统平台,能够结合当前系统上下文和外部环境并基于事先定义好的条件来做一系列的变更或分析需求。

  • 数据驱动智能化:在场景自动化的基础上,结合严格定义的系统指标或业务指标(Metrics),具备系统关键指标的实时采集、分析、计算能力,再基于特定的算法模型主动识别确定性问题并驱动问题的告警/预警、路由和解决执行。

Kubernetes 细化的应用程序的分解粒度,同时将服务发现、配置管理、负载均衡和健康检查等作为基础设施的功能,简化了应用程序的开发。而 Kubernetes 这种声明式配置尤其适合 CI/CD 流程,况且现在还有如 Helm、Draft、Spinnaker、Skaffold 等开源工具可以帮助我们发布 Kuberentes 应用。

有了基于 Kubernetes 的 CI/CD 流程后,又诞生了 GitOps 和 SecOps(Security Operation)。