借助 Terraform 功能协调部署 CI/CD 流水线-Part2

在第一部分的文章中,我们介绍了3个步骤,完成了教程的基础配置:

 

  • 使用 Terraform 创建 AWS EKS Infra
  • 在 EKS 集群上部署 ArgoCD 及其依赖项
  • 设置 Bitbucket Pipeline并部署到 ECR Repo

 

本文将继续完成剩余的步骤,以实现 Terraform 编排部署 CI/CD 流水线。

 

为 ArgoCD 持续部署设置 GitOps 仓库

我们需要 ArgoCD 用于持续部署的另一个 repo,就需要再创建一个。

 

在这里,我们可以使用 ArgoCD GitOps 文件夹中的示例文件,比如 Analytics Node 文件。

 

image.png

 

将所有文件和文件夹原样复制到您刚刚创建的 ArgoCD GitOps repo 中。请确保使用与示例 repo 中相同的文件夹结构。

 

示例 repo URL: https://github.com/dcgmechanics/EKS-TF-Bitbucket-Pipeline-ArgoCD-GitOps/tree/main/ArgoCD%20GitOps/Analytics%20Node

 

例如,请看下面的 repo 文件:

 

image.png

 

在这里,我更改了所需的名称、值和详细信息,如 Image URL 和容器端口。您可以根据自己应用程序的需要添加或删除值。

 

现在,让我们将样本 repo 中的所有文件添加到 ArgoCD GitOps repo 中。

 

deployments/app.yaml中,我们需要确保写入与 ArgoCD GitOps Repo 相同的 Repo URL 和分支,下面是一个示例。

 

image.png

 

repoURL 包含 ArgoCD GitOps 仓库的 URL。示例这里使用的是 SSH URL,利用 SSH Key 将该 repo 连接到 ArgoCD。您也可以使用 HTTPS。

 

targetRevision 中,我们需要说明 GitOps 操作将在哪个分支触发,因为下列部署的是单个应用程序,所以将使用 master 分支,但如果您有多个应用程序,并希望使用 GitOps 部署所有应用程序,则可以使用单个 repo 和多个分支,其中每个分支都包含不同的应用程序配置和部署 YAML。

 

image.png

 

image.png

 

image.png

 

我们准备就绪。现在,我们需要将应用程序部署到步骤 2 中启动的 ArgoCD 应用程序中。

 

为此,我们首先需要将 ArgoCD-GitOps Repo 连接到 ArgoCD。请进入 ArgoCD 应用程序,点击 Setting

 

image.png

 

点击 Repositories,然后点击Connect Repo,填写 ArgoCD-GitOps Repo 的详细信息。

 

image.png

 

您也可以使用 HTTPS。但请记住,使用 SSH 时,您需要使用 linux 上的 ssh-keygen 命令创建私钥和公钥。

 

image.png

 

这里的 id_rsa 是私钥,id_rsa.pub 是公钥。公钥将添加到 Repo 访问密钥之上。

 

image.png

 

私钥将添加到 ArgoCD App connect repo 选项中。

 

image.png

 

希望您能按指示操作。完成后,点击连接按钮。它会将 ArgoCD-GitOps repo 连接到 ArgoCD,并显示成功,如下图所示。

 

image.png

 

现在,我们终于可以将应用程序部署到 ArgoCD 上了

 

要知道,ArgoCD 的初始部署不会自动进行,我们必须先启动它。

 

为此,我们先在电脑上克隆 ArgoCD-GitOps repo,然后转到 deployments 文件夹,就可以将部署应用到 ArgoCD 上了。

 

但在此之前,建议先创建 A 记录,并在 argocd-gitops/deployments/backend-nodejs-app-ingress.yaml 文件中指定域名。

 

您也可以选择您的 DNS 托管在的地方,godaddy 或 namecheap 或其他地方。

 

DNS 记录将指向我们在步骤 2 中创建的同一个网络负载平衡器。具体如下:

 

image.png

 

完成上述操作后,我们就可以使用 kubectl 命令部署应用程序了。

 

$ kubectl apply -f app.yaml.

 

image.png

 

之后,您就可以在 ArgoCD 控制台中看到应用程序了。

 

image.png

 

它显示的是健康的,我们看看能不能通过URL访问这个应用。

 

image.png

 

这说明它完全正常,我们就可以进行最后一步了。

 

使用 Bitbucket Pipeline 设置 CI/CD 并启用自动更改

为此,我们需要将 ArgoCD-GitOps repo 与 NodeJS 示例应用程序 repo 进行验证。这样,示例 NodeJS 应用程序就能在 ArgoCD-GitOps repo 中进行更改,由于 ArgoCD 应用程序与 repo 保持同步,它将自动获取新更改并部署到其中。在本演示中,我们将更新 deployments/kustomization.yaml 文件的 newTag 值。

 

