iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何在Kubernetes容器环境下部署Spinnaker ?
  • 358
分享到

如何在Kubernetes容器环境下部署Spinnaker ?

2023-06-04 16:06:53 358人浏览 独家记忆
摘要

如果你关注Docker,想了解基于kubernetes的CD实践。那么,Spinnaker可能是多云平台部署工具的最佳选择。本文重点介绍spinnaker的概念、安装与踩过的坑,spinnaker在kubernetes的持续部署,以及线上容

如果你关注Docker,想了解基于kubernetes的CD实践。那么,Spinnaker可能是多云平台部署工具的最佳选择。本文重点介绍spinnaker的概念、安装与踩过的坑,spinnaker在kubernetes的持续部署,以及线上容器服务的选择与多区容灾。
1、关于Spinnaker
Spinnaker 是什么?我们先来了解下它的概念。
Spinnaker 是 Netflix 的开源项目,是一个持续交付平台,它定位于将产品快速且持续的部署到多种云平台上。Spinnaker 有两个核心的功能集群管理和部署管理。Spinnaker 通过将发布和各个云平台解耦,来将部署流程流水线化,从而降低平台迁移或多云品台部署应用的复杂度,它本身内部支持 Google、AWS EC2、Microsoft Azure、Kubernetes和 OpenStack 等云平台,并且它可以无缝集成其他持续集成(CI)流程,如 gitjenkins、Travis CI、Docker reGIStry、cron 调度器等。

spinnaker主要用于展示与管理你的云端资源。涉及Applications, clusters, and server groups等,并
通过Load balancers and firewalls 将服务展示给用户。

官方结构如下:

如何在Kubernetes容器环境下部署Spinnaker ?

Application
定义了集群中一组的cluster的集合,也包括了firewalls 与 load balancers,存储了服务所有的部署相关的的信息。


Server Group
定义了一些基础的源比如(VM image, Docker image),以及一些基础的配置信息,一旦部署后,在容器中对应Kubernetes pods的集合。


Cluster

Server Groups的有关联的集合。(Cluster中可以按照dev,prod的去创建不同的服务组),也可以理解为对于一个应用存在多个分支的情况。


Load Balancer

他在实例之间做负载均衡流量。您还可以为负载均衡器启用健康检查,灵活地定义健康标准并指定健康检查端点,有点类似于kubernetes中ingress。


Firewall

防火墙定义了网络流量访问,定义了一些访问的规则,如安全组等等。

页面展示如下,还是比较精简的,可以在它的操作页面上看到项目以及应用的详细信息,还可以进行集群的伸缩,回滚,修改以及删除的操作。

如何在Kubernetes容器环境下部署Spinnaker ?

2、spinnaker的部署管理功能

上图中,infrastructure左侧为PIPELINE的设计:主要讲两块内容:pipeline的创建,与部署的策略。

Pipeline


1)、较强的 Pipeline 的能力:它的 Pipeline 可以复杂到无以复加,它还有很强的表达式功能(后续的操作中前面的参数均通过表达式获取)。

2)、触发的方式:定时任务,人工触发,jenkinsjob,docker images,或者其他的pipeline的步骤。

3)、通知方式:email, SMS or HipChat.

4)、将所有的操作都融合到pipeline中,比如回滚、金丝雀分析、关联CI等等。

如何在Kubernetes容器环境下部署Spinnaker ?

3、spinnaker安装踩过的坑

很多人都是感觉这个很难安装,其实主要的原因还是墙的问题,只要把这个解决了就会方便很多,官方的文档写的很详细,而且spinnaker的社区也非常的活跃,有问题均可以在上面进行提问。

安装提供的方式:


1)、Halyard安装方式(官方推荐安装方式)
>>我采用Halyard安装方式,因为后期我们会集成很多其他的插件,类似于gitlab,ldap,kayenta,甚至多个jenkins,kubernetes服务等等,可配置性较强

2)、Helm搭建Spinnaker平台

3)、Development版本安装
>>helm方式若是需要自定义一些个性化的内容会比较复杂,完全依赖于原始镜像,而Development需要对spinnaker非常的熟悉,以及每个版本之间的对应关系均要了解。
Halyard方式安装注意点:


