使用 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 /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

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 负责发布过程。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新加坡大带宽服务器托管优势

在数字化快速发展的今天,服务器托管成为企业拓展业务、提高服务质量的关键环节。而新加坡作为一个国际性的金融、贸易和科技创新中心,其大带宽服务器托管服务在全球范围内享有盛誉。本文将为您科普新加坡大带宽服务器托管的诸多优势。 首先,新…

第十五届蓝桥杯(Web 应用开发)模拟赛 3 期-大学组(被题目描述坑惨了)

目录 1.创意广告牌 2.原子化css 3.神秘咒语 4.朋友圈 5.美食蛋白揭秘 6.营业状态变更 7.小说阅读器 8.冰岛人 9.这是一个”浏览器“ 10.趣味加密解密 总结 1.创意广告牌 这个题目不多说了,只要知道这些css应该都能写出来,不会的平时多查查文…

Docker部署ChatGLM3、One API、FastGPT

创建并运行chatglm3容器 docker run --name chatglm3 -p 8000:8000 registry.cn-hangzhou.aliyuncs.com/ryyan/chatglm.cpp:chatglm3-q5_1 创建并运行one-api容器 (其中挂载路径 D:\one-api 可以选择你自己喜欢的目录) docker run --name oneapi -d -p 3000:3000 -e TZAsia…

k8s基本使用(namespace,pod增删查)-持续更新中

目录 1. 查看Namespace 2. 创建Namespace 2.1 使用纯命令行创建 2.2 编写yaml文件创建 3. 删除Namespace 3.1 使用纯命令行删除 3.2 使用yaml文件删除 二、Pod 1. 查看pod 1.1 查看默认空间的pod 1.2 查看指定空间的pod 1.3 查看全部pod 1.4 查看pod更多信息 1…

HUAWEI 华为交换机 配置 MAC 地址漂移检测示例

组网需求 如 图 2-17 所示,网络中两台 LSW 间网线误接形成了网络环路,引起 MAC 地址发生漂 移、MAC 地址表震荡。 为了能够及时检测网络中出现的环路,可以在 Switch 上配置 MAC 地址漂移检测功能, 通过检测是否发生MAC 地址漂移…

Python in Visual Studio Code 2024年3月发布

排版:Alan Wang 我们很高兴地宣布 2024 年 3 月发布适用于 Visual Studio Code 的 Python 和 Jupyter 扩展! 此版本包括以下公告: 新的“Add Imports”代码操作设置调试 Django 或 Flask 应用时自动启动浏览器Python REPL 的 Shell 集成对本…

Python学习:基本数据类型

Python3 命令行参数 Python 提供了 getopt 模块来获取命令行参数。 %> python test.py arg1 arg2 arg3Python 中也可以所用 sys 的 sys.argv 来获取命令行参数: sys.argv 是命令行参数列表。 len(sys.argv) 计算命令行参数个数。 sys.argv[0] 表示脚本名。tes…

docker ENTRYPOINT [“sh“,“-c“,“java“,“-jar“,“Hello.jar“] 启动失败问题分析

因为没系统的学过linux语法,所以才会产生如下疑问。大佬请跳过。 问题:当在dockerfile里面配置 ENTRYPOINT ["sh","-c","java","-jar","Hello.jar"] ,启动对应容器时会无法正常运行&…

剑指offer经典题目整理(四)

一、树的子结构 1.链接 树的子结构_牛客题霸_牛客网 (nowcoder.com) 2.描述 给两颗二叉树A B,判断B是不是A的子结构 3.思路 将问题拆解开来,首先是找到a树中子结构的位置,然后是判断是否相同,也就是说,我们需要去…

【小白学机器学习8】统计里的自由度

目录 1 自由度 /degree of freedom / df 1.1 物理学的自由度(摘自网上 ^) 1.2 数学里的自由度 1.2.2 统计里的自由度 1.2.3 需要补充线性代数的,用线性代数来理解自由度 1.3 统计学里自由度的定义 1.4 自由度的公式 1.5 线性回归公式…

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

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

结构体的增删查改

结构体&#xff0c;是为了解决生活中的一些不方便利用c语言自带数据类型来表示的问题。例如表示一个学生&#xff0c;那么学生这个个体假如用c语言自带数据类型怎么表示呢。可以使用名字&#xff0c;也就是字符数组&#xff1b;也可以使用学号&#xff0c;也就是int类型。但是这…

Hadoop学习2:完全分布集群搭建

文章目录 Fully-Distributed Operation&#xff08;完全分布模式&#xff09; 重点机器环境同步集群规划配置文件修改以及同步步骤0&#xff1a;下面其他步骤涉及修改配置以这里为准&#xff08;要不然部署使用过程会有很多问题&#xff09;通用配置&#xff08;三台节点机器&a…

工具-百度云盘服务-身份认证

目标 通过百度网盘API的方式去获取网盘中的文件&#xff0c;要实现这的第一步就是需要获取网盘的权限。资料(参考) 如果期望应用访问用户的网盘文件&#xff0c;则需要经过用户同意&#xff0c;这个流程被称为“授权”。百度网盘开放平台基于 OAuth2.0 接入授权。OAuth2.0 是…

配置中心概述

目录 一、配置中心的定义 二、配置中心的工作 三、配置中心的作用 四、SpringBoot中的配置文件 一、配置中心的定义 配置中心就是用来管理项目当中所有配置的系统&#xff0c;也是微服务系统当中不可或缺的一部分。 nacos是一个更易于构建云原生应用的动态服务发现、配置管理…

服务器被大流量攻击怎么办?如何防御攻击?

随着网络的发展&#xff0c;我们所遇到的安全挑战也越来越多。尤其是近年来&#xff0c;网络攻击频发&#xff0c;许多互联网企业深受其扰。为了不影响自身业务的稳定运行&#xff0c;许多企业都在想方设法的寻求解决方案&#xff0c;防止服务器被攻击而影响业务发展。下面我们…

跨境电商选品实战——Ownips静态ip代理+Python爬虫轻松搞定Lazada电商选品

文章目录 一、引言二、Lazada电商平台爬虫实战2.1、分析Lazada电商平台的商品列表接口2.2、定位商品列表计算逻辑2.3、封装IP代理2.4、运行爬虫 三、数据处理及选品分析四、Ownips——企业级全球静态IP代理 一、引言 互联网与外贸的结合&#xff0c;催生了蓬勃兴起的跨境电子商…

el-Switch 开关二次确认

前言 最近在做毕设&#xff0c;有个需求是点击按钮控制用户的状态是否禁用&#xff0c;就看到element有个switch组件可以改造一下&#xff0c;就上网看了一下&#xff0c;结果为了这个效果忙活了很久。。。所以说记录一下&#xff0c;让大家少踩坑。 前置条件 先看完我的需求再…

spring-boot操作elasticsearch

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

挖掘内容资讯App流量价值,Xinstall传参安装技术引领行业变革

在移动互联网时代&#xff0c;内容资讯App已经成为人们获取信息的重要途径。然而&#xff0c;随着用户量的不断增长和业务的不断拓展&#xff0c;如何有效地挖掘流量价值&#xff0c;成为了摆在众多内容资讯App面前的一大难题。而传参安装技术的出现&#xff0c;为这一难题的解…