写点什么

实战分享:如何在 Kubernetes 集群中引入 CI/CD?

2019 年 1 月 29 日

实战分享:如何在Kubernetes集群中引入CI/CD?

本篇文章将介绍一个新的工具,用以持续地在 Kubernetes 集群上部署应用。


每一个采用 DevOps 实践的企业都希望能够快速持续做每一件事情,无论是集成、部署、测试还是监控。无论小型企业还是大型企业,若想要成功做到 DevOps 式运维,CI/CD 都至关重要,可以用来缩短开发周期并快速响应变化,同时可减少部署失败的次数,并且在部署失败时能够做到安全回滚并减少平均修复时间(MTTR)。


本文,我们将讲解一种新方法,将应用程序持续集成(CI)和持续交付(CD)引入到 Kubernetes 集群中。我们将使用 Jenkins 作为 CI 工具,它将轮询 Git 仓库并且在提交代码时自动构建 Docker 镜像并将其推送到 Docker registry。同时将使用 Spinnaker 作为 CD 工具,它将轮询 Docker registry 并触发部署流水线,以此来更新 Kubernetes 集群中的应用程序。



如上图所示,当开发者向 GitHub 提交代码之后,Jenkins 将在某一配置好的分支上进行轮询,并针对这次代码提交触发一次应用的构建。Jenkins 会构建一个 Docker 镜像,然后将其推送到 Docker registry,并为该镜像打上标签(可以选择不同的方式为镜像做标签,比如采用 Git 提交号,或者采用递增的数字)。对于 Spinnaker,我们要提前配置好部署流水线,然后当它在 Docker registry 中发现带有新标签的 Docker 镜像时,就会自动触发部署。


什么是 Spinnaker?

Spinnaker 是由 Netflix 开发的开源、基于多重云的持续交付工具。该平台允许我们配置多种部署策略,比如:高地人部署(Highlander,意指只能有一个存在)、红/黑部署等。在部署失败时,它不仅支持回滚策略,还可以进一步触发配置升级的流水线。这意味着我们可以通过配置测试流水线来配置更复杂的流水线,并在受控的 Kubernetes 集群中简单并且安全地进入到下一阶段的流水线中或者是进行回滚。在本系列的下一篇文章中,我们将会学习到更多的部署策略和流水线配置方法。


Spinnaker 的组件

我们需要理解 Spinnaker 的可工作组件,以深入理解 Spinnaker 的安装。首先,让我们先看一下 Spinnaker 的组件及其对应的功能。



可以在 Spinnaker 的官方文档中查看以下组件的依赖矩阵及其默认绑定端口。


Deck: 基于浏览器的 Spinnaker UI。


Gate: API 调用者和 Spinnaker UI 通过 API 网关(这里称为 Gate )和 Spinnaker 服务器进行通信。


Orca: 是一个编排引擎,被称为 Orca,用来管理流水线和其他特定的操作。


Clouddriver: 已经部署资源的索引和缓存由 Clouddriver 进行管理。它还协助调用 AWS,GCE 和 Azure 等云供应商。


Echo: 负责发送通知,也作为传入的 web 回调(webhook)。


Igor: 用于在 Jenkins 或 Travis CI 等系统中通过持续集成的 job 触发部署流水线,并且允许在部署流水线中使用 Jenkins/Travis 的某些阶段。


Front50: 用于存储 Spinnaker 的元数据。它将持久化存储所有资源的元数据,比如:流水线、项目、应用程序和通知消息。


Rosco: 用于管理虚拟机的镜像(AWS AMIs, Azure VM 镜像, GCE 镜像)。


Rush: Spinnaker 的脚本执行引擎。


Spinnaker 的安装

前提条件:


在开始安装 Spinnaker 之前,我们要先一起完成以下前提条件。


安装 Halyard 有如下条件(在我们的例子中需要安装 Ubuntu 16.04)。


  • Ubuntu 14.04 或 16.04(Ubuntu 16.04 要求 Spinnaker 1.6.0 或者更高版本)

  • Debian 8 或 9

  • 若要在 macOS 系统的电脑本地安装,现在暂时只能在 High Sierra 版本下测试通过


我们从 Halyard 的安装开始。Halyard 被用来管理 Spinnaker 每次部署的生命周期。


下面的命令将会安装最新版本的 Halyard。


curl -O  https://raw.githubusercontent.com/spinnaker/halyard/master/install/debian/InstallHalyard.sh sudo bash InstallHalyard.shhal -v
复制代码


Halyard 安装完成之后,接下来要设置 Spinnaker 版本。


hal version list ### 这条命令将返回所有的可用版本


hal config version edit --version $VERSION
复制代码


