在CSDN学Golang云原生(持续交付Argo)
一,Argo安装配置
Argo是一个基于Kubernetes的容器本地工作流引擎,可以帮助用户在Kubernetes上创建、运行和维护容器化应用程序。下面是Argo安装配置的步骤:
- 首先确保你已经安装了kubectl和helm
- 添加chart仓库
$ helm repo add argo https://argoproj.github.io/argo-helm
- 创建namespace
$ kubectl create namespace argocd
- 安装 Argo CD
$ helm install argocd argo/argo-cd --version 3.8.5 -n argocd \--set server.extraArgs={--insecure} \--set rbac.create=true \--set server.service.type=LoadBalancer
其中,server.extraArgs={--insecure} 表示允许不受信任的证书。
rbac.create=true 表示启用RBAC。
server.service.type=LoadBalancer 表示使用 LoadBalancer 类型的 Service。
- 查看 Argo CD 的服务地址
$ kubectl get svc -n argocd | grep argocd-server
argocd-server LoadBalancer xxx.xxx.xxx.xxx <pending> 80:xxxxx/TCP,443:xxxxx/TCP 5m47s
- 访问 Argo CD UI
在浏览器中输入 http://<EXTERNAL-IP>:80 访问 Argo CD 的 UI 界面,用户名为 admin,密码为 kubectl get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d,其中 <EXTERNAL-IP> 为上面 kubectl get svc 命令输出的 LoadBalancer IP。
- 使用 Argo CD
现在你已经可以使用 Argo CD 来创建、运行和维护容器化应用程序了。
二,Argo CD持续交付
Argo CD 是一个基于 Kubernetes 的 GitOps 持续交付工具,可以将应用程序的所有部署和管理任务都自动化,从而提高生产力和可靠性。下面是使用 Argo CD 进行持续交付的步骤:
- 准备工作
首先,你需要安装并配置好以下工具:
- Kubernetes 集群
- kubectl 工具
- Helm 包管理器
- Argo CD 工具
- 创建应用程序
在 Argo CD 的 UI 界面中创建一个新的应用程序,并指定该应用程序所在的 Git 仓库和分支。例如,你可以使用以下 YAML 文件创建名为 myapp 的应用程序:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:name: myapp
spec:destination:namespace: defaultserver: https://kubernetes.default.svc.cluster.localproject: defaultsource:path: .repoURL: https://github.com/username/myapp.gittargetRevision: HEADsyncPolicy:automated:prune: trueselfHealTimeout: 3600s
其中,destination.namespace 表示目标命名空间;destination.server 表示目标 Kubernetes API Server 地址;project 表示项目名称;source.path 表示源代码路径;source.repoURL 表示 Git 仓库地址;source.targetRevision 表示要同步的 Git 分支或提交。
- 定义部署模板
在 Git 仓库中定义 Kubernetes 部署模板,例如使用 Helm Chart。
- 启用自动同步
在应用程序的 syncPolicy 中启用自动同步,这样 Argo CD 就会自动检测 Git 仓库中的变更,并将其同步到 Kubernetes 集群中。例如:
syncPolicy:automated:prune: trueselfHealTimeout: 3600s
其中,prune 表示删除未在 Git 仓库中定义的资源;selfHealTimeout 表示重新同步之前等待的时间。
- 定义环境
在 Argo CD 的 UI 界面中创建一个新的环境(如开发环境、测试环境、生产环境等),并指定该环境所在的 Kubernetes 集群和命名空间。例如:
apiVersion: argoproj.io/v1alpha1
kind: Environment
metadata:name: dev
spec:clusterName: myclusternamespace: development
- 定义发布策略
在 Argo CD 的 UI 界面中定义发布策略,例如:当代码提交到 master 分支时,自动触发部署到生产环境。
- 自动化测试
使用测试框架对应用程序进行自动化测试,并将测试结果作为注释添加到 Git 提交信息中。例如:
$ go test ./... -v | tee >(kubectl annotate deployment/myapp --overwrite=test-results=/dev/stdin)
其中,kubectl annotate deployment/myapp --overwrite=test-results=/dev/stdin 表示将测试结果作为注释添加到名为 myapp 的 Deployment 中。
- 执行持续交付
当代码提交到 Git 仓库时,Argo CD 就会自动检测变更,并执行持续交付流程。如果所有的自动化测试都通过了,应用程序就会被部署到指定的 Kubernetes 集群和命名空间中
三,Argo Canary和BlueGreen部署
Argo CD 支持 Canary 和 Blue-Green 部署模式,以下是使用 Argo CD 进行 Canary 和 Blue-Green 部署的步骤:
Canary 部署
Canary 部署模式可以让你逐渐将新版本应用程序引入到生产环境中,并在确保稳定性的情况下逐步增加流量。
- 准备工作
首先,你需要安装并配置好以下工具:
- Kubernetes 集群
- kubectl 工具
- Helm 包管理器
- Argo CD 工具
- 创建应用程序
在 Argo CD 的 UI 界面中创建一个新的应用程序,并指定该应用程序所在的 Git 仓库和分支。例如,你可以使用以下 YAML 文件创建名为 myapp 的应用程序:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:name: myapp
spec:destination:namespace: defaultserver: https://kubernetes.default.svc.cluster.localproject: defaultsource:path: .repoURL: https://github.com/username/myapp.gittargetRevision: HEADsyncPolicy:automated:prune: trueselfHealTimeout: 3600s
其中,destination.namespace 表示目标命名空间;destination.server 表示目标 Kubernetes API Server 地址;project 表示项目名称;source.path 表示源代码路径;source.repoURL 表示 Git 仓库地址;source.targetRevision 表示要同步的 Git 分支或提交。
- 定义部署模板
在 Git 仓库中定义 Kubernetes 部署模板,例如使用 Helm Chart。
- 启用自动同步
在应用程序的 syncPolicy 中启用自动同步,这样 Argo CD 就会自动检测 Git 仓库中的变更,并将其同步到 Kubernetes 集群中。例如:
syncPolicy:automated:prune: trueselfHealTimeout: 3600s
其中,prune 表示删除未在 Git 仓库中定义的资源;selfHealTimeout 表示重新同步之前等待的时间。
- 定义环境
在 Argo CD 的 UI 界面中创建一个新的环境(如开发环境、测试环境、生产环境等),并指定该环境所在的 Kubernetes 集群和命名空间。例如:
apiVersion: argoproj.io/v1alpha1
kind: Environment
metadata:name: dev
spec:clusterName: myclusternamespace: development
- 定义发布策略
定义 Canary 发布策略,例如:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:name: myapp-canary-rollout
spec:strategy: Canary
其中,strategy 表示采用 Canary 策略。
- 定义 Canary 规则
在 Kubernetes 中定义 Canary 规则,例如:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: myapp-canary-vs
spec:hosts:- myapp.example.comhttp:- route:- destination:host: myappsubset: v1 weight: 90 - destination:host: myappsubset: v2 weight: 10
其中,subset 表示版本号;weight 表示流量占比。
- 执行持续交付
当代码提交到 Git 仓库时,Argo CD 就会自动检测变更,并执行持续交付流程。新版本的应用程序会先部署到 Canary 环境中,并将一小部分流量引入到生产环境中。如果没有发现问题,就可以逐步增加流量。
Blue-Green 部署
Blue-Green 部署模式可以让你在完全安装新版本应用程序之前,在一个与生产环境相同的环境中进行测试和验证。
- 准备工作
首先,你需要安装并配置好以下工具:
- Kubernetes 集群
- kubectl 工具
- Helm 包管理器
- Argo CD 工具
- 创建应用程序
在 Argo CD 的 UI 界面中创建一个新的应用程序,并指定该应用程序所在的 Git 仓库和分支。例如,你可以使用以下 YAML 文件创建名为 myapp 的应用程序:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:name: myapp
spec:destination:namespace: defaultserver: https://kubernetes.default.svc.cluster.localproject: defaultsource:path: .repoURL: https://github.com/username/myapp.gittargetRevision: HEADsyncPolicy:automated:prune: trueselfHealTimeout: 3600s
其中,destination.namespace 表示目标命名空间;destination.server 表示目标 Kubernetes API Server 地址;project 表示项目名称;source.path 表示源代码路径;source.repoURL 表示 Git 仓库地址;source.targetRevision 表示要同步的 Git 分支或提交。
- 定义部署模板
在 Git 仓库中定义 Kubernetes 部署模板,例如使用 Helm Chart。
- 启用自动同步
在应用程序的 syncPolicy 中启用自动同步,这样 Argo CD 就会自动检测 Git 仓库中的变更,并将其同步到 Kubernetes 集群中。例如:
syncPolicy:automated:prune: trueselfHealTimeout: 3600s
其中,prune 表示删除未在 Git 仓库中定义的资源;selfHealTimeout 表示重新同步之前等待的时间。
- 定义环境
在 Argo CD 的 UI 界面中创建一个新的环境(如开发环境、测试环境、生产环境等),并指定该环境所在的 Kubernetes 集群和命名空间。例如:
apiVersion: argoproj.io/v1alpha1
kind: Environment
metadata:name: dev
spec:clusterName: myclusternamespace: development
- 定义发布策略
定义 Blue-Green 发布策略,例如:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:name: myapp-bluegreen-rollout
spec:strategy: BlueGreen
其中,strategy 表示采用 Blue-Green 策略。
- 定义新版本规则
在 Kubernetes 中定义新版本规则,例如:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:name: myapp-new-ingress
spec:rules:- host: myapp.example.com http:paths:- pathType: Prefix path: / backend:servicePort: 80 serviceName: myapp-new
其中,serviceName 表示使用新版本服务;servicePort 表示服务端口号。
- 执行持续交付
当代码提交到 Git 仓库时,Argo CD 就会自动检测变更,并执行持续交付流程。新版本的应用程序会先部署到与生产环境相同的环境中,并进行测试和验证。如果一切正常,就可以切换流量到新版本应用程序上。
相关文章:
在CSDN学Golang云原生(持续交付Argo)
一,Argo安装配置 Argo是一个基于Kubernetes的容器本地工作流引擎,可以帮助用户在Kubernetes上创建、运行和维护容器化应用程序。下面是Argo安装配置的步骤: 首先确保你已经安装了kubectl和helm添加chart仓库 $ helm repo add argo https:/…...
安全运维 -- splunk 集群配置归档
0x00 背景 splunk 集群索引服务器容量满了以后,为了防止数据丢失,需要对旧数据进行归档保存。 0x01 原理 指定一台大容量服务器,创建共享文件夹,并将集群里的所有indexer指向这个归档共享目录。 0x02 实施 集群的每个indexer都…...
使用kind在mac本地搭建k8s及istio
序 之前使用multipass装ubuntu,然后再用microk8s搭建k8s,这会直接用orbstack及kind在本地搭建k8s及istio 安装 orbstack 通过orbstack这个地址下载,主要是开销低,用来替代docker desktop 添加国内源 ~/.orbstack/config/dock…...
11、springboot项目启动时对容器中的bean进行延迟初始化
springboot项目启动时对容器中的bean进行延迟初始化 预初始化: Spring Boot在启动应用时,会启动Spring容器,当启动Spring容器时,Spring会自动初始化容器中所有的singleton Bean——这是默认行为 预初始化的好处: 1、项…...
树莓派镜像安装 + 设置 + 镜像批量化操作 - 自动化烧写SD Card (三)
简介 仍然强调所有的测试都是来自树莓派3B, 并使用手头上的绿联读卡器进行测试;实现方案: 如 《树莓派镜像安装 设置 镜像批量化操作 - USB boot (二)》中所写, 可以使用树莓派USB挂载方式, 编写自动化脚本, 当有对应的设备出现的时候,格式化 烧写镜…...
C++继承特性(4)——友元与静态
目录 一.继承与友元的关系 二.继承与静态成员的关系 先回顾一下静态成员变量: 运行TestPerson()函数: 测试案例2: 三.练习题: 一.继承与友元的关系 友元关系不能被继承,也就是说父类中的友元函数不能访问子类私…...
VR党建主题数字互动虚拟展馆软件开启党建铸魂育人新篇章
当今时代新媒体技术的发展对大学生的学习、生活等产生着深远的影响。高校作为党建育人的重要场所,充分借助VR技术的强大优势,合理运用到育人工作中,能够不断丰富教育内容。VR智慧党建展厅展馆结合VR技术营造的虚拟现实空间,将党的…...
单网卡实现 双IP 双网段(内外网)同时运行
前提是内外网是同一网线连接(双网线双网卡的具体可以自己搜索下。理论上都设置静态IP后把外网跃点设置小,内网跃点设置大,关闭自动跃点设置同一个接口跃点数,在通过命令提示符添加内网网址走内网网关就可以了)。 需要使…...
C# 委托2
一.委托 1.委托概述: (1)声明一个委托类型。委托声明看上去和方法声明相似,只是没有实现块。 (2)使用该委托类型声明一个委托变量 (3)创建委托类型的对象,把它赋值给委…...
【计算机网络】网络层协议 -- IP协议
文章目录 1. 网络层做了什么事2. IP协议的简介3. IP协议格式4. 分片与组装5. 网段划分6. 特殊的IP地址7. IP地址的数量限制8. 私网IP地址和公网IP地址9. 路由 1. 网络层做了什么事 保证数据可靠地从一台主机到另一台主机 当双方在进行基于TCP的网络通信时,要保证将数…...
记录浙政钉的消息通知的一次开发实战记录
先忍不住吐槽下钉钉的开发文档,实在是不敢恭维,首先每个术语描述都是不统一的,比如有些地方写“”群聊“”,有些地方写“会话”,有些地方写“钉消息”,总之他们自己想怎么写,怎么写,…...
详解主流的Hybrid App 技术框架与研发方案
移动操作系统在经历了诸神混战之后,BlackBerry OS、Symbian OS、Windows Phone等早期的移动操作系统逐渐因失去竞争力而退出。目前,市场上主要只剩下安卓和iOS两大阵营,使得iOS和安卓工程师成为抢手资源。然而,由于两者系统的差异…...
【软件测试】性能测试工具- LoadRunner的介绍和使用
目录 1. LoadRunner是什么2. LoadRunner环境搭建3. LoadRunner三大组件4. LoadRunner脚本录制4.1 WebTous项目介绍启动WebTous项目访问WebTous项目相关配置 4.2 脚本录制新建脚本录制脚本运行脚本 4.3 脚本加强插入事务插入集合点插入检查点插入日志字符串比较 1. LoadRunner是…...
react
react权威面试题 1.jsx转化过程2.fiber架构的理解,解决了什么问题?理解fiber是什么 3.react diff原理tree diffcomponent diffelement diff 4.如何提高组件渲染效率shouldComponentUpdatePureComponentReact.memo 5.react中render方法原理,触…...
AI入门:了解人工智能的基础知识
介绍 人工智能(Artificial Intelligence,简称AI)是一门研究如何使机器能够智能地模拟人类思维和行为的科学与技术领域。在过去几十年里,AI取得了显著的发展,并且在各个领域都产生了深远的影响。本文将引导您进入AI的世…...
ACL原理
ACL原理 ACL是一种用于控制网络设备访问权限的技术,可以通过配置ACL来限制特定用户、应用程序或网络设备对网络资源的访问。 1、ACL(Access Control List) 2、ACL是一种包过滤技术。 3、ACL基于IP包头的IP地址、四层TCP/UDP头部的端口号、…...
EP4CE6E22C8N Error: Can‘t recognize silicon ID for device 1
经过各种排查,发现是AS配置不对,仅供参考 工程 参考某处的工程画板配置的FPGA板子,用于学习入门FPGA。 烧录sof文件是正常的,并能正常运行。 但是烧录jic是failed,查看报错为:Error: Can’t recognize si…...
vue3-seamless-scroll无缝滚动
安装 npm install vue3-seamless-scroll --save 组件配置 list 无缝滚动列表数据,组件内部使用列表长度。 type: Array required: true v-model 通过v-model控制动画滚动与停止,默认开始滚动 type: Boolean, default: true, required: false dire…...
适配器模式——不兼容结构的协调
1、简介 1.1、概述 有的笔记本电脑的工作电压是20V,而我国的家庭用电是220V,如何让20V的笔记本电脑能够在220V的电压下工作?答案是引入一个电源适配器(AC Adapter),俗称充电器/变压器。有了这…...
【NVIDIA CUDA】2023 CUDA夏令营编程模型(一)
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