为此,我们需要创建 ArgoCD-GitOps 访问令牌,NodeJS Repo 将使用它来更改 kustomization.yaml 文件中的值。

 

转到 Settings > Access Tokens > Create Repository Access Token

 

image.png

 

授予写入权限,以便 Bitbucket Pipeline 能将值写入其中。点击 Create 后,您会看到如下界面:

 

Screen Shot 2024-03-08 at 2.17.37 pm.png

 

在这个窗口中,我们只需要第一部分和最后一部分,第一部分是 Auth Token,最后一部分是 Email ID。

 

因此,让我们将 Auth 令牌复制并粘贴到 NodeJS 应用程序存储库变量中去。

 

image.png

 

完成后,让我们转到 NodeJS 应用程序的 Bitbucket Pielines 部分,修改 bitbucket-pipelines.yml 文件。

 

您可以从我最初分享的 GitHub Repo 中复制 CD(又称持续交付/部署)步骤。

 

image.png

 

在第 23 行,您需要用 ArgoCD-GitOps repo URL 更新 repo URL。

 

在第 28 行,用创建 ArgoCD-GitOps Repo 访问令牌时获得的值更改用户电子邮件。

 

另外,在第 21 行,设置了手动部署触发器:

 

image.png

 

您可以移除它,在没有外部干扰的情况下持续使用 CI/CD,但不建议在生产部署中这样做。

 

保存更改后,流水线将自动运行,让我们等待 CI 和 CD 两个步骤完成。

 

image.png

 

正如你所看到的,kustomization.yaml 文件的 newTag 值应更改为 5,因此让我们去 ArgoCD-GitOps repo 检查一下提交情况。

 

image.png

 

此时 bot 已经更改了值,让我们转到 ArgoCD 控制台,看看新版本是否已经部署。

 

仅供参考,一旦检测到版本更改,ArgoCD 通常需要 2-5 分钟来更新部署

 

经过检查,我们可以清楚地看到新版本已经部署。

 

image.png

 

我们可以通过点击 pod 并检查镜像标签(如下所示)来确认修订:

 

image.png

 

我们可以看到,“5”号目前正在运行,网站也运行得很好。

 

最终,我们在 AWS EKS (Terraform) 上使用 Bitbucket Pipeline 完成了端到端的 ArgoCD GitOps。

 

此外,不要忘记删除在 EKS 或 AWS 中创建的所有资源,可以使用 kubectl命令删除我们在外部创建的所有命名空间,如 argocdnode js 应用程序的 nodejs-app,然后运行 terraform destroy 删除所有内容。

 

image.png

希望这能帮助您部署 CI/CD 应用程序部署环境。在这个软件仓库中,有多个应用程序及其 ArgoCD 部署代码,它们肯定会在多个使用场景中为你们提供帮助。

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

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

相关文章

windows下pytorch的dataloader多进程(num_workers)问题,为何num_workers的值只能为0?

问题背景介绍 本人是windows系统,在使用torch.utils.data.Dataloader加载torchvision中的数据集时,将其中的形参num_workers设置为了大于0的数,然后出现以下错误。 原因 在 Windows 系统下,num_workers 参数在使用 PyTorch 的 t…

做58代运营到底有没有效果?

58同城代运营有没有效果,其实还是取决于你的产品、预算和想要达到的效果。比如,你是希望通过代运营做出品牌效应,还是希望提升销量?代运营能够带来的效果,主要是咨询和品牌推广,这两个都可以量化&#xff0…

解决Iterm2升级后遇到“Stashed changes“的问题

<<<<<<< Updated upstream ...... >>>>>>> Stashed changes冲突标记符的代码如题,最近有升级Item2…

终于搞懂lSTM的原理了

LSTM简介 一个目前很火的特殊的RNN结构, 有效解决了RNN的梯度爆炸和长序列记忆问题 优势 LSTM 通过引入遗忘门、输入门、输出门, 来实现对特殊特征的记忆和遗忘,来达到更好的对序列数据的处理和记忆效果。 原理图: 总结公式…

校园小情书微信小程序源码 | 社区小程序前后端开源 | 校园表白墙交友小程序

项目描述: 校园小情书微信小程序源码 | 社区小程序前后端开源 | 校园表白墙交友小程序 功能介绍: 表白墙 卖舍友 步数旅行 步数排行榜 情侣脸 漫画脸 个人主页 私信 站内消息 今日话题 评论点赞收藏 服务器环境要求:PHP7.0 MySQL5.7 效果…

Java设计模式-策略模式

策略模式1 概述2 结构3 案例实现4 优缺点5 使用场景6 JDK源码解析 策略模式 1 概述 先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 作为一个程序猿,开发需要选择一款开发工具&#x…

