当前位置: 首页 > news >正文

Spinnaker 基于 docker registry 触发部署

docker registry 触发部署

Spinnaker可以通过Docker镜像的变化来触发部署,这种方法允许你在Docker镜像发生变化时自动启动新的部署流程。

示例原理如下图所示:
在这里插入图片描述
以下是如何在Spinnaker中实现基于Docker Registry触发部署的配置流程。最终实现的效果如下:

  1. 基于jenkins CI构建docker镜像,推送到阿里云ACR镜像仓库;
  2. spinnaker pipeline跟踪镜像仓库中指定镜像tag变化,检测到新tag则使用新的镜像tag更新kubernetes yaml文件image字段;
  3. spinnaker pipeline将yaml文件部署到kubernetes集群。

前置要求:

  • 已在kubernetes集群中部署spinnaker
  • 准备可用的docker镜像仓库,由于阿里云ACR镜像仓库个人版可免费使用,并且国内访问比较流畅,以下以阿里云镜像仓库为例。

镜像仓库默认存在一个latest标签的nginx官方镜像。
在这里插入图片描述

启用 docker-registry provider

官方文档:https://spinnaker.io/docs/setup/install/providers/docker-registry/

配置spinnaker,启用docker-registry提供程序:

hal config provider docker-registry enable

假设您的注册表具有地址 $ADDRESS 、存储库 $REPOSITORIES 、用户名 $USERNAME 和密码 $PASSWORD

ADDRESS=registry.cn-shenzhen.aliyuncs.com
REPOSITORIES=cnmirror/nginx
USERNAME=xxx@mail.com
PASSWORD=xxxxxx

运行以下 hal 的帐户添加到 Docker 注册表帐户列表中:

hal config provider docker-registry account add aliyun-acr \--address $ADDRESS \--repositories $REPOSITORIES \--track-digests=true \--username $USERNAME \--password $PASSWORD

注意:参数–track-digests=true是一个重要的参数,因此即使标签已经存在但内容随摘要(哈希值)更改,管道也可以自动触发。

重新部署spinnaker,以使配置生效。

hal deploy apply

创建spinnaker应用

创建应用

点击右侧Create Application
在这里插入图片描述
配置名称和邮箱
在这里插入图片描述

创建PIPELINES

在这里插入图片描述

修改Configuration 阶段

选择Automated Triggers,点击Add Trigger
在这里插入图片描述
在Type选框中搜索Docker Registry,并选择以下参数
在这里插入图片描述

在下方Artifact Constraints中,定义一个新的Artifact
在这里插入图片描述

填写的相关参数:

Docker image: registry.cn-shenzhen.aliyuncs.com/cnmirror/nginx
Object path:registry.cn-shenzhen.aliyuncs.com/cnmirror/nginx:${parameters['VERSION']}

创建deploy阶段

点击 Add stage
在这里插入图片描述
选择Type类型为Deploy(Manifest),选择Account及应用部署的Namespace,最后配置Manifest。
在这里插入图片描述
示例Manifest如下:

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx-appname: nginx-app
spec:replicas: 1selector:matchLabels:app: nginx-apptemplate:metadata:labels:app: nginx-appspec:containers:- image: registry.cn-shenzhen.aliyuncs.com/cnmirror/nginxname: nginx-appports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: nginx-applabels:run: nginx-app
spec:ports:- port: 80protocol: TCPtargetPort: 80selector:run: nginx-app

选择Required Artifacts to Bind
在这里插入图片描述

点击右下方的Save Changes。

测试触发部署

这里准备一个nginx镜像作为示例应用,jenkins镜像构建部分省略,作为演示使用手动方式上传镜像到镜像仓库。

docker pull docker.io/library/nginx:latest
docker tag docker.io/library/nginx:latest registry.cn-shenzhen.aliyuncs.com/cnmirror/nginx:v1.0
docker push registry.cn-shenzhen.aliyuncs.com/cnmirror/nginx:v1.0

等待片刻,点击PIPELINES,查看部署是否成功
在这里插入图片描述
连接到kubernetes集群,查看部署的nginx-app pods以及service

root@node40:~# kubectl get pods
NAME                         READY   STATUS    RESTARTS   AGE
nginx-app-7bf7d4d4cd-hhrtj   1/1     Running   0          26s
root@node40:~# 
root@node40:~# kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   74m
nginx-app    ClusterIP   10.96.3.41   <none>        80/TCP    63m

查看镜像

