在當今快節奏的開發環境中,無縫、強大的 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。