Halyard代理的配置

```
vim /opt/halyard/bin/halyard
DEFAULT_JVM_OPTS='S='-DHttp.proxyHoxyHost=st=192.168.102.10 -Dh 10 -Dhttps.proxyPoxyPort=3128'
```
部署机器配置


由于spinnaker涉及的应用较多,下面会单独的介绍,需要消耗比较大的内存,官方推荐的配置如下:
```
18 GB of RAM
A 4 core CPU
ubuntu 14.04, 16.04 or 18.0
```

4、spinnaker安装步骤


1)、Halyard下载以及安装

2)、选择云提供者:我选择的是Kubernetes Provider V2 (Manifest Based),需要在部署spinnaker的机器上完成k8s集群的认证,以及权限管理。

3)、部署的时候选择安装环境:我选择的是Debian包的方式。

4)、选择存储:官方推荐使用miNIO,我选择的是minio的方式。

5)、选择安装的版本:我当时最新的是V1.8.0

6)、接下来进行部署工作,初次部署时间较长,会连接代理下载对应的包。

7)、全部下载与完成后,查看对应的日志,即可使用localhost:9000访问即可。
完成以上的步骤则可以在kubernetes上面部署对应的应用了。


下图是spinnaker的各个组件之间的关系。

如何在Kubernetes容器环境下部署Spinnaker ?

下面介绍一下每个组件在spinnaker中作用

Deck:面向用户 UI 界面组件,提供直观简介的操作界面,可视化操作发布部署流程。

api: 面向调用 API 组件,我们可以不使用提供的
UI,直接调用 API 操作,由它后台帮我们执行发布等任务。

Gate:是 API 的网关组件,可以理解为代理,所有请求由其代理转发。

Rosco:是构建 beta 镜像的组件,需要配置 Packer 组件使用。

Orca:是核心流程引擎组件,用来管理流程。

Igor:是用来集成其他 CI 系统组件,如 Jenkins 等一个组件。
Echo:是通知系统组件,发送邮件等信息。

Front50:是存储管理组件,需要配置 Redis、Cassandra 等组件使用。
Cloud driver 是它用来适配不同的云平台的组件,比如 Kubernetes,Google、AWS EC2、Microsoft Azure 等。
Fiat 是鉴权的组件,配置权限管理,支持 OAuth、SAML、LDAP、GitHub teams、Azure groups、 Google Groups 等。

5、spinnaker在kubernetes的持续部署
一个优美的PIPELINE,部署示例。
如下pipeline设计就是开发将版本合到某一个分支后,通过jenkins镜像构建,发布测试环境,进而自动化以及人工验证,在由人工判断是否需要发布到线上以及回滚,若是选择发布到线上则发布到prod环境,从而进行prod自动化的CI。若是选择回滚则回滚到上个版本,从而进行dev自动化的CI。

如何在Kubernetes容器环境下部署Spinnaker ?

我们针对如上的pipeline的每个stage进行分析:

Stage-configuration具有如下的配置

Automated Triggers
设置触发的方式,定义全局变量,执行报告的通知方式,是pipeline的起点
这里我们可以指定多种触发的方式:定时任务corn,git,jenkins,docker Registry,travis,pipeline,WEBhook等

Parameters
此处定义的全局变量会在整个PIPELINE中使用${ parameters[‘branch’]}得到,这样大大的简化了我们设计pipeline的通用性

Notifications
这里通知支持:SMS,EMAIL,HIPCHAT等等的方式

运行完成后展示如下,我们可以查看相关的build的信息,以及此stage执行的相关信息,点击build可以跳到对应的jenkins的job查看相关的任务信息。

如何在Kubernetes容器环境下部署Spinnaker ?

Stage-jenkins这个就很厉害了,完美的与jenkins结合,

调用jenkins来执行相关的任务,其中jenkins的服务信息存在放hal的配置文件中(如下展示),spinnaker可自动以同步jenkins的job以及参数等等的信息,运行后能够看到对应的JOB ID以及状态:

如何在Kubernetes容器环境下部署Spinnaker ?

Stage-deploy

