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

在当今快节奏的开发环境中,实现无缝、稳健的 CI/CD 流水线对于交付高质量软件至关重要。在本文中,我们将向您介绍使用 Bitbucket Pipeline、ArgoCD GitOps 和 AWS EKS 设置部署的步骤,所有步骤都将利用 Terraform 的强大功能进行编排。在Part 1里,将主要介绍通过 Terraform 创建和部署 CI/CD 流水线的前三步。

 

使用 Terraform 创建 AWS EKS Infra

我们有两种环境,一种是 Private Node + 2 NAT,另一种是 Public Node + 1 NAT。

 

image.png

 

为了演示,以下将使用一个 AWS Ubuntu 22.04.3 LTS EC2 实例,并附加 AdministratorAccess ,从而实现 Linux 电脑上克隆 repo:

 

image.png

 

然后将目录更改为:

 

EKS-TF-Bitbucket-Pipeline-ArgoCD-GitOps/EKS TF/EKS Infra-TF (Public Node) - Prod

 

或者您也可以使用 Dev 版本,这两个版本完全相同,只是 Dev 版本有 2 个 NAT,而 Prod 版本只有 1 个 NAT。

 

现在,在将此应用于创建 AWS EKS Infra 之前,您需要做以下事情

 

  1. 在个人电脑上安装以下工具(根据操作系统进行选择)
  • AWS CLI: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
  • Terraform CLI: https://developer.hashicorp.com/terraform/install
  • Kubectl CLI:https: //kubernetes.io/docs/tasks/tools/

 

  1. 如果要在自己的电脑上运行脚本,请配置 AWS 访问密钥

 

现在运行 $ terraform fmt 命令来格式化 terraform 代码。

 

image.png

 

接下来,您可以在 vars.tf 文件中编辑环境名称、K8s 版本和 EKS 部署的地区。

 

image.png

 

也可以使用 ap-southeast-1 区域,并通过更改 default 保存文件。

 

同时不要忘记更改 eks-node-groups-policy.tf 文件中的 desired_sizeinstance_types

 

image.png

 

您应该为 Eks 集群节点选择一个中型或更好的大型实例,否则在安装 ArgoCD 或其他应用程序时会遇到问题,因为所有这些 EC2 实例类型都有 pod 数量限制,具体可以在这里查看:https://github.com/awslabs/amazon-eks-ami/blob/master/files/eni-max-pods.txt

 

现在运行 $ terraform init 下载依赖项:

 

image.png

 

之后,您可以根据自己的喜好运行 $ terraform plan$ terraform apply

 

image.png

 

输入值 yes,然后等待完成,最多需要 10-15 分钟。

 

tf 代码将创建以下 AWS 服务:

 

  • VPC
  • 子网
  • 子网路由表
  • IAM 角色和策略
  • 互联网网关
  • NAT 网关
  • 弹性 IP
  • EKS 集群和节点组

 

当成功完成 tf 脚本后,您将在最后看到类似下面的屏幕:

 

image.png

 

您还可以在 AWS 控制台中查看是否创建了 EKS 集群和所有资源。

 

image.png

 

现在,我们需要授予 kubectl 对 EKS 集群的访问权限,为此需要运行以下命令:

 

$ aws eks update-kubeconfig - region region-code - name my-cluster

 

您需要根据您的环境更新 region-codemy-cluster 名称,例如:

 

image.png

 

然后消除这个警告:

 

image.png

 

为此,您需要使用以下命令将 IAM 用户名和 arn 添加到 EKS configmap 中:

 

$ kubectl edit configmap aws-auth -n kube-system

 

它将打开一个新窗口,如下所示:

 

image.png

 

之后,在 mapRoles 段落后添加以下代码:

 

mapUsers: |— groups:— system:mastersuserarn: arn:aws:iam::XXXXXXXXXXXX:user/devashishusername: devashish

 

不要忘记更改您试图访问 EKS 控制台的 IAM 用户名。

 

image.png

 

如果使用了 root 权限来创建和访问 EKS 集群,则必须使用 root 的userarn 和 username。

 

然后用 wq 保存文件,再刷新 EKS 集群页面——现在 IAM 用户警告应该已经消失了。

 

此外,您还可以在 EKS 集群的 Compute tab 中看到之前由于 RBAC 权限问题而没有出现的 Nodes。

 

image.png

 

您还可以运行 kubectl 命令来检查 EKS 集群是否与 Kubectl CLI 工具连接。

 

在这里插入图片描述

 

这样 EKS 集群就已经准备就绪并运行正常了,现在让我们进入下一步。

 