root@node40:~# kubectl get pods -l app=nginx-app -o yaml | grep image:- image: registry.cn-shenzhen.aliyuncs.com/cnmirror/nginx:v1.0image: registry.cn-shenzhen.aliyuncs.com/cnmirror/nginx:v1.0

推送新的镜像到镜像仓库,模拟jenkins镜像构建

docker tag docker.io/library/nginx:latest registry.cn-shenzhen.aliyuncs.com/cnmirror/nginx:v1.1
docker push registry.cn-shenzhen.aliyuncs.com/cnmirror/nginx:v1.1

确认新的PIPELINES部署已自动执行
在这里插入图片描述
查看镜像,已更新为v1.1版本

root@node40:~# kubectl get pods -l app=nginx-app -o yaml | grep image:- image: registry.cn-shenzhen.aliyuncs.com/cnmirror/nginx:v1.1image: registry.cn-shenzhen.aliyuncs.com/cnmirror/nginx:v1.0

参考:
https://docs.armory.io/continuous-deployment/spinnaker-user-guides/kubernetes-deployments/

相关文章:

Spinnaker 基于 docker registry 触发部署

docker registry 触发部署 Spinnaker可以通过Docker镜像的变化来触发部署&#xff0c;这种方法允许你在Docker镜像发生变化时自动启动新的部署流程。 示例原理如下图所示&#xff1a; 以下是如何在Spinnaker中实现基于Docker Registry触发部署的配置流程。最终实现的效果如下…...

2023亚马逊云科技re:Invent,在开发者板块探究如何利用技术重塑业务

美国当地时间11月27日&#xff0c;一年一度的亚马逊云科技re:Invent大会在美国拉斯维加斯盛大开幕。这场全球云计算领域的前沿盛会&#xff0c;已连续12年成为引领行业的风向标。那么本次2023亚马逊云科技re:Invent大会又有哪些可玩、可看的新项目&#xff0c;下面就一起来瞧一…...

JAVA 使用stream流将List中的对象某一属性创建新的List

JAVA 使用stream流将List中的对象某一属性创建新的List 1.stream流介绍 Java Stream是Java 8引入的一种新机制&#xff0c;它可以让我们以声明式方式操作集合数据&#xff0c;提供了更加简洁、优雅的集合处理方式。Stream是一个来自数据源的元素队列&#xff0c;并支持聚合操…...

Elasticsearch:ES|QL 函数及操作符

如果你对 ES|QL 还不是很熟悉的话&#xff0c;请阅读之前的文章 “Elasticsearch&#xff1a;ES|QL 查询语言简介​​​​​​​”。ES|QL 提供了一整套用于处理数据的函数和运算符。 功能分为以下几类&#xff1a; 目录 ES|QL 聚合函数 AVG COUNT COUNT_DISTINCT 计数为近…...

SpringBoot——Swagger2 接口规范

优质博文&#xff1a;IT-BLOG-CN 如今&#xff0c;REST和微服务已经有了很大的发展势头。但是&#xff0c;REST规范中并没有提供一种规范来编写我们的对外REST接口API文档。每个人都在用自己的方式记录api文档&#xff0c;因此没有一种标准规范能够让我们很容易的理解和使用该…...

网络入门---网络编程预备知识

目录标题 ifconfigip地址和mac地址的区别端口号pid和端口号UDP和TCP的初步了解网络字节序socket套接字 ifconfig 通过指令ifconfig便可以查看到两个网络接口&#xff1a; 我们当前使用的是一个linux服务器并是一个终端设备&#xff0c;所以他只需要一个接口用来入网即可&…...

记录一次YAMLException异常

记录一次YAMLException异常 ✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 报错以及B…...

calendar --- 日历相关函数

calendar --- 日历相关函数 源代码&#xff1a; Lib/calendar.py 这个模块让你可以输出像 Unix cal 那样的日历&#xff0c;它还提供了其它与日历相关的实用函数。 默认情况下&#xff0c;这些日历把星期一作为一周的第一天&#xff0c;星期天作为一周的最后一天&#xff08;这…...

中国信息通信研究院产业与规划研究所校招一面、二面内容

本文介绍2024届秋招中&#xff0c;中国信息通信研究院的数字孪生智慧城市研究员岗位一面、二面的面试基本情况、提问问题等。 10月投递了中国信息通信研究院的数字孪生智慧城市研究员岗位&#xff0c;所在部门为数字孪生与城市数字化研究部。目前完成了一面与二面&#xff0c;在…...