由于我们配置spinnaker的时候采用的是Kubernetes Provider V2方式,我们的发布均采用yaml的方式来实现,可以将文件存放在github中或者直接在页面上进行配置,同时yaml中文件支持了很多的参数化,这样大大的方便了我们日常的使用。

halyard关联KUBERNETES的配置信息

由于我们采用的云服务是KUBERNETES,配置的时候需要将部署spinnaker的机器对KUBERNETES集群做认证。

spinnaker发布信息展示:

此处Manifest Source支持参数化形式,类似于我们写入的yaml部署文件,但是这里支持参数化的方式。

如何在Kubernetes容器环境下部署Spinnaker ?

如何在Kubernetes容器环境下部署Spinnaker ?

Stage-Webhook

webhook
我们可以做一些简单的环境验证以及去调用其他的服务的功能,它自身也提供了一些结果的验证功能,支持多种请求的方式。
Stage-Manual Judgment


用于人工的逻辑判断,增加pipeline的控制性(比如发布到线上需要测试人员认证以及领导审批),内容支持多种语法表达的方式。

Stage-Check Preconditions


上边 Manual Judgment Stage 配置了两个 Judgment Inputs 判断项,接下来我们建两个 Check Preconditions Stage 来分别对这两种判断项做条件检测,条件检测成功,则执行对应的后续 Stage 流程。比如上面的操作,若是选择发布到prod,则执行发布到线上的分支,若是选择执行回滚的操作则进行回滚相关的分支。

如上图中我选择了rollback,则prod分支判断为失败,会阻塞后面的stage运行。

如何在Kubernetes容器环境下部署Spinnaker ?

如何在Kubernetes容器环境下部署Spinnaker ?

Stage-Undo Rollout (Manifest)

若是我们发布发现出现问题,也可以设计回滚的stage,spinnaker的回滚极其的方便,在我们的日常部署中,每个版本都会存在对应的部署记录。

回滚的pipeline描述中我们需要选择对应的deployment的回滚信息,以及回滚的版本数量。
运行结果的示例

如何在Kubernetes容器环境下部署Spinnaker ?

如何在Kubernetes容器环境下部署Spinnaker ?

Stage-Canary Analysis


金丝雀部署方式:在我们发布新版本时引入部分流量到canary的服务中,kayenta会读取spinnaker中配置的prometheus中收集的指标,比如内存,CPU,接口超时时间,失败率等等通过kayenta中NetflixACAJudge来进行分析与判断,将分析的结果存于S3中,最终会给出这段时间的最终结果。

6、运行结果的设计与展示

1)、我们需要对应用开启canary的配置。
2)、创建出baseline与canary的deployment由同一个service指向这两个deployment。
3)、我们这里采用读取prometheus的指标,需要在hal中增加prometheus配置。Metric可以直接匹配prometheus的指标。

每次分析的执行记录:

结果展示如下,由于我们设置的目标是75,所以pipeline的结果判定为失败。

如何在Kubernetes容器环境下部署Spinnaker ?

如何在Kubernetes容器环境下部署Spinnaker ?

7、线上容器服务的选择与多区容灾


采用云容器服务主要看重以下几个方面:
1、Kubernetes在自搭建的集群中,要实现Overlay网络,在好的云平台环境里,它本身就是软件定义网络VPC,所以它在网络上的实现可以做到在容器环境里和原生的VM网络一样的快,没有任何的性能牺牲。
2、应用型负载均衡器和Kubernetes里的ingress相关联,对于需要外部访问的服务能够快速的创建。
3、云储存可以被Kubernetes管理,便于持久化的操作。
4、云部署以及告警也对外提供服务与接口,可以更好的查看与监控相关的node与pod的情况。
5、云日志服务很好的与容器进行融合,能够方便的收集与检索日志。

如何在Kubernetes容器环境下部署Spinnaker ?

本文分享的案例中,为了容灾使用了北京二区与北京三区两个集群,若是需要灰度验证时,则将线上北京三区的权重修改为0,这样通过灰度负载均衡器即可到达新版本应用。日常使用中二区与三区均同时提供挂服务。设计的思路以及模型如下:

pipeline执行结果展示

如何在Kubernetes容器环境下部署Spinnaker ?

具体某个应用的展示:

如何在Kubernetes容器环境下部署Spinnaker ?具体某个应用的展示:

