使用 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 - 命令模式

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

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…

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

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

spring-boot操作elasticsearch

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

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?…

保研复习数据结构记(9)--基数排序

基数排序的过程&#xff1f;首先设置r个&#xff08;r&#xff1a;每个关键字位可以对应多少取值&#xff09;空队列&#xff0c;&#xff0c;按照各个关键字位权重递增的次序&#xff08;个、十、百&#xff09;&#xff0c;将d个元素&#xff08;关键字可以被拆分成d个部分&a…

金枪鱼群优化算法TSO优化BiLSTM-ATTENTION实现风力发电功率预测(matlab)

金枪鱼群优化算法TSO优化BiLSTM-ATTENTION实现风力发电功率预测&#xff08;matlab&#xff09; TSO-BiLSTM-Attention金枪鱼群算法优化长短期记忆神经网络结合注意力机制的数据回归预测 Matlab语言。 金枪鱼群优化算法&#xff08;Tuna Swarm Optimization&#xff0c;TSO)是一…

生成式人工智能服务安全基本要求实务解析

本文尝试明晰《基本要求》的出台背景与实践定位&#xff0c;梳理《基本要求》所涉的各类安全要求&#xff0c;以便为相关企业遵循执行《基本要求》提供抓手。 引言 自2022年初以来&#xff0c;我国陆续发布算法推荐、深度合成与生成式人工智能服务相关的规范文件&#xff0c;…

丘一丘正则表达式

正则表达式(regular expression,regex,RE) 正则表达式是一种用来简洁表达一组字符串的表达式正则表达式是一种通用的字符串表达框架正则表达式是一种针对字符串表达“简洁”和“特征”思想的工具正则表达式可以用来判断某字符串的特征归属 正则表达式常用操作符 操作符说明实…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Search)

搜索框组件&#xff0c;适用于浏览器的搜索内容输入框等应用场景。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Search(options?: { value?: string, placeholder?: Reso…

混合云构建-VPN打通阿里云和Azure云

要在阿里云和Azure云之间通过VPN打通网络,您需要在两边分别设置VPN网关,并配置相应的连接和路由规则以确保两个云环境之间的网络流量可以互通。以下是一个基本的步骤指南: 为了更具体地说明如何在阿里云和Azure之间通过VPN打通网络,我们将通过一个简化的示例来演示整个过程…

ArcGIS JSAPI 学习教程 - ArcGIS Maps SDK for JavaScript 不同版本4.8-4.28(最新版)离线部署

ArcGIS JSAPI 学习教程 - ArcGIS Maps SDK for JavaScript 不同版本4.8-4.28&#xff08;最新版&#xff09;SDK离线部署 测试资源4.18 以及之前版本4.19 以及之后版本 接触一段时间 ArcGIS JSAPI 之后&#xff0c;整体感觉还好&#xff0c;后来需要解决不同版本问题&#xff0…

redis中通用命令以及key过期策略

通用命令 exists 判断某个key是否存在。 exists key时间复杂度&#xff1a;O(1) 返回值&#xff1a;key 存在的个数。 del 删除指定的 key&#xff0c;可以一次删除一个或者多个。 del key时间复杂度&#xff1a;O(1) 返回值&#xff1a;删除掉的 key 的个数。 expire…

数据结构·复杂度

目录 1 时间复杂度 2 大O渐进表示法 举例子&#xff08;计算时间复杂度为多少&#xff09; 3 空间复杂度 前言&#xff1a;复杂度分为时间复杂度和空间复杂度&#xff0c;两者是不同维度的&#xff0c;所以比较不会放在一起比较&#xff0c;但是时间复杂度和空间复杂度是用…