DevOps - 工具链
不要满足于使用世界上已存在的各种方法和技术,而应重点放在希望达到的效果上!
单单使用工具不难,困难的是在团队开发中熟练使用,并形成一套理想的工作流程,只有在团队中工具和思想才能发挥最大价值。
CNCF Landscape
- https://landscape.cncf.io/
- https://github.com/cncf/landscape
Cloud Native Computing Foundation,云原生计算基金会(CNCF)是一个开源软件基金会,它致力于云原生(Cloud Native)技术的普及和可持续发展。
Reference:一文带你读懂CNCF Landscape https://zhuanlan.zhihu.com/p/68881339
CNCF Landscape路线图
The Cloud Native Trail Map (png, pdf) is CNCF's recommended path through the cloud native landscape.
从实践步骤上帮助用户梳理了整个云原生应用的最佳流程。
整个路线图分成了十个步骤,每个步骤都是用户或平台开发者将云原生技术在实际环境中落地时,需要循序渐进思考和处理的问题:
1. 容器化。
目前最流行的容器化技术是Docker,你可以将任意大小的应用程序和依赖项,甚至在模拟器上运行的一些程序,都进行容器化。
随着时间的推移,你还可以对应用程序进行分割,并将未来的功能编写为微服务。
2. CI/CD(持续集成和持续发布)。创建CI/CD环境,从而使源代码上的任意修改,都能够自动通过容器进行编译、测试,并被部署到预生产甚至生产环境中。
3. 应用编排。Kubernetes是目前市场上应用编排领域被最广泛应用的工具,Helm Charts可以用来帮助应用开发和发布者用于升级Kubernetes上运行的应用。
4. 监控和分析。在这一步中,用户需要为平台选择监控、日志以及跟踪的相关工具,例如将Prometheus用于监控、Fluentd用于日志、Jaeger用于整个应用调用链的跟踪。
5. 服务代理、发现和治理。CoreDNS、Envoy和LInkerd可以分别用于服务发现和服务治理,提供服务的健康检查、请求路由、和负载均衡等功能。
6. 网络。Calico、Flannel以及Weave Net等软件用于提供更灵活的网络功能。
7. 分布式数据库和存储。分布式数据库可以提供更好的弹性和伸缩性能,但同时需要专业的容器存储予以支持。
8. 流和消息处理。当应用需要比JSON-REST这个模式更高的性能时,可以考虑使用gRPC或者NATS。
gRPC是一个通用的RPC(远程调用)框架(类似各种框架中的RPC调用),NATS是一个发布/订阅和负载均衡的消息队列系统。
9. 容器镜像库和运行环境。Harbor是目前最受欢迎的容器镜像库,同时,你也可以选择使用不同的容器运行环境用于运行容器程序。
10. 软件发布。最后可以借助Notary等软件用于软件的安全发布。
CNCF Landscape全景图
试图从云原生的层次结构,以及不同的功能组成上,让用户了解云原生体系的全貌,并帮助用户在不同组件层次去选择恰当的软件和工具进行支持。
- cloud native landscape (png, pdf) https://landscape.cncf.io/images/landscape.png
- serverless landscape (png, pdf) https://landscape.cncf.io/images/serverless.png
- member landscape (png, pdf) https://landscape.cncf.io/images/members.png
Continuous Delivery Tool Landscape
http://www.jamesbowman.me/post/cdlandscape/ContinuousDeliveryToolLandscape-fullsize.jpeg
Elasticbox
Elasticbox 整理了 60+ 开源工具与分类
- https://www.ctl.io/developers/blog/post/60-best-open-source-tools-to-do-devops/
- https://elasticbox.com/blog/devops-open-source-tools/
- https://www.ctl.io/developers/assets/images/blog/Cloud-Application-Manager-DevOps_Open_Source_Tools.png
XebiaLabs DevOps周期表
https://xebialabs.com/periodic-table-of-devops-tools/
DevOps能力环
开源工具与分类
包括版本控制&协作开发工具、自动化构建和测试工具、持续集成&交付工具、部署工具、维护工具、监控,警告&分析工具等。
平台搭建
## Jenkins
https://jenkins.io/zh/
持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
## GitLab
https://about.gitlab.com/
基于git的项目管理软件:开源的仓库管理系统项目,使用git作为代码管理工具,并在此基础上搭建web服务,拥有与Github类似的功能。
- https://www.gitlab.com/
- https://about.gitlab.com/install/
- https://about.gitlab.com/get-started/
- https://docs.gitlab.com/
- https://about.gitlab.com/training/
- https://docs.gitlab.com/ee/api/
## Kubernetes
https://kubernetes.io/zh/
用于管理云平台中多个主机上的容器化的应用,让部署容器化的应用简单并且高效,提供了应用部署,规划,更新,维护的机制。
## Helm
https://helm.sh/
Helm是Kubernetes的一个包管理工具,用来简化Kubernetes应用的部署和管理。
## etcd
https://github.com/coreos/etcd/
应用服务的注册,是一个具备高可用性和强一致性的键值存储仓库
## Nginx
https://www.nginx.com/
轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
## Harbor
https://goharbor.io/
Harbor是由VMware公司开源的企业级的Docker Registry管理项目,用于存储和分发Docker镜像的企业级Registry服务器。
代码提交与审核
## Gerrit
https://www.gerritcodereview.com/
免费开源的代码审核系统,在传统源码管理协作流程中强制性引入代码审核机制
## SVN
- http://tortoisesvn.net/
- 支持文档:http://tortoisesvn.net/support.html
- 在线TortoiseSVN 中文文档:http://tortoisesvn.net/docs/release/TortoiseSVN_zh_CN/index.html
- 在线TortoiseMerge 中文文档:http://tortoisesvn.net/docs/release/TortoiseMerge_zh_CN/index.html
测试
## 人工测试
专业质量保证人员的价值不可替代,尤其是在类似接受测试(Acceptance testing)的场景下。
- 管理测试数据,保持一致性,遵守隐私性
- 快速部署代码,一边及时验证缺陷是否修复。
- KISS原则(Keep it simple stupid)
## 自动化测试
在不同场景、功能变化的情况下编写可靠工作的健壮的自动化测试确实很难。
- 调动成员积极性实现测试自动化
- 设定符合实际的目标
- 循序渐进,小步快跑,一步一步来
使用Docker可以将测试环境恢复到测试之前的状态
## 单元测试
- 测试系统中与其他部分隔离、定义良好的部分,相对容易编写和使用
- 可用的单元测试框架,例如在Java代码中定义和运行测试的Junit
- 主流的构建工具内置对单元测试的支持,例如Maven对Junit的支持
## Mocking
编写模拟资源实现单元测试的实践,例如Java中的Mockito框架
## 性能测试
JMeter,开源的性能测试工具,可以生成虚拟负载并测量协议的响应时间
通过performance插件jenkins可以执行JMeter的测试场景。
## 自动化接受测试
- 从用户角度出发来保证测试有效性
- 行为驱动开发(BDD,behavior-driven development):测试用例以文本编写,并关联测试代码
## 自动化GUI测试
- Selenium: web UI测试工具包,针对web前端的功能性测试
- 在Jenkins中集成Selenium测试
## JavaScript测试
- Karma:单元测试的测试运行器
- Protractor:AngularJS的测试框架
## 测试后端
- 后端的功能性自动化测试,例如REST端点(endpoint)
- soapUI工具:交互式实现和运行对JSON、REST接口的功能性测试
- 可以在构建过程总集成测试用例(Maven插件和命令行),不强制使用GUI
## REPL(交互式命令行)驱动开发
- 通常使用在Python和JavaScript等解释性语言
- 可以编写小而独立的函数,并且不依赖于全局的状态
- 函数在编写时就得到了测试
部署与运维
根据实际需求选择工具
- 处理基础操作系统的配置
- 描述集群,实现集群部署
- 使用基于文本的配置文件为系统交付包
- 在匹配的客户端节点上执行代码
- 虚拟化栈,封装应用
- 支持云平台节点和本地节点管理
- 应用配置文件通常基于一些模板文件,格式为YAML或XML
## Ansible
Ansible是基于Python开发的自动化运维工具,,实现了批量的系统配置、程序部署、运行命令等功能;
无代理架构,通过SSH执行,但节点上需安装有python解释器
- HomePage:https://www.ansible.com/
- Documentation:https://docs.ansible.com/
- 中文权威指南:https://ansible-tran.readthedocs.io http://www.ansible.com.cn/
## Puppet
## Chef
## SaltStack
## Vagrant
- 虚拟机的配置管理系统,可用来创建虚拟机
- 支持多个虚拟化提供商,例如VirtualBox
状态监控
监控服务器,及时发现并处理问题,确保正常运行。
## Prometheus
https://prometheus.io/
代码级的监控,可在各虚机、中间件、应用程序中使用工具收集资源消耗信息。
## Grafana
https://grafana.com/
实时查看各项资源运营情况,可作为数据展示平台,利用Prometheus和Grafana可以定制出监控告警看板
## WeaveScope
https://www.weave.works/oss/scope/
Docker和Kubernetes的可视化监控、故障诊断与检测工具
## Nagios
http://www.nagios.org/
开源的免费网络监视工具
- 监控服务器整体运行情况的解决方案
- 大量的插件和扩展,满足不同需求
两种不同类型的基础检查方式
- 主动检查:由Nagios发起,定期执行插件中的代码,通用场景
- 被动检查:由系统发起,通知Nagios,适用特殊场景
## zabbix
https://www.zabbix.com/
https://www.zabbix.com/manuals
基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
## Munin
http://munin-monitoring.org/
日志平台
- 日志框架:定义和过滤不同优先级的信息、实现归档存储和轮替、支持不同的日志格式
- 客户端日志框架:log4j-》Java、Log4js-》JavaScript等
ELK(Logstash+ElasticSearch+Kibana)
统一日志平台,结合Logstash,ElasticSearch和Kibana三个组件,可以搭建一套高效的日志收集和分析系统。
- Logstash:处理来自客户端的日志,例如Logstash监听log4j描述的端口,log4j将错误日志记录到Logstash后端
- Elasticsearch: 接受日志输出并保存,建立索引,使其可以被搜索
- Kibana:在GUI上实时查看日志或者搜索历史数据
## Logstash
https://www.elastic.co/cn/products/logstash
开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的 “存储库” 中。
## Elasticsearch
https://www.elastic.co/cn/products/elasticsearch
开源、分布式、RESTful接口的全文搜索引擎。
## Kibana
https://www.elastic.co/cn/products/kibana
开源的分析和可视化平台,设计用于和Elasticsearch一起工作来搜索、查看,并和存储在Elasticsearch索引中的数据进行交互。
## Filebeats
https://www.elastic.co/cn/products/beats/filebeat
日志文件托运工具。
JIRA & Confluence
Atlassian公司设计发布针对软件开发工程师和项目经理的企业软件,以其产品项目跟踪软件JIRA和团队协同软件Confluence而闻名。
JIRA是优秀的敏捷项目工具,协助您追踪问题,集成代码,规划,开发,发布高质量的软件产品。
Confluence将团队成员紧密的团结在一起,带领团队同心协力地在线编写文档,使团队成员工作更有效率。
行动是绝望的解药!
欢迎转载和引用,但请在明显处保留原文链接和原作者信息!
本博客内容多为个人工作与学习的记录,少数内容来自于网络并略有修改,已尽力标明原文链接和转载说明。如有冒犯,即刻删除!
以所舍,求所得,有所获,方所成。