如何在Kubernetes容器环境下部署Spinnaker ?

8、相关问题

Q:为什么没有和CI结合在一起?使用这个比较重的spannaker有什么优势?

A:可以和CI进行结合,比如webhook的方式,或者采用jenkins调度的方式。
优势在于可以和很多云平台进行结合不仅仅支持容器,而且他的pipeline比较完美,参数化程度很高。

Q:spannaker的安全性方面怎么控制?

A:spinnaker中Fiat 是鉴权的组件,配置权限管理,Auth、SAML、LDAP、GitHub teams、Azure groups、 Google Groups,我们就采用ldap,登陆后会在上面显示对应的登陆人员。

Q:spinnaker能不能在pipeline里通过http api获取一个deployment yaml进行deploy,这个yaml可能是动态生成的

A:部署服务有两种方式:
1)、在spinnaker的UI中直接填入Manifest Source ,其实就是对应的deployment YAML,只不过这里可以写入pipeline的参数。
2)、可以从github中拉取对应的文件,来部署,前提是要配置好对应的git地址以及项目。

Q:目前IaaS只支持openstack和国外的公有云厂商,国内的云服务商如果要支持的话,底层需要怎么做呢(管理云主机而不是容器)?自己实现的话容易吗?怎么入手?

A:目前我们主要使用spinnaker用来管理容器这部分的内容,对于国内的云厂商spinnaker支持都不是非常的好,像lb,安全策略这些都不可在spinnaker上面控制。若是需要研究可以查看Cloud driver这个组件的功能。
Q:个人感觉还是需要结合Jenkins完成build,还有镜像仓库 etc。。。spinnaker只是完成了后面交付的部分,是这样吧?

A:对的,spinnaker是一个持续交付的工具,我们在使用中也是通过jenkins来完成镜像的制作以及推送到仓库。

Q: spannaker 之前的截图看到也有对部分用户开发的功能,用spannaker 之后 还需要Istio吗?

A:这两个有不同的功能,【对部分用户开发的功能】这个是依靠创建不同的service以及ingress来实现的,他的路由能力肯定没有istio强悍,而且也不具备熔断等等的技术,我们线下这么创建主要为了方便开发人员进行快速的部署与调试。
Q: deploy和test以及rollback可以跟helm chart集成吗?

A:我觉得是可以,很笨的方法最终都是可以借助于jenkins来实现,但是spinnaker的回滚与部署技术很强大,在页面上点击就可以进行快速的版本回滚与部署。
Q:最外层为何选择Nginx集群而不是某云的负载均衡器?

A:我们流量的入口是某云的负载均衡器,但是接下来我们有一些策略在NGINX中实现。

(本文根据 季邦华 社群分享整理)

--结束END--

本文标题: 如何在Kubernetes容器环境下部署Spinnaker ?