一些数据库学习的小结

一些数据库学习的小结&#xff1a; SQL: 遵循ACID原则。支持Transaction。适合在线交易处理(OLTP)&#xff0c;不适合在线分析处理(OLAP)。例子有 MySQL 读写效率 单机约1KQPS POSTGRESQL NoSQL: 遵循BASE原则。不支持Transaction。例子有 DynamoDB - Amazon Key-Value BigTa…...

【计算机网络】虚拟路由冗余(VRRP)协议原理与配置

目录 1、VRRP虚拟路由器冗余协议 1.1、协议作用 1.2、名词解释 1.3、简介 1.4、工作原理 1.5、应用实例 2、 VRRP配置 2.1、配置命令 1、VRRP虚拟路由器冗余协议 1.1、协议作用 虚拟路由冗余协议(Virtual Router Redundancy Protocol&#xff0c;简称VRRP)是由IETF…...

Using Set Processing Examples 使用集合处理示例

Using Set Processing Examples 使用集合处理示例 Each of the following topics contains an example of set processing. 以下每个主题都包含一个集处理示例。 Payroll 工资单 In this example, suppose the payroll department needs to give a 1000 USD salary increase to…...

Spark将execl表格文件导入到mysql中

实现代码 excel所需的pom依赖 案例实现 实现代码 package excel_mysqlimport org.apache.spark.sql.SparkSession import java.util.Propertiesobject t1 {def main(args: Array[String]): Unit {val spark SparkSession.builder().appName("ExcelToMySQL") /…...

Vue3-Eslint配置代码风格

prettier风格配置 官网&#xff1a;https://prettier.io Eslint&#xff1a;代码纠错&#xff0c;关注于规范 prettier&#xff1a;专注于代码格式化的插件&#xff0c;让代码更加美观 两者各有所长&#xff0c;配合使用优化代码 生效前提&#xff1a; 1&#xff09;禁用…...

“Install Js dependencies failed“JS SDK安装失败【Bug已解决-鸿蒙开发】

文章目录 项目场景:问题描述原因分析:解决方案:解决措施1解决方案2:其他解决方案解决方案3:此Bug解决方案总结项目场景: 在下载JS SDK时,出现下载失败的情况,并显示“Install Js dependencies failed”。 在使用版本为DevEco Studio 3.0.0.601 Beta1进行低代码开发时…...

接口测试入门8问(含答案+文档)

Q1&#xff1a;什么是接口测试&#xff0c;基础知识什么的讲讲吧&#xff01; A&#xff1a;你好&#xff0c;接口可以分下面几种 1、系统与系统之间的调用&#xff0c;比如银行会提供接口供电子商务网站调用&#xff0c;或者说&#xff0c;支付宝会提供接口给淘宝调用 2、上…...

【Spring之事务底层源码解析,持续更新中~~~】

文章目录 一、EnableTransactionManagement工作原理二、Spring事务基本执行原理三、Spring事务传播机制与分类四、Spring事务强制回滚五、TransactionSynchronization六、Spring事务详细执行流程 一、EnableTransactionManagement工作原理 二、Spring事务基本执行原理 三、Sp…...

吃火锅(Python)

题目描述 吃火锅 以上图片来自微信朋友圈&#xff1a;这种天气你有什么破事打电话给我基本没用。但是如果你说“吃火锅”&#xff0c;那就厉害了&#xff0c;我们的故事就开始了。 本题要求你实现一个程序&#xff0c;自动检查你朋友给你发来的信息里有没有 chi1 huo3 guo1。…...

深圳市东星制冷机电受邀莅临2024国际生物发酵展,济南与您相约

深圳市东星制冷机电有限公司受邀莅临2024国际生物发酵展&#xff0c;济南3月5-7日与您相约&#xff01; 展位号&#xff1a;1号馆A53 深圳市东星制冷机电有限公司&#xff0c;&#xff08;东星集团&#xff09;是一家专业生产制冷设备的外商独资大型集团企业,拥有30多年的生产…...

内网渗透(哈希传递)

概念 早期SMB协议明文在网络上传输数据&#xff0c;后来诞生了LM验证机制&#xff0c;LM机制由于过于简单&#xff0c;微软提出了WindowsNT挑战/响应机制&#xff0c;这就是NTLM。 哈希传递前提 同密码(攻击主机与实现主机两台要密码一致)。 NTLM协议 加密ntlm哈希 转换成…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...