CircuitBreaker断路器(服务熔断,服务降级)

分布式系统面临的问题: 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。 1.服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务&#xff…

PyCharm无代码提示解决

PyCharm无代码提示解决方法 在使用PyCharm工具时,调用方法却无法进行提示,针对PyCharm无代码提示整理下解决方案 1、Python内置语法无智能提示 复现:我这里以urllib库读取网页内容为例,在通过urlopen()之后调用getur…

Tomcat Web 开发项目构建教程

1下载Tomcat安装包,下载链接:Apache Tomcat - Welcome!,我电脑环境为JDK8,所以下载Tomcat9.0 2、下载完压缩包后,解压到指定位置 3.在intelij中新建一个项目 4.选中创建的项目,双击shift,输入add frame...然…

C语言实现贪吃蛇

前言:今天给大家详细介绍一下小游戏贪吃蛇的代码。 目录 一 .贪吃蛇实现的功能 二.贪吃蛇游戏设计与分析 1.贪吃蛇以及贪吃蛇所需要维护的数据 (1)贪吃蛇蛇体 (2)数据维护 2.地图设计 (1&#x…

three.js 按键W前进、S退后、A左转、D右转运动

效果&#xff1a;W 键 前进&#xff1b;S 键后退&#xff1b;A 键左转&#xff1b;D 键右转&#xff1b;使用了 tween.js 动画库&#xff1b; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left">&…

如何利用AWS CloudFront 自定义设置SSL

Amazon CloudFront 提供三种选项&#xff0c;可以加速整个网站并从 CloudFront 的边缘站点通过安全的 HTTPS 方式交付内容。除能够安全地从边缘站点交付内容外&#xff0c;您还可以配置 CDN 来使用针对源提取的 HTTPS 连接&#xff0c;这样您的数据就会实现从源到最终用户的端到…

仿牛客网项目---项目总结

本篇文章是对整个项目的一个总结。下面这张图要好好理解。 整个项目都是构建在SpringBoot之上的&#xff0c;所以把它画到最底下&#xff0c;其它技术依托在springboot之上。但是springboot并不是技术的核心&#xff0c;而只是起到了一个辅助的作用&#xff0c;它的作用仅仅是降…

vue之性能优化

1.路由懒加载 所谓路由懒加载&#xff0c;其实就是路由通过import动态引入&#xff0c;而不是在文件最上面一个个全部引入&#xff0c;因为JS执行的时候会优先执行引入的文件&#xff0c;如果一次性引入过多&#xff0c;则会增加处理时长。 2.图片懒加载 图片在网页加载过程…

svg简单教程

推荐查看这个视频 一小时讲完SVG 简介 scalable 英 /ˈskeɪləbl/ 美 /ˈskeɪləbl/ adj. &#xff08;计算机&#xff09; 可扩展的&#xff1b;可改变大小的&#xff0c;可缩放的&#xff1b;可攀登的&#xff1b;可称量的&#xff1b;可去鳞的 vector 英 /ˈvektə/ 美…

搭建prometheus、grafana监控平台

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

php调用guzzlehttp库时出现Segmentation fault的解决方案

先说结论&#xff0c;这个问题的原因是因为php7.4与openssl3不兼容产生的&#xff0c;解决方案如下&#xff1a; 输入openssl version -a查看openssl版本&#xff0c;如果是3以上的版本与php7.4不兼容&#xff0c;7.4以下的没测试过&#xff0c;估计也有问题。我最终是安装上了…

安装配置Spark集群

安装Spark集群主要包括以下步骤&#xff1a; 1、下载Spark安装包&#xff0c;在各节点中安装部署spark集群 2、配置整合 3、启动并测试 下载Spark 可以从官方网站下载合适的版本。当前环境已经提供了安装包&#xff0c;存放在 /opt/software目录下。 在node1节点上安装Sp…

SpringCloudAlibaba 网关gateway整合sentinel日志默认路径修改

SpringCloudAlibaba 网关gateway整合sentinel 实现网关限流熔断 问题提出 今天运维突然告诉我 在服务器上内存满了 原因是nacos日志高达3G,然后将日志文件发给我看了一下之后才发现是gateway整合sentinel使用了默认日志地址导致日志生成地址直接存在与根路径下而且一下存在多…

第16章——西瓜书强化学习

在强化学习中&#xff0c;智能体通过与环境的交互来学习如何做出决策。在每个时间步&#xff0c;智能体观察当前的环境状态&#xff0c;并根据其策略选择一个动作。环境会对智能体的动作做出响应&#xff0c;并给出一个奖励信号&#xff08;reward&#xff09;&#xff0c;该信…