在 EKS 集群上部署 ArgoCD 及其依赖项

为此,我们将使用 repo 网址:https://github.com/dcgmechanics/EKS-TF-Bitbucket-Pipeline-ArgoCD-GitOps/blob/main/EKS%20Addons/Readme.md ,只需按照文件中的步骤操作即可。

 

  1. 安装 ArgoCD

 

image.png

 

您可以使用以下命令检查正在运行的 ArgoCD pods:

 

$ kubectl get po -n argocd

 

image.png

 

既然 ArgoCD 已经安装完成,现在让我们进入下一步。

 

  1. 使用 ACM 为 NLB 部署 Ingress-Nginx

 

在继续下一步之前,我们需要以下东西:

 

  • VPC CIDR,即 proxy-real-ip-cidr
  • AWS ACM 证书 arn id,即 arn:aws:acm

 

因此,如果没有,请创建它们。

 

首先,您需要使用 wget 下载 Ingress-Nginx for NLB 控制器脚本。

 

$ wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/aws/nlb-with-tls-termination/deploy.yaml

 

image.png

 

然后使用任何文本编辑器打开它。

 

$ nano deploy.yaml

 

再根据配置更改这些值。

 

image.png

 

根据您的信息更改值后,请确保在创建 ACM 证书时使用通配符,然后运行以下命令:

 

$ kubectl apply -f deploy.yaml

 

  1. 部署 ArgoCD pod Ingress服务

 

首先使用 $ nano ingress.yaml 创建一个 YAML 文件,并粘贴 EKS Addons Readme.md 文件中的内容。不要忘记更改 host 值。

 

image.png

 

然后运行:

 

$ kubectl apply -f ingress.yaml

 

在 EKS 上部署 argocd 服务 ingress 文件。您可以使用以下命令查看服务是否部署成功。

 

$ kubectl get ingress -n argocd

 

image.png

 

ADDRESS 值需要一些时间才能显示,所以请耐心等待。然后创建一个 A Record,将 ArgoCD 子域名指向该 NLB。

 

image.png

 

现在,您可以访问网站:https://argocd.showyrskills.in。

 

image.png

 

从 CLI 恢复密码,然后使用密码登录 ArgoCD,用户名应为 admin。

 

使用以下命令找回密码:

 

$ kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo echo echo.| base64 -d; echo

 

之后就可以成功登录了。

 

image.png

 

既然 ArgoCD 已经正常运行,现在让我们进入下一步。

 

设置 Bitbucket Pipeline并部署到 ECR Repo

为此,我们需要创建一个 Bitbucket 和 AWS ECR Repo,其中 Bitbucket Pipeline 将把应用程序部署到 ECR Repo 中。

 

转到您的 Bitbucket ID 并创建一个新的 repo:

 

image.png

 

创建 repo 后,我们需要 3 个文件:

 

  • main.js
  • Dockerfile
  • bitbucket-pipeline.yaml

 

Bitbucket Pipeline + Dockerfile 文件夹下的repo 中提供了示例文件。

 

因此,让我们根据您的应用程序创建所有 3 个文件。我将在 main.js 文件中使用示例 node js 应用程序。

 

请记住,在创建 Bitbucket Pipeline YAML 文件之前,先创建 AWS ECR Repos,因为运行中需要它。例如,在 AWS ECR 中创建了以下私有 repo。

 

image.png

 

现在,我们需要将 ECR 仓库中的一些值复制并粘贴到 Bitbucket Pipeline 的 YAML 文件中。

 

image.png

 

确保根据需要更新分支名称和 -profile 标签,否则 Pipeline 将无法访问 iam 访问密钥。

 

现在,我们需要创建一个具有 ECR 仓库访问权限的 AWS 访问密钥对,并作为以下变量添加到 Bitbucket Pipeline中。

 

  • ECR_ACCESS_KEY
  • ECR_SECRET_KEY
  • ECR_REGION

 

此外,为了在 Bitbucket Pipeline中添加版本库变量,我们首先需要启用它。

 

image.png

 

然后,对于 ECR Repo 访问,我们需要创建一个具有 AmazonEC2ContainerRegistryPowerUser 访问权限的 IAM 用户。

 

image.png

 

然后创建 AWS Access Key Pair,并将其添加到 Bitbucket Pipelines 版本库变量中,如下所示:

 

image.png

 

之后,您的 repo 中就应该有以下文件了:

 

image.png

 

确保写入正确的文件名,否则可能无法工作,流水线也不会执行。

 

