借助 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:masters
 userarn: arn:aws:iam::XXXXXXXXXXXX:user/devashish
 username: 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。

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

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

相关文章

Linux 之二:CentOS7 的 IP 常用命令和配置及 xshell 基本使用方法

1. 进入虚拟机 点击右键---进入终端--输入 ip adrr 或 ifconfig 查看ip地址 下面输入命令 ifconfig(注意:不是 ipconfig ) 或 ip addr 来查看当前系统 IP 查看到IP 后,比如:上面是 192.168.184.137 1.1 IP 常用命令…

[VulnHub靶机渗透] Nullbyte

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收…

【MATLAB】MATLAB学习笔记

MATLAB入门 基础操作变量命名数据类型逻辑和流程控制循环结构分支结构 绘图基本操作二维平面绘图绘图参数三位立体绘图图像窗口的分割 本文参考B站视频:BV13D4y1Q7RS 由于我对于C语言很熟悉,很多语法是会参考C来学 基础操作 清屏%% 清空环境变量及命令 …

前端vite+vue3——可视化页面性能耗时指标(fmp、fp)

文章目录 ⭐前言💖vue3系列文章 ⭐可视化fmp、fp指标💖 MutationObserver 计算 dom的变化💖 使用条形图展示 fmp、fp时间 ⭐项目代码⭐结束 ⭐前言 大家好,我是yma16,本文分享关于 前端vitevue3——可视化页面性能耗时…

论文阅读:Diffusion Model-Based Image Editing: A Survey

Diffusion Model-Based Image Editing: A Survey 论文链接 GitHub仓库 摘要 这篇文章是一篇基于扩散模型(Diffusion Model)的图片编辑(image editing)方法综述。作者从多个方面对当前的方法进行分类和分析,包括学习…

图像处理与图像分析—图像的读入(C语言)

学习将会依据教材图像处理与图像分析基础(C/C)版内容展开 什么是数字图像处理 一副图像可以定义为一个二维函数 f(x,y) ,其中 x 和 y 是空间(平面)坐标,任意一对空间坐标 (x,y) 处的幅度值 &am…

了解 HTTPS 中间人攻击:保护你的网络安全

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

二叉树进阶--二叉搜索树的进一步优化--AVL树 Self-balancing binary search tree

前言: 在上一次的文章中,我们详细介绍了二叉树的进阶树型,即BS树(二叉搜索树),但在文章的结尾,二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表…

golang实现正向代理和反向代理

文章目录 正向代理反向代理区别与联系:总结代理服务器实现正向代理反向代理正向代理 正向代理是客户端代理,它位于客户端和目标服务器之间。它的作用是保护客户端的隐私和安全。 如我们现在想要访问谷歌,但是由于某些原因,无法直接访问到谷歌,我们可以通过连接一台代理服务…

Redis缓存过期策略

文章目录 一、面试题二、redis内存1. Redis的内存大小怎么查看?2. 设置redis内存3. redis内存的OOM 三、redis内存淘汰策略1. redis的过期键删除策略2. redis缓存淘汰策略 一、面试题 1. 生产上你们redis内存设置多少? 2. 如何配置、修改redis内存大小…

YOLOV5 初体验:简单猫和老鼠数据集模型训练

1、前言 前两天,通过OpenCV 对猫和老鼠视频的抽取,提取了48张图片。这里不再介绍,可以参考之前的文章:利用OpenCV 抽取视频的图片,并制作目标检测数据集-CSDN博客 数据的目录如下: 项目的下载见文末 2、制…

基于Java的在线课程教学系统(Vue.js+SpringBoot)

目录 一、摘要1.1 系统介绍1.2 项目录屏 二、研究内容2.1 课程类型管理模块2.2 课程管理模块2.3 课时管理模块2.4 课程交互模块2.5 系统基础模块 三、系统设计3.1 用例设计3.2 数据库设计 四、系统展示4.1 管理后台4.2 用户网页 五、样例代码5.1 新增课程类型5.2 网站登录5.3 课…

第十一篇 - 应用于市场营销视频场景中的人工智能和机器学习技术 – Video --- 我为什么要翻译介绍美国人工智能科技巨头IAB公司(1)

IAB平台,使命和功能 IAB成立于1996年,总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司,互动广告局(IAB- the Interactive Advertising Bureau)自1996年成立以来,先后为700多家媒体…

为什么选择 Flink 做实时处理

优质博文:IT-BLOG-CN 为什么选择 Flink 【1】流数据更真实地反映了我们的生活方式(实时聊天); 【2】传统的数据架构是基于有限数据集的(Spark 是基于微批次数据处理); 【3】我们的目标&#xf…

ROS——ROS环境搭建

Ubuntu 安装完毕后,就可以安装 ROS 操作系统了,大致步骤如下: 配置ubuntu的软件和更新; 设置安装源; 设置key; 安装; 配置环境变量。 1.配置ubuntu的软件和更新 配置ubuntu的软件和更新,…

系统编程--makefile项目管理

这里写目录标题 介绍语法结构总览基础规则简介最简单的makefile对于基础规则的理解和应用总结 makefile时尽量使用更独立的命令,减少文件之间的耦合度需求以及解决总结 补充(关于makefile中脚本命令的编写顺序) 一级目录二级目录二级目录二级…

数据科学中的Python:NumPy和Pandas入门指南【第121篇—NumPy和Pandas】

数据科学中的Python:NumPy和Pandas入门指南 数据科学是当今数字时代中的一个重要领域,而Python是数据科学家们最喜爱的编程语言之一。在这篇博客中,我们将介绍Python中两个强大的库——NumPy和Pandas,它们在数据处理和分析中发挥…

java算法第十八天 | ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和

110.平衡二叉树 leetcode链接 思路: 使用后序遍历分别求左右子树的高度,若高度只差大于一,则返回-1,否则返回当前节点的最大高度。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* Tree…

爬虫(五)

1. 前端JS相关 三元运算 v1 条件 ? 值A : 值B; # 如果条件成立v1值A,不成立v1等于值Bres 1 1 ? 99 : 88 # res99特殊的逻辑运算 v1 11 || 22 # Ture v2 9 || 14 # 9 v3 0 || 15 # 15 v3 0 || 15 || "zhangfei" # 15赋值和…

x86 Ubuntu上编译eudev给龙芯loongarch64架构主机使用

1、下载eudev库eudev-master.zip,链接:eudev库官方地址 2、下载龙芯的交叉编译工具:loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.2.tar.xz,链接:龙芯交叉编译官方地址 3、交叉编译器环境搭建 (1)、…