使用 Jenkins 和 Spinnaker 构建 Kubernetes CI/CD

无论您是新手还是持续集成和持续交付以及容器化领域的经验丰富,本文都将为您提供设置 Spinnaker 以满足您的软件应用程序交付需求的基本知识。

了解 Jenkins、Spinnaker 和 Kubernetes

Kubernetes 和 Jenkins 是两个强大的工具,它们相互配合,帮助软件开发人员自动化软件发布的整个过程,并使他们能够以更少的努力交付高质量的应用程序。

Jenkins 是一个开源自动化服务器,可帮助开发人员自动执行任务,例如在管道中持续构建、测试和部署应用程序。该工具是用 Java 开发的,包含大量插件,可以轻松地将测试和构建框架合并到 CI/CD 管道中。

另一方面,Spinnaker 专注于简化软件应用程序的代码部署过程。 它提供了一种集中式方法来管理 Kubernetes 的部署管道,从而可以有效地提升和回滚版本。

Kubernetes 是一种开源容器管理工具,用于管理容器化应用程序和服务。应用程序开发人员、DevOps 工程师和系统管理员使用此工具跨集群自动构建、扩展、部署和维护容器化应用程序。

使用 Spinnaker 简化持续集成和部署

每个采用DevOps实践的组织都希望快速采用“持续”的一切,无论是集成、部署、测试还是监控。对于成功的 DevOps 操作,CI/CD 对于任何小型或大型组织来说都非常重要,它可以缩短开发周期并加快创新速度、减少部署失败、节省回滚并减少 MTTR(平均恢复时间)。

在本文中,我们将揭示一种将应用程序持续集成和持续交付到 Kubernetes 集群的新方法。我们使用 Jenkins 作为 CI 工具,它将轮询 Git 存储库以在提交时构建 Docker 映像并将它们推送到 Docker 注册表。我们将使用 Spinnaker 作为 CD 工具,它持续轮询 Docker 注册表并触发部署管道以更新 Kubernetes 集群中的应用程序。

Image title

上图显示了当开发人员将更改提交到 Github 时,Jenkins 会轮询对已配置分支的提交,并在新提交时触发新的构建。Jenkins 构建 Docker 映像,并使用标记将其推送到 Docker 注册表(您可以选择不同的技术来标记映像,例如使用 build-commit 编号或增量编号)。使用 Spinnaker,我们配置部署管道,以便在注册表中找到新标记(Docker 映像)时触发部署。

Spinnaker 简介

Spinnaker 是由 Netflix 创建的开源多云持续交付工具。它允许我们配置多种部署策略,例如 Highlander 和 Red/Black。它不仅允许我们在发生故障时回滚,还可以触发提升的管道。这意味着我们可以通过定义测试管道来配置复杂的管道,并将它们提升到下一阶段,或者在受控的 Kubernetes 集群中轻松安全地回滚。在本系列的下一篇文章中,我们将详细了解部署策略和管道配置。

Spinnaker 组件

要了解 Spinnaker 的安装,我们需要了解它的工作组件。让我们简要了解一下它的组件及其功能。

Image title
您可以在  Spinnaker 的官方文档页面查看以下组件的详细依赖矩阵和默认绑定端口。

Deck:Spinnaker 的基于浏览器的 UI。

Gate:API 调用方和 Spinnaker UI 通过这个名为 Gate 的 API 网关与 Spinnaker 服务器通信。

Orca:管道和其他临时操作由这个名为 Orca 的业务流程引擎管理。

Clouddriver: 已部署资源的索引和缓存由 Clouddriver 负责。它还有助于调用 AWS、GCE 和 Azure 等云提供商。

Echo: 它负责发送通知,也充当传入的 Webhook。

Igor: 它用于通过 Jenkins 和 Travis CI 等系统中的持续集成作业触发管道,并允许在管道中使用 Jenkins/Travis 阶段。

Front50: 它是 Spinnaker 的元数据存储。它保留所有资源的元数据,包括管道、项目、应用程序和通知。

Rosco: Rosco 烘焙计算机映像(AWS AMI、Azure VM 映像、GCE 映像)。

Rush: 它是 Spinnaker 的脚本执行引擎。

安装 Spinnake

要求:

在开始安装之前,让我们先看看以下要求。Halyard 具有以下要求。在我们的案例中,我们使用了 Ubuntu 16.04。

  • Ubuntu 14.04 或 16.04(Ubuntu 16.04 需要 Spinnaker 1.6.0 或更高版本)
  • Debian 8 或 9
  • 如果要在本地计算机上安装,则仅限 macOS(在 High Sierra 上测试)