image.png

 

image.png

 

完成所有步骤后,流水线将自动运行。

 

image.png

 

几分钟后,流水线应该就会运行成功,并将容器镜像部署到 ECR Repo 上。

 

image.png

 

我们可以看到,标记为 1 的镜像已成功上传到 ECR,因为我们使用了 ${BITBUCKET_BUILD_NUMBER} 作为镜像的标记,所以可以更容易地通过相应的 ECR Repo 找到流水线编号。

 

image.png

 

既然部署到 ECR Repo 的 Bitbucket Pipeline 已经正常运行,也就说明可以准备进行下一步了。

 

在 Part 2 中,我们将会更详细地囊括后两个重要步骤,并指导您如何利用Terraform在 Bitbucket Pipeline 上实现端到端的 ArgoCD GitOps。

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

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

相关文章

01_Maven

文章目录 Maven安装MavenMaven的工作流程配置MavenMaven的使用module和project的关系如何用Maven导包 如何用Maven进行项目构建指令介绍clean指令compile指令package指令install指令 Maven的依赖管理如何导包scope作用域依赖传递依赖冲突 使用Maven开发项目Junit如何使用Junit …

力扣刷题Day11--21. 合并两个有序链表(js)

目录 1,题目 2,代码 2.1迭代思想 2.2递归思想 3,学习与总结 3.1js中的链表类 3.2递归思想 3.3提醒自己 1,题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 2&am…

YOLOv9独家原创改进|加入RT-DETR中的HGBlock!

专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,主力高效涨点!!! 一、改进点介绍 HGBlock是RT-DETR中使用的特征提取模块。 二、HGBlock模块详解 2.1 模块简介 HGBlock的主要思想: 一个并联的卷积模块与…

java上传本地文件到服务器共享

在Windows系统中,将本地文件夹中的某个文件上传到另一台Windows服务器电脑上,前提:两台电脑网络互通,要接收文件的Windows服务器文件夹开启了共享,可以被本机用如下方式进行写入和读取: 如何配置服务器共享请自行百度查找。 所需要的maven依赖如下: <dependency>…

AI辅助研发的崭新前景:技术进展、应用案例与挑战机遇

目录 前言1. 技术进展&#xff1a;深度学习、强化学习与生成模型的崭新应用1.1 深度学习的崭新应用1.2 强化学习的优化应用1.3 生成模型在创意设计中的应用 2. 行业应用案例&#xff1a;医药、汽车、电子等领域的AI助力2.1 医药领域的AI辅助研发2.2 汽车设计中的AI助力2.3 电子…

Qwen-Agent自定义Tool

qwen-agent项目部署 1、下载qwen-agent https://github.com/QwenLM/Qwen-Agent2、安装依赖环境 pip3 install -r requirements.txt自定义Tool cd qwen_agent/tools参考其他的工具&#xff0c;我这里创建了一个查询手机号归属地的工具get_mobile_address.py&#xff1a; im…

猜猜:哪句古诗与古代女子妆容有关?2024.3.8蚂蚁庄园今日答案:金盆水里拨红泥

蚂蚁庄园是一款爱心公益游戏&#xff0c;用户可以通过喂养小鸡&#xff0c;产生鸡蛋&#xff0c;并通过捐赠鸡蛋参与公益项目。用户每日完成答题就可以领取鸡饲料&#xff0c;使用鸡饲料喂鸡之后&#xff0c;会可以获得鸡蛋&#xff0c;可以通过鸡蛋来进行爱心捐赠。其中&#…

Docker部署ruoyi前后端分离项目

目录 一. 介绍前后端项目 二. 搭建局域网 2.1 创建网络 2.2 注意点 三. Redis 3.1 安装 3.2 配置redis.conf文件 3.3 测试 四. 安装MySQL 4.1 安装 4.2 配置my2.cnf文件 4.3 充许远程连接 五. 若依部署后端服务 5.1 数据导入 5.2 使用Dockerfile自定义镜像 5.3 运行…

Elasticsearch:从 ES|QL 到 Python 数据帧

在我之前的文章 “Elasticsearch&#xff1a;ES|QL 查询展示”&#xff0c;我展示了如何在 Kibana 中使用 ES|QL 对索引来进行查询及统计。在很多的情况下&#xff0c;我们需要在客户端中来对数据进行查询&#xff0c;那么我们该怎么办呢&#xff1f;我们需要使用到 Elasticsea…

能源大数据采集,为您提供专业数据采集服务

