在当今快节奏的开发环境中,无缝、强大的 CI CD 管道对于交付高质量软件至关重要。 在本文中,我们将引导您完成使用 Bitbucket Pipeline、Argocd Gitops 和 AWS EKS 设置部署的步骤,所有这些都是通过 Terraform 的强大功能进行编排的。 在第 1 部分中,我们将介绍使用 Terraform 创建和部署 CI CD 管道的前三个步骤。
我们有两个环境,一个是私有节点 + 2 nat,另一个是公共节点 + 1 nat。
为了演示,以下内容将使用 AWS Ubuntu 2204.3 个 LTS EC2 实例(已连接)administratoraccess
要克隆存储库,请执行以下操作:
然后将目录更改为:
eks-tf-bitbucket-pipeline-argocd-gitops/eks tf/eks infra-tf (public node) -prod或者你可以使用 dev 版本,它完全相同,只是 dev 版本有 2 个 nat,而 prod 版本只有 1 个 nat。
现在,在应用此功能创建 AWS EKS 基础架构之前,您需要执行以下操作。
在您的 PC 上安装以下工具(根据操作系统选择)。
aws cli:
terraform cli:
kubectl cli:https:
如果要在自己的计算机上运行脚本,请配置 AWS 访问密钥。
立即运行$ terraform fmt
用于格式化 Terraform 的命令
接下来,您可以在以下位置执行此操作:vars.tf
在文件中编辑 EKS 部署的环境名称、K8S 版本和区域。
它也可以使用ap-southeast-1
area,并通过default
保存文件。
别忘了改变eks-node-groups-policy.tf
文件desired_size
跟instance_types
您应为 EKS 集群节点选择中型或更好的大型实例,否则在安装 Argocd 或其他应用程序时会遇到问题,因为所有这些 EC2 实例类型对 Pod 的数量都有限制,可在此处找到
立即运行$ terraform init
依赖:
之后,您可以根据自己的喜好运行它$ terraform plan
或$ terraform apply
输入值yes
并等待它完成,这可能需要长达 10-15 分钟的时间。
TF 将创建以下 AWS 服务:
VPC 子网。
子网路由表。
IAM 角色和策略。
Internet 网关。
NAT网关。
弹性 ipeks 集群和节点组。
当 tf 脚本成功完成时,你将在最后看到类似于以下内容的屏幕:
您还可以在 AWS 控制台中查看是否已创建 EKS 集群和所有资源。
现在我们需要授予 kubectl 对 eks 集群的访问权限,为此我们需要运行以下命令:
$ aws eks update-kubeconfig - region region-code - name my-cluster您需要根据您的环境进行更新
region-code
跟my-cluster
名称,例如:
然后关闭此警告:
为此,您需要使用以下命令将 IAM 用户名和 arn 添加到 EKS configmap:
$ kubectl edit configmap aws-auth -n kube-system它将打开一个新窗口,如下所示:
之后,在 maproles 段落后添加以下内容:
mapusers: |groups: —system:masters userarn: arn:aws:iam::xxxxxxxxxxxx:user/devashish username: devashish不要忘记更改您尝试访问 EKS 控制台的 IAM 用户名。
如果使用 root 权限创建和访问 EKS 集群,则必须使用 root 的 userarn 和用户名。
然后使用 WQ 保存文件并刷新 EKS 集群页面 - 现在 IAM 用户警告应该消失了。
此外,您还可以在 eks 集群的计算选项卡中看到之前由于 RBAC 权限问题而未出现的节点。
您还可以运行kubectl
命令检查 EKS 集群是否连接到 kubectl CLI 工具。
现在,EKS 集群已准备就绪并正在运行,让我们继续下一步。
为此,我们将使用 repo **addons 自述文件md,只需按照文件中的步骤操作即可。
安装 argocd
您可以使用以下命令检查正在运行的 argocd pod:
$ kubectl get po -n argocd现在 Argocd 已经安装完毕,让我们继续下一步。
使用 ACM 为 NLB 部署 ingress-nginx
在继续下一步之前,我们需要以下内容:
VPC CIDR,也称为 proxy-real-ip-cidr
AWS ACM 证书 ARN ID,即 ARN:AWS:ACM
因此,如果没有,请创建它们。
首先,您需要使用 wget **ingress-nginx for nlb 控制器脚本。
$ wget然后使用任何文本编辑器将其打开。
$ nano deploy.yaml然后根据配置更改这些值。
根据您的信息更改值后,请确保在创建 ACM 证书时使用通配符,然后运行以下命令:
$ kubectl apply -f deploy.yaml部署 Argocd Pod Ingress 服务。
先用它$ nano ingress.yaml
创建一个 yaml 文件并粘贴 eks 插件自述文件MD 文件。 别忘了改变host
价值。
然后运行:
$ kubectl apply -f ingress.yaml在 EKS 上部署 argocd 服务入口文件。 您可以执行以下命令,查看服务是否部署成功。
$ kubectl get ingress -n argocd地址值需要一些时间才能显示,因此请耐心等待。 然后创建一个记录,将 argocd 子域指向该 nlb。
现在,您可以访问**:
从 CLI 恢复密码并使用密码登录 Argocd,用户名应为 admin。
使用以下命令检索密码:
$ kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="" | base64 -d; echo echo echo.| base64 -d; echo之后,您就可以成功登录了。
现在 argocd 已经启动并运行,让我们继续下一步。
为此,我们需要创建一个 Bitbucket 和 AWS ECR 存储库,其中 BitBucket 管道会将应用程序部署到 ECR 存储库。
转到您的 Bitbucket ID 并创建一个新的存储库:
创建存储库后,我们需要 3 个文件:
main.js
dockerfile
bitbucket-pipeline.yaml
在bitbucket pipeline + dockerfile
示例文件位于文件夹下的存储库中。
因此,让我们根据您的应用程序创建所有 3 个文件。 我会在主要中做到这一点JS 文件中使用了示例 Node JS 应用程序。
请记住在创建 Bitbucket 管道 YAML 文件之前创建 AWS ECR 存储库,因为需要它才能运行。 例如,以下私有存储库是在 AWS ECR 中创建的。
现在,我们需要将 ECR 存储库中的一些值复制并粘贴到 Bitbucket Pipeline 中的 YAML 文件中。
请确保根据需要更新分支名称和 -profile 标签,否则管道将无法访问 IAM 访问密钥。
现在,我们需要创建一个具有 ECR 存储库访问权限的 AWS 访问密钥对,并将其作为以下变量添加到 Bitbucket 管道中。
ecr_access_key
ecr_secret_key
ecr_region
此外,为了向 Bitbucket Pipeline 添加存储库变量,我们首先需要启用它。
然后,对于 ECR 存储库访问,我们需要创建一个有权访问 amazonec2containerregistrypoweruser 的 IAM 用户。
然后创建一个 AWS 访问密钥对并将其添加到 Bitbucket Pipelines 存储库变量,如下所示:
之后,存储库中应包含以下文件:
请确保写入正确的文件名,否则可能无法正常工作,并且管道将无法执行。
完成所有步骤后,管道将自动运行。
几分钟后,管道应成功运行,容器映像将部署到 ECR 存储库。
我们可以看到标记为 1 的图片已成功上传到 ECR,因为我们使用了它作为图像的标记,因此更容易通过相应的 ECR 存储库找到管道编号。
现在,部署到 ECR 存储库的 Bitbucket 管道已启动并运行,可以执行下一步操作。
在第 2 部分中,我们将更详细地介绍最后两个重要步骤,并向您展示如何使用 Terraform 在 Bitbucket Pipeline 上实现端到端 Argocd Gitops。