大家好,今天,我们将一起来学习基于Spinnaker的持续交付实践,相信各位同学之前应该都听过Spinnaker吧,但是你实际上去部署的时候 肯定是很困难的,更甭说上去用了。今天我们这次课程,就是为大家去解决这些问题,让大家真正的去用起来,然后体验一下Spinnaker的高级的特性。
我是本次课的讲师,泽阳,我先来做一个简单的自我介绍,我目前从事的运维相关的工作,参与过一些DevOps相关的项目实施和改造,踩过了无数的坑,也积攒了一些经验,基本上我都会给大家分享出来,我现在所代表的课程,有Jenkins实践和GitLabCI实践,那么今天我们学的这个Spinnaker实践,是我最新的也是唯一的CD实践课程,所以希望在CD方面对大家有所帮助。
那我们来看一下今天我们基础篇的内容,我把分成了4个部分:第1个部分,就是我们来讲一下什么是Spinnaker,大家来熟悉一下它的特性,这是今天所说的Spinnaker的简介,然后第2个部分,我们会为大家讲Spinnaker的服务和它的架构,第3个部分,因为都听说Spinnaker安装配置起来特别难受,可能很多同学想要学的时候都被安装卡住了,更甭说上去用了对不对?所以今天我们第三部分就是要教大家怎么去安装,全方位的给大家分析每一个步骤怎么去做,怎么去实现,最后我会为大家说一下Spinnaker的版本的更新。OK就是这些内容,入门是足够了。
我们先来看第一章,关于Spinnaker的简介,第1章,就是让大家知道Spinnaker是什么,我们为什么要学习Spinnaker?
我们来简单介绍一下,Spinnaker它是一个开源的,多云的持续交付平台。我们现在用的持续交付平台其实很少,我们可能用Jenkins来完成,Jenkins也能支持我们做CI/CD,但是你会发现,Jenkins要做CD的话,得需要去写代码,写一些插件来实现。相对来说我们每个人能力要求就比较高了,而且还得不断的去调试这个程序所写的兼容性问题,所以说目前来说,开源的CD平台的话,Spinnaker肯定是功能最强大的,我们推荐大家。如果要是做持续交付的话,我们就可以使用Spinnaker完成。常见的架构就是Jenkins + Spinnaker,Jenkins是去帮我们去做CI,然后Spinnaker去帮我们做CD 。
那什么是持续交付?其实就是开发人员今天写的代码推到代码库了,那我们能够快速的,自动化的,稳定的将这个变更发布到各个环境这就是持续交付,Spinnaker核心就两个功能,也是我们在学习的时候要注意,就两个方向,第1个方向是应用的管理,第2个方向是应用程序部署。应用管理,这一部分的内容,相对来说简单一些就相当于是一个web页面,我们学习怎么去用?怎么去点?然后第2部分的应用程序部署是Spinnaker的核心,就是Pipeline流水线。
我列举了一些当前Spinnaker所支持的一些云供应商,AWS、Google、Kubernetes,oracle,现在,国内的一些云供应商,我们重点使用其完成Kubernetes的持续交付。
Spinnaker有哪些强大的功能,先简单了解这些功能。
第1个功能是关于CI工具的集成,CI工具的集成。Spinnaker它支持两个部分,第1个部分是监听事件,它可以监听镜像仓库,比如说当镜像仓库里面的某个镜像,发生了变化(更新)或者创建了一个新的标签,它去触发Spinnaker的流水线去运行;那么还有一种情况,就是在Spinnaker流水线里面也可以去触发Jenkins等CI工具的管道,当然反过来也是可以的,Jenkins也能去触发Spinnaker管道。
第2点具有一个非常强大的配置管理工具,熟悉Jenkins的同学应该知道Jenkins有一个cli工具,可以不在图形界面去操作,然后通过cli工具直接命令行里面去执行,Spinnaker也是有这样的一个工具,也是同样的功能。Halyard是实现Spinnaker整个生命周期的管理、安装配置更新。
第3点是监控的集成,它可以集成prometheus,或者datadog。集成之后可以作为金丝雀的分析的指标,通过prometheus/datadog里边的监控指标,去分析这次的部署。
第4点就是部署策略,Spinnaker里面支持,很多种部署策略,我们自己也可以去自定义部署策略。例如:蓝绿部署、金丝雀部署这些都是支持的,我可以通过内置强大的部署策略来实现持续交付。
第5点基于角色的访问控制,这个就是用户认证、用户权限这块。LDAP等等。第6点事件通知,邮件通知等等。最后它的特点也是非常强大功能,发布窗口支持。例如在固定的时间才能发布,错过高峰期。
应用管理和应用部署,我们先来说应用管理,应用管理,Spinnaker它对应用程序做了一个建模,大家可以看这张图,我们可以这么去理解,Spinnaker里面一个应用程序对应的就是我们现实中每一个微服务;ServerGroup是微服务它所部署的各个环境,比如说开发环境,生产环境,预生产环境;Cluster是应用的所有实例的集合,刚才我们所说了,每一个ServerGroup就是每一个环境,Cluster就是ServerGroup的集合。可以这样理解,一个Cluster里面包含的就是当前这个服务的所有环境。负载均衡器LB对应Kubernetes中的Service;防火墙对于云供应商来说就是安全组入口。
我们打开Spinnaker的页面,大家可以看到它的分类。更有助于理解应用模型。
应用部署,Spinnaker它的核心就是pipeline,一条流水线(pipeline)包含多个阶段(stage),阶段可以并行运行,例如将两个阶段设置为相同的依赖阶段,则该阶段运行完成后 并行运行其他阶段。阶段我们都可以自己去灵活的去定义。
可以根据每个项目的特点,去创建一个流水线的模板,后期通过这个模板文件批量创建,最后我们改参数就可以了。这是后期的一种管理的方式。在流水线配置的部分,也支持一些触发器,Git Jenkins DockerRegistry Nexus Artifactory等等。