随着经济的不断发展&#xff0c;能源产业也逐渐成为国民经济的支柱产业之一。而对于能源行业来说&#xff0c;数据采集是一项至关重要的工作。以往&#xff0c;能源企业采集数据主要依靠人工收集、整理&#xff0c;但是这种方式不仅效率低下&#xff0c;而且容易出现数据不准确…

ai智能写作软件推荐,ai一键生成作文

很多小伙伴们都觉得写作是一件让人头痛的事情。因为不仅要让自己的文字流畅有条理&#xff0c;还需要通过一些修辞手法来使文章更加生动有趣。市场上不断涌现出各种各样的AI人工智能原创文章写作平台&#xff0c;哪些才好用&#xff0c;才是适合自己的呢&#xff1f; 爱制作ai …

如何在“Ubuntu 服务器上使用MariaDB配置Galera集群”?

一、 安装好三个MariaDB数据库 如何使用“Ubuntu 20.04桌面版&#xff0c;安装MariaDB数据库“&#xff1f;win10系统&#xff1f;-CSDN博客 二、第一个node1&#xff0c;修改 sudo nano /etc/mysql/conf.d/galera.cnf [mysqld] binlog_formatROW default-storage-enginei…

功能安全概念梳理二

什么是SEooC&#xff1f;SEooC和element有什么不一样&#xff1f; 参考链接&#xff1a;车规级 | ISO26262中对独立安全要素&#xff08;SEooC&#xff09;的开发要求 汽车功能安全(ISO 26262)系列: 到底什么是SEooC开发 安全措施(Safety measure)和安全机制(Safety mechanis…

【Leetcoode】2917. 找出数组中的 K-or 值

文章目录 题目思路代码结果 题目 题目链接 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 nums 中的 K-or 是一个满足以下条件的非负整数&#xff1a; 只有在 nums 中&#xff0c;至少存在 k 个元素的第 i 位值为 1 &#xff0c;那么 K-or 中的第 i 位的值才是 1 。…

安卓手机投屏到win10系统电脑,在电脑上可操作手机

使用scrcpy工具实现 scrcpy 就是通过 adb 调试的方式来将手机屏幕投到电脑上&#xff0c;并可以通过电脑控制您的 Android 设备。它可以通过 USB 连接&#xff0c;也可以通过 Wifi 连接&#xff08;类似于隔空投屏&#xff09;&#xff0c;而且不需要任何 root 权限&#xff0…

openGauss基于存储复制的资源池化安装部署流程

第一步&#xff1a;在主存储上创建资源池化需要的lun&#xff0c;以及远程同步复制xlog卷对应的lun&#xff0c;并且所有lun全部映射到业务计算节点上 1. 登录主集群DeviceManager&#xff0c;选择服务->LUN组->创建 来创建主集群LUN组&#xff1b; 2.登录主集群Device…

会议活动如何高效地执行?邀请媒体到场报道的注意点

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 会议活动高效执行要点与媒体邀请注意事项 一、会议活动高效执行要点&#xff1a; 明确目标&#xff1a;确立清晰、具体的会议目的和预期成果。 详细规划&#xff1a;制定详尽的活动流程…

波奇学Linux:信号的发送和保存

信号的发送的对象是pcb task_struct{ int signal; //0000 0000 .... 0001 进程pcb中存在int型的signal来保存信号&#xff0c;用位图的方式&#xff0c;比特位的0&#xff0c;1表示是否收到信号 比特位位置表示信号的编号。 发信号的本质就是修改task_struct的信号位图对应的…

“词苑千载,群芳竞秀,盛开一枝女儿花”说的是哪位历史人物?2024年3月8日蚂蚁庄园今日答案:李清照

蚂蚁庄园是一款爱心公益游戏&#xff0c;用户可以通过喂养小鸡&#xff0c;产生鸡蛋&#xff0c;并通过捐赠鸡蛋参与公益项目。用户每日完成答题就可以领取鸡饲料&#xff0c;使用鸡饲料喂鸡之后&#xff0c;会可以获得鸡蛋&#xff0c;可以通过鸡蛋来进行爱心捐赠。其中&#…

计算机大数据毕业设计-基于Flask的旅游推荐可视化系统的设计与实现

基于Flask的旅游推荐可视化系统的设计与实现 编程语言&#xff1a;Python3.10 涉及技术&#xff1a;FlaskMySQL8.0Echarts 开发工具&#xff1a;PyCharm 摘要&#xff1a;以Pycharm为旅游推荐系统开发工具&#xff0c;采用B/S结构&#xff0c;使用Python语言开发旅游景点推…