设置 Spinnaker 进行 Kubernetes 部署

让我们逐步了解为 Kubernetes 部署设置 Spinnaker 的步骤

1. 设置 Halyard

我们从 Halyard 安装开始。它是 Spinnaker 部署的生命周期管理器。

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

curl -O https://raw.githubusercontent.com/spinnaker/halyard/master/install/debian/InstallHalyard.sh
sudo bash InstallHalyard.sh

2. 设置 Spinnaker 版本

之后,设置要使用的 Spinnaker 版本。

hal version list ### This will return avaialable version 
hal config version edit --version $VERSION 

3. 配置 Spinnaker 存储

现在,我们将选择 Spinnaker 将存储其所有数据的存储驱动程序。Spinnaker 支持多种存储驱动程序,如 S3、Minio 和 Redis。我们将使用 Minio 作为我们的存储驱动程序。

这会将 Minio 作为服务器上的容器运行,并将 Minio 添加为 Spinnaker 中的存储。

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 /dataecho {{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

4. 将 Kubernetes 添加为云提供商

为 Spinnaker 设置存储后,我们会将 Kubernetes 集群添加为云提供商。

帐户名称将是 Kubernetes 集群的名称。这样,我们就可以从单个 Spinnaker 管理多个云提供商(K8s 集群)。

Kubeconfig-file 将是 Kubernetes 的配置文件,您可以从 Kubernetes 主节点上的“~/.kube/”文件夹中获取。

hal config provider kubernetes account add {{account name}} --kubeconfig-file={{ kubeconfig-file path }}

5. 部署

添加 cloud-provider 后,使用以下命令将更改应用于 Spinnaker:

hal deploy apply 

现在我们的大三角帆设置已经准备好了。如果您想知道为什么本文中缺少 Jenkins,我们将在下一篇文章中简要介绍 Jenkins 设置作为我们用例的映像构建器。

结论

在本文中,我们了解了如何利用 Spinnaker 和 Kubernetes 来满足您的应用程序交付需求。通过使用此工具,应用程序开发团队可以更专注于创建高质量的应用程序,并让 Jenkins 和 Spinnaker 负责发布过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/740432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Head First Design Patterns - 命令模式

什么是命令模式 命令模式,把请求封装成对象,以便使用不同的请求、队列或者日志请求来参数化其他对象,并支持可撤回的操作。 为什么会有命令模式 假设要设置一个遥控器,遥控器需要控制多个设备,每个设备除了开关&#…

uniapp微信小程序 隐藏顶部导航栏 路由跳转带参数

隐藏单页顶部导航栏和左上角返回按钮,在pages.json里配置 {"path": "pages/gameLogin/gameLogin","style": {"navigationStyle":"custom","app-plus":{"titleView":false}} } 路由跳转 u…

ARM64汇编06 - 基本整型运算指令

ADD (immediate) 将 Xn 与 imm 相加,结果赋值给 Xd,imm 是无符号数,范围为 0 - 4095。 shift 是对 imm 进行移位,shift 为 0 的时候,表示左移 0 位,即不变。shift 为 1 的时候,表示左移12 位&a…

Linux的MySQL安装与卸载

安装与卸载 卸载安装配置yum源安装MySQL 声明一下本人用的Linux版本是CentOs7.9版本的。 卸载 如果我们用的云服务器,云服务器可能会自带MySQL或者mariadb(其实就是MySQL的一个开源分支),如果我们不想用自带的,需要先…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的水下目标检测系统(深度学习模型+UI界面+训练数据集)

摘要:本研究详述了一种采用深度学习技术的水下目标检测系统,该系统集成了最新的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5等早期算法进行了性能评估对比。该系统能够在各种媒介——包括图像、视频文件、实时视频流及批量文件中——准确地识别水…

【C++教程从0到1入门编程】第八篇:STL中string类的模拟实现

一、 string类的模拟实现 下面是一个列子 #include <iostream> namespace y {class string{public: //string() //无参构造函数// :_str(nullptr)//{}//string(char* str) //有参构造函数// :_str(str)//{}string():_str(new char[1]){_str[0] \0;}string(c…

图论(蓝桥杯 C++ 题目 代码 注解)

目录 迪杰斯特拉模板&#xff08;用来求一个点出发到其它点的最短距离&#xff09;&#xff1a; 克鲁斯卡尔模板&#xff08;用来求最小生成树&#xff09;&#xff1a; 题目一&#xff08;蓝桥王国&#xff09;&#xff1a; 题目二&#xff08;随机数据下的最短路径&#…

爬虫练习:获取某网站高清壁纸

一、相关网站 二、查看robots.txt 三、相关代码 import requests from lxml import etree import osheaders {user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 } #发送请求 list_url https:/…

stm32使用时钟生成PWM时调用__HAL_TIM_SetAutoreload导致PWM消失处理

stm32使用时钟生成PWM时调用__HAL_TIM_SetAutoreload导致PWM消失处理 这一个是配置的时候没有使用影子寄存器导致的, 如果加载的Autoreload的值比原来的这一个值小, 这是会出现一个问题, 如果计数器里面的值记为Count, 如果改变的时候New_Autoreload < Count < Old_Auto…

掌控逻辑流动之美:Python中的条件语句与循环结构深度解析与实战演练

在Python编程的海洋中&#xff0c;条件语句与循环就像是舵手手中的罗盘和船桨&#xff0c;指引着程序执行的方向与节奏。掌握好这两类控制结构&#xff0c;无疑能让您的代码更具智慧与灵动性。本文将深入浅出地介绍Python中的条件语句&#xff08;if-elif-else&#xff09;与循…

CCCorelib 点云球形特征(CloudCompare内置算法库)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里基于每个点的邻域协方差来获取点云中具有的球形几何特征的点,计算方式如下图所示: 二、实现代码 // CloudCompare #include <CCCoreLib/PointCloudTpl.h> #include <CCCoreLib/

C++:[NWRRC2015] Concatenation(洛谷)P7050

题目描述 Famous programmer Gennady likes to create new words. One way to do it is to concatenate existing words. That means writing one word after another. For example, if he has words cat and dog, he would get a word catdog, that could mean something lik…

【系统安全】浅谈保障接口安全的10种技术手段

接口安全是系统稳定亘古不变的道理&#xff0c;作为程序员可以从哪些方面下手呢&#xff1f; 注&#xff1a;因为一些原因&#xff0c;突然想总结接口安全的重要性。之前写过类似的文章&#xff0c;今天增加一些案例总结其应用场景。 1、接口传输加密&#xff0c;不单单依赖h…

spring-boot操作elasticsearch

一、环境准备 springboot与elasticsearch的更新都非常快&#xff0c;为了避免兼容性问题&#xff0c;要注意下选择的版本问题。具体的可参考官网 --> springboot与elasticsearch版本兼容性 1.1导入依赖 <dependencies><dependency><groupId>org.spring…

深度学习基础知识之通道数channels

大多数的深度学习模型&#xff0c;模型上会展示图片的尺寸&#xff0c;如&#xff1a;352x352x3 这里面352x352表示的是像素大小&#xff0c;即高和宽都为352个像素&#xff0c;而3表示的是通道数&#xff0c;指输入的是3通道的RGB图像&#xff0c;每个颜色通道的取值范围为0-2…

中间件面试题之ElasticSearch

ElasticSearch相关面试题 此题是xx位面试题 (1)有两个机房,每个机房两台服务器,总共有4台服务器搭建的ES集群,怎么控制所有副本在一个机房或者某些节点里面。 可以通过打标签的形式,指定哪些索引的主分片在哪个节点上。 首先指定节点的类型: ## 指定节点类型 方式 …

在Ubuntu中如何基于conda安装jupyterlab

在Ubuntu中如何创建ipykernel 可以用下面命令完成 conda create -n newenv python3.8conda activate enwenvconda install ipykernel5.1.4conda install ipython_genutilsipython -m ipykernel install --user --namepython3 --display-name Python3conda install -c conda-fo…

k8s的pod和svc相互访问时网络链路解析

k8s的pod和svc相互访问时网络链路解析 1. k8s环境中pod相互访问1.1. k8s中pod相互访问的整体流程1.2. k8s的相同机器的不同pod相互访问1.3. k8s的不同机器的不同pod相互访问 3. k8s访问svc3.1 nat操作3.2 流量进入到后端pod 4. 疑问和思考4.1 访问pod相互访问为什么不用做nat?…

使用go开发的小tips

开启go modGOROOT是你下载的go编译器的目录。GOPATH的位置是Go开发的工作空间&#xff0c;比如可用于保存Go项目的代码和第三方依赖包。下载不了包多半是镜像源有问题&#xff0c;什么阿里七牛都试下go mod tidy可以拉取未下载的包&#xff0c;移除没用上的包进行web开发时热重…

服务器简单介绍

服务器简单介绍 从软件研究到了硬件&#xff08;伤心&#xff09;&#xff0c;需要学习的太多了。硬件从来不是我的爱好范畴&#xff0c;奈何最近的项目需要考虑和提出的方案需要考虑的挺多&#xff0c;一点点啃吧&#xff01;日记式逐步记下&#xff1a; 服务器分类 按计算器…