本文链接: https://www.lsjlt.com/news/238653.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何在Kubernetes容器环境下部署Spinnaker ?
    如果你关注Docker,想了解基于Kubernetes的CD实践。那么,Spinnaker可能是多云平台部署工具的最佳选择。本文重点介绍spinnaker的概念、安装与踩过的坑,spinnaker在kubernetes的持续部署,以及线上容...
    99+
    2023-06-04
  • Spinnaker生产环境如何安装部署监控
    小编给大家分享一下Spinnaker生产环境如何安装部署监控,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 架构分析Haly...
    99+
    2024-04-02
  • 如何在Kubernetes环境中部署Prometheus系统
    在Kubernetes环境中部署Prometheus系统通常需要以下步骤: 创建Prometheus配置文件:在配置文件中定义P...
    99+
    2024-03-04
    Prometheus
  • Kubernetes容器集群管理环境怎么部署
    本文小编为大家详细介绍“Kubernetes容器集群管理环境怎么部署”,内容详细,步骤清晰,细节处理妥当,希望这篇“Kubernetes容器集群管理环境怎么部署”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。通过K...
    99+
    2023-06-29
  • Kubernetes在混合云环境中如何部署与管理
    在混合云环境中部署和管理Kubernetes可以通过以下步骤实现: 确保在所有云服务提供商上都安装了Kubernetes,并且版本...
    99+
    2024-05-08
    Kubernetes
  • 如何在Azure中部署Kubernetes容器集群
    这篇文章主要讲解了“如何在Azure中部署Kubernetes容器集群”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何在Azure中部署Kubernetes容器集群”吧!在这个快速入门教程...
    99+
    2023-06-16
  • Kubernetes(K8S)容器集群管理环境完整部署详细教程-下篇
    本文系列: Kubernetes(K8S)容器集群管理环境完整部署详细教程-上篇 Kubernetes(K8S)容器集群管理环境完整部署详细教程-中篇 Kubernetes(K8S)...
    99+
    2024-04-02
  • Grafana在容器化环境中如何部署和管理
    在容器化环境中部署和管理Grafana可以通过以下步骤实现: 使用Docker部署Grafana容器:首先,可以使用Docker...
    99+
    2024-04-02
  • Linux环境下的hosts如何部署
    小编给大家分享一下Linux环境下的hosts如何部署,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Linux 环境下的 hosts 一键部署脚本,由 @lsto...
    99+
    2023-06-09
  • Kubernetes(K8S)容器集群管理环境完整部署详细教程
    以下是一个完整的Kubernetes容器集群管理环境的部署详细教程:1. 部署集群节点:- 确保每个节点上安装了Docker和Kub...
    99+
    2023-08-14
    Kubernetes
  • Node.js环境在linux上如何部署
    本篇内容介绍了“Node.js环境在linux上如何部署”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一 打开centos,然后开始下载no...
    99+
    2023-06-17
  • 如何使用Kubernetes集群环境部署MySQL数据库
    这篇文章主要讲解了“如何使用Kubernetes集群环境部署MySQL数据库”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Kubernetes集群环境部署MySQL数据库”吧!1 编...
    99+
    2023-06-30
  • 如何使用 golang 将环境变量添加到 kubernetes 部署?
    php小编苹果为您带来一篇关于如何使用golang将环境变量添加到Kubernetes部署的文章。在Kubernetes部署中,环境变量的设置非常重要,可以帮助我们配置应用程序的行为。...
    99+
    2024-02-09
  • 如何在Kubernetes 上部署安装PHP + Nginx 多容器应用
    引言 Kubernetes是一个开源的容器编排系统。它允许你创建、更新和扩展容器,而无需担心停机。 要运行一个PHP应用程序,Nginx充当PHP-FPM的代理。将此设置打包到单个容器中可能是一个繁琐...
    99+
    2023-09-06
    kubernetes ubuntu php
  • Kubernetes(K8S)容器集群管理环境完整部署详细教程-中篇
    本文系列: Kubernetes(K8S)容器集群管理环境完整部署详细教程-上篇 Kubernetes(K8S)容器集群管理环境完整部署详细教程-中篇 Kubernetes(K8S)...
    99+
    2024-04-02
  • centos如何部署php环境
    这篇“centos如何部署php环境”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“centos如何部署php环境”文章吧。c...
    99+
    2023-07-04
  • Kubernetes(K8S)容器集群管理环境完整部署详细教程-上篇
    Kubernetes(通常称为"K8S")是Google开源的容器集群管理系统。其设计目标是在主机集群之间提供一个能够自动化部署、可拓展、应用容器可运营的平台。K...
    99+
    2024-04-02
  • 容器化Python环境:如何在Linux和Windows上实现无缝部署?
    在当今的软件开发和部署过程中,容器化已成为一种越来越流行的解决方案。Python作为一种广泛使用的编程语言,在容器化方面也有着很好的支持。本文将介绍如何在Linux和Windows上实现无缝部署Python环境。 一、什么是容器化? 容器化...
    99+
    2023-08-23
    linux windows 容器
  • NoSQL在容器化环境中怎么部署和管理
    在容器化环境中部署和管理NoSQL数据库,可以采用以下几种方法: 使用Docker容器:可以将NoSQL数据库打包成Docker镜...
    99+
    2024-05-07
    NoSQL
  • Windows下如何用Docker部署Node.js开发环境
    这篇文章主要介绍了Windows下如何用Docker部署Node.js开发环境的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Windows下如何用Docker部署Node.js...
    99+
    2022-11-30
    windows docker node.js
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作