CICD平台搭建:Jenkins安装
Jenkins简说Jenkins是一个用java编写的开源持续集成工具,它提供了软件开发的持续集成服务,支持很多主流软件和配置管理工具与其配合实现软件配置管理和持续集成功能。Jenkins作为一个运维行业内用途最为广泛的持续集成工具,它将传统意义上的运维工作与开发工作完美地结合在一起。作为一个运维人员,你可能需要编写很多脚本,执行很多命令,但如何去管理、审计这些脚本,以及如何在数以万计的服务器中和同事协同配合完成一项工作,则是目前我们需要考虑的问题。如果你仅仅限制于command line(命令行),那以后无论遇到任何突发情况,你将疲于奔命,因为你是人不是机器。虽然你可以知道你写的脚本在哪里起作用,在哪里执行实现了什么功能等,但是你手里没有一套完整的系统去管理和让别人了解你日常工作的内容,可能对于别人来说你的工作就是一个黑盒。Jenkins的出现彻底打开了这个黑盒,可以让运维人员和开发人员可以协同工作到一起,进入到一个白盒之中,它在运维工作中起到的是承上启下的作用。首先Jenkins的前台界面方便我们能够直观的收集到我们执行的job所有相关的信息,而且它能够作为一个Pipeline将我 ...
CICD平台搭建:Ansible playbooks介绍
将下来介绍Ansible playbooks的相关知识,之前你已经在本地安装了ansible,现在就是如何编写脚本让ansible发挥作用。
playbook语言介绍playbook作为ansible独有的术语,是ansible配置部署的编排语言框架,本身简单易读的语法结构以及丰富的内嵌模块非常易于我们编写远程系统部署策略,playbook基础的文件格式为yaml格式,可以将playbook称之为总的乐谱,每一个yaml文件可以称为一个playbook的乐章,在这个playbook下可以编写一个或多个task作为这个乐章的音符。我们通过ansible相关的命令去play演奏这个乐谱,就可以将我们预先写好的任务,按照特定的编排部署到远程服务器当中,也就是演奏给我们的听众听。
接下来将详细说明及通过demo演示的方式,向大家介绍一个基础playbooks的框架格式与编写规范。这里通过引入一个Test playbooks乐谱作为一个例子,进行逐一介绍它的基础框架和格式。下面是它的总文件结构:
inventory目录、roles目录及deploy.yml文件构成了它的表层目录结构。下面就详细 ...
CICD平台搭建:Ansible安装
在前面系统学习了gitlab的相关知识点和安装、配置、流程等demo演示,接下来介绍Ansible这个工具。在此之前可以设想一下十年前的我们是如何对产品进行部署测试的?如果那时候你公司有开发能力,可能会研发出一套部署测试脚本或者系统,去线上部署自己的产品。又或者通过自己的运维团队和开发团队协同将产品部署到线上,但是在很多情况下运维人员只是做一些基础的搭建服务器等工作,而更多涉及到测试部署的工作都是靠开发人员来完成的,这使得开发人员压力山大。开发人员都有一套自己解决部署问题的黑盒,虽然问题完成了,但是问题也同样明显,大家没有一套统一解决问题的框架或者说是部署工具。如果没有一份详细的部署文档去解释开发人员的部署架构原理,那么可能在后期给该工具使用的运维人员带来巨大的时间成本。
而Ansible的出现就是为了解决这个问题,它可以让我们放弃自己原来开发的部署工具。Ansible是一个开源的部署工具,开发语言为Python,并以playbook作为基础部署架构,仅仅依赖系统标配的ssh连接与授权管理,就可以实现远程节点的快速部署。它的模块化部署管理,兼容Linux与Windows平台,所以说An ...
CICD平台搭建:Gitlab应用
Gitlab的应用应用说明接下来将从开发和运维的两个视角来介绍Gitlab的应用。Gitlab强大之处在于具有强大的分布式代码版本控制系统的同时,也有出色的后台管理能力。它的后台管理可以针对不同项目、不同用户去制定不同的访问策略,开发和运维这两个角色可以各司其职,互不影响地在自己的场景下工作。
作为开发人员,关注点肯定就是代码的快速发布与审核。每一个项目下各个小组都会去维护自己的项目分支,当这个分支在多次不同环境下部署测试成功之后,接着会提交一个Master主分支合并的申请,然后等待项目领导去审核,决定是否确认合并操作,确认后开发人员又会接着另一个Feature分支继续工作。
作为运维人员,关注点肯定就是在保证Gitlab本身的维护与管理。平时运维人员大部分时间都需要去后台获取相关的系统关键值,如CPU利用率,内存、磁盘使用率,系统健康状态等,以保护Gitlab始终处于一种高可用、高并发、高性能的状态。除此之外也需要关注Gitlab的权限管理,作为Gitlab的admin你需要去分配不同人对项目具有不同的权限,保证开发人员具有分支的克隆、删除、推送、提交、合并和创建分支等权限,保证项目 ...
CICD平台搭建:Gitlab安装
持续交付持续交付指的是一种能够使得软件在较短的循环中可靠的发布的软件工程方法。在持续交付初期需要掌握的内容有:(1)版本控制系统,如GitLab、GitHub等,也就是代码仓库,用来作为项目构建初期代码构建的仓库平台;(2)持续集成工具,如Jenkins,作为核心的平台,用来将代码抓取到本地,进行集成配置工作;(3)部署交付工具,如Ansible、Saltstack、Chef等,对我们在Jenkins本地抓取的代码进行最终的远程服务器端交付推送工作。因此我们可以得出一个结论:持续交互=交付+版本控制系统&持续集成工具&部署工具。
本套笔记用于记录Jenkins+Ansible+Gitlab如何搭建一个自动化的部署平台。在此过程中会解决一些问题,如Jenkins如何集成Ansible、playbook等;如何使用Gitlab集成我们的交付部署。
记录内容本套笔记主要记录的内容有:(1)GitLab代码仓库的搭建流程与使用流程,且介绍这个工具在项目交付过程中所起的作用;(2)Ansible部署工具的虚拟环境配置以及Playbook脚本编写规范,并介绍Ansible的架构使用 ...
Sleuth数据存储
写在前面默认情况下,Zipkin Server会将跟踪信息存储在内存中,但是当用户每次重启Zipkin Server时,都会将之前收集的跟踪信息进行删除,并且当有大量跟踪信息时存储在内存中肯定是不行的,因此正确的做法是将数据持久化到外部存储磁盘中,使用MySQL来进行存储,也可以将其输出到ElasticSearch中存储存储,这两种方式本文都会详细介绍。
数据持久化持久化到MySQL中MySQL简介MySQL是一款优秀的开源关系型数据库,因其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。
持久化到MySQL流程请注意zipkin默认是支持HTTP实现的收集,因此需要将现在基于RabbitMQ消息中间件实现的方式注释掉,后期会介绍如何将基于消息中间件的收集持久化到MySQL数据库中。
第一步,在MySQL中创建用于Zipkin存储的Schema。由于笔者使用的zipkin-server版本是2.12.6,因此首先需要点击 这里选择自己对应版本的readme.md文档进行阅读,往下看到Applying the schema部分,找 ...
Sleuth整合Zipkin
写在前面虽然通过ELK日志分析平台提供的收集、存储、搜索等功能,我们已经非常轻松的实现对跟踪信息的管理,但是在ELK平台中缺乏对请求链路中各阶段时间延迟的关注,很多时候我们追溯请求链路的一个原因,就是为了找出整个调用链路中出现延迟过高的瓶颈,或者为了实现对分布式系统做延迟监控等与时间消耗相关的需求,也就是说此时的ELK平台是无法满足我们的要求,应当引入Zipkin框架来解决。
ZipkinZipkin是Twitter的一个开源项目,它基于Google Dapper实现。开发者可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的RESTful API接口来辅助查询跟踪数据,以实现对分布式系统的监控,从而及时发现系统中出现的延迟升高问题,并找出系统性能瓶颈的源头。Zipkin除了提供面向开发的API接口外,它还提供了方便的UI组件来帮助我们直观地跟踪信息和分析请求链路明细,如可以查询某段时间内各用户请求的处理时间。
Zipkin基本概念(1)Span:它是Zipkin的基本工作单元,一次链路调用就会创建一个Span。
(2)Trace:它是一组Span的集合,表示一条调用链路。举 ...
Sleuth整合ELK
写在前面在前面我们已经给trace-one和trace-two项目引入了Spring Cloud Sleuth的基础模块spring-cloud-starter-sleuth,实现了在各个微服务的日志信息中添加跟踪信息的功能。
但是问题来了,这些日志文件都是分散存储在各个服务实例的文件系统上,因此还需要借助于一些工具来帮助集中收集、存储和搜索这些跟踪信息。一般来说可以使用基于日志的分析系统,如ELK,它可以很轻松的帮助我们收集和存储这些跟踪日志,同时在需要的时候也可以根据TraceID来轻松地搜索出对应请求链路相关的明细日志。
ELK由ElasticSearch、Logstash和Kibana三个开源工具组成。其中ElasticSearch是一个开源的分布式搜索引擎,它可以支持分布式、零配置、自动发现、索引自动分片、索引副本机制、RESTful风格接口,多数据源、自动搜索负载等。
Logstash是一个完全开源的工具,它可以对日志进行收集、过滤,并将其进行存储以被后续使用。
Kibana也是一个开源工具,它可以为Logstash和ElasticSearch提供日志分析的Web界面,也可 ...
Sleuth基础使用
写在前面通过前面的学习,我们已经可以搭起一个基础的微服务架构系统用于实现业务需求,但是随着业务的发展,系统的规模变得越来越大,各服务间的调用关系也变得错综复杂。一般来说,客户端发起一个请求后,在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果。在复杂的微服务架构系统中,几乎每一个前端请求都会形成一条复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟过高或者错误的时候,都有可能导致请求最后的失败。此时对于每一个请求,全链路调用的跟踪就显得尤为重要,通过对请求的调用跟踪可以帮助我们快速发现错误根源以及监控分析每条请求链路上的性能瓶颈等。
对于分布式服务的跟踪问题,Spring Cloud Sleuth提供了一套完整的解决方案,接下来就学习如何使用Spring Cloud Sleuth。
入门演示项目准备为了后续学习Spring Cloud Sleuth,这里需要先做一些准备工作,来构建一些基础的设施和应用。
第一步,构建一个服务注册中心当然可以使用之前的eureka-server项目;
第二步,构建两个微服务应用,名称为trace-one和trace-two。其中t ...
Stream基础使用
写在前面在前面我们学习了使用消息总线Spring Cloud Bus组件来整合RabbitMQ和Kafka等消息中间件,接下来开始学习另一个组件Spring Cloud Stream,被称为是消息驱动的微服务。它可以基于Spring Boot来创建独立的、可用于生产的Spring应用程序。同时它通过使用Spring Interation来连接消息代理中间件以实现消息事件的驱动。
Spring Cloud Stream为一些中间件产品提供了个性化的自动化配置实现,并且引入了发布-订阅、消费组以及分区这三个核心概念。简单的说,Spring Cloud Stream本质上就是整合了Spring Boot和Spring Interation,实现了一套轻量级的消息驱动的微服务框架。使用Spring Cloud Stream可以有效的简化开发人员对于消息中间件的使用复杂度,让系统开发人员可以将更多的精力专注于核心业务逻辑的处理。目前为止Spring Cloud Stream支持RabbitMQ和Kafka这两个消息中间件,但是相信在不久的将来会有更多的中间件加入其中。
快速入门接下来通过一个简单 ...