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

栏目: 编程工具 · 发布时间: 5年前

内容简介:本篇文章将介绍一个新的工具,用以持续地在 Kubernetes 集群上部署应用。每一个采用 DevOps 实践的企业都希望能够快速持续做每一件事情,无论是集成、部署、测试还是监控。无论小型企业还是大型企业,若想要成功做到 DevOps 式运维,CI/CD 都至关重要,可以用来缩短开发周期并快速响应变化,同时可减少部署失败的次数,并且在部署失败时能够做到安全回滚并减少平均修复时间(MTTR)。本文,我们将讲解一种新方法,将应用程序持续集成(CI)和持续交付(CD)引入到 Kubernetes 集群中。我们将使

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

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

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

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

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

什么是 Spinnaker?

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

Spinnaker 的组件

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

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

可以在 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.sh
hal -v

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

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

复制代码

halconfigversionedit--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/” 文件夹下获取。

复制代码

halconfigprovider kubernetes accountadd{{account name}} --kubeconfig-file={{ kubeconfig-file path }}

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

复制代码

hal deployapply

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

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Erlang趣学指南

Erlang趣学指南

邓辉、孙鸣 / 人民邮电出版社 / 2016-9-7 / 79.00元

这是一本讲解Erlang编程语言的入门指南,内容通俗易懂,插图生动幽默,示例短小清晰,结构安排合理。书中从Erlang的基础知识讲起,融汇所有的基本概念和语法。内容涉及模块、函数、类型、递归、错误和异常、常用数据结构、并行编程、多处理、OTP、事件处理,以及所有Erlang的重要特性和强大功能。一起来看看 《Erlang趣学指南》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具