接下来要设置 Spinnaker 用于存储数据的存储驱动。Spinnaker 支持多种类型的存储驱动,比如:S3, Minio 和 Redis 等(在本例中,我们将使用 Minio)。


这将会在服务器中以容器的形式运行 Minio,并且在 Spinnaker 中添加 Minio 作为存储驱动。


docker run -p 9000:9000 --name minio1 \ -e "MINIO_ACCESS_KEY={{access_key}}" \ -e "MINIO_SECRET_KEY={{secret_key}} \ -v /mnt/data:/data \ -v /mnt/config:/root/.minio \ minio/minio server /data echo {{secret_key}} | hal config storage s3 edit --endpoint http://localhost:9000 \ --access-key-id {{access_key}} \ --secret-access-key hal config storage edit --type s3
复制代码


在为 Spinnaker 设置了存储驱动之后,就要添加 Kubernetes 集群作为云供应商。


它的账户名是 Kubernetes 集群的名称。通过这种方式,我们可以在单 Spinnaker 下管理多重云供应商(K8s 集群)。


Kubeconfig-file 是 Kubernetes 的配置文件,可以在 Kubernetes 主节点下的 “~/.kube/” 文件夹下获取。


hal config provider kubernetes account add {{account name}} --kubeconfig-file={{ kubeconfig-file path }}
复制代码


只要我们成功添加了云供应商,它就会将所有改变部署在 Spinnaker 上。


hal deploy apply
复制代码


到了这里,Spinnaker 的设置就已经完成了。在下一篇文章中,我们将一起学习如何通过 Spinnaker 流水线创建并部署应用程序。另外,如果你好奇为什么本文中缺少对 Jenkins 的介绍,那是因为在下一篇文章中,我们将会介绍 Jenkins 的安装和配置,并将 Jenkins 作为我们在下一篇文章中要用到的 Docker 镜像构建工具。


原文链接:https://dzone.com/articles/new-way-of-cicd-in-kubernetes-with-jenkins-and-spi


2019 年 1 月 29 日 09:216168

评论

发布
暂无评论
发现更多内容

架构师训练营 - 第十周 - 总结

Anrika

极客大学架构师训练营

实用心理学之识人篇

代码制造者

低代码 零代码 职场成长 编程开发 职场搞笑

开发一款视频直播有多吃香?

anyRTC开发者

奈学:reaseShared共享式释放锁

古月木易

reaseShared 共享锁

优雅快速的统计千万级别uv

架构师修行之路

哈希表 数据结构与算法

Week11

一叶知秋

法定数字人民币将成中国金融新名片

CECBC区块链专委会

数字货币 人民币

吃透Laravel的Ioc容器

书旅

laravel 容器 ioc

SpringMVC-技术专题-支持可版本管理的Restful接口

李浩宇/Alex

springmvc

Apache 顶级项目 Apache Pulsar 成长回顾

Apache Pulsar

kafka 云原生 中间件 Apache Pulsar 消息系统

奈学:Executor框架的概述

古月木易

Executor Executor框架

区块链技术助力基础建设

CECBC区块链专委会

新基建 区块链技术 国家电力

奈学:Executor框架的概述

奈学教育

Executor Executor框架

浅谈如何做好软件研发团队的盘点

大黄蜂

团队管理 技术管理

《精益创业》摘要

孙苏勇

书摘 精益创业

四种主要的 IO 模型

方明

Netty

奈学:reaseShared共享式释放锁

奈学教育

共享锁

华为:新政务风口下加宽“护城河”

脑极体

浅谈技术管理之团队管理

大黄蜂

团队管理 技术管理

有一种自我欺骗,叫只为孩子

zhoo299

随笔杂谈 家庭

核查框架新的选择

柿子

jsr-303 核查框架 butterfly

进击谷歌:多线程下程序顺序怎么稳定不乱?

架构师修行之路

数据结构与算法

Pulsar 联合 TiDB 推出大数据场景数据应用分析解决方案

Apache Pulsar

大数据 InfoQ Apache Pulsar #TiDB

为什么 Bash 脚本总是不稳定?

柴锋

bash Linux DevOps 运维 Shell

区块链技术与福彩事业结合的变革

CECBC区块链专委会

区块链技术 福彩平台

认识分布式系统

多颗糖

分布式 分布式系统 分布式存储

微服务-技术专题-设计原则AFK

李浩宇/Alex

LeetCode题解:66. 加一,新数组求和再翻转,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

9大训练营免费开营!阿里云大数据团队的独门绝学全在这了

Apache Flink

大数据 训练营

56张图入门操作系统——内功心法,适合所有程序员

执鸢者

前端 操作系统

跟我一起基于Karma搭建一个测试环境(下)

Jack Q

测试框架 前端进阶训练营 Karma

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

实战分享:如何在Kubernetes集群中引入CI/CD?-InfoQ