Argo CD使用指南:如何構建一套完整的GitOps?
阿新 • • 發佈:2020-12-25
隨著Kubernetes繼續將自己確立為容器編排的行業標準,為你的應用和工具找到使用宣告式模型的有效方法是成功的關鍵。在這篇文章中,我們將在AWS中建立一個K3s Kubernetes叢集,然後使用Argo CD和Vault實現安全的GitOps。你可以在以下兩個連結中分別檢視基礎架構以及Kubernetes umbrella應用程式:
https://github.com/atoy3731/aws-k8s-terraform
https://github.com/atoy3731/k8s-tools-app
以下是我們將會使用到的元件:
- AWS——這是我們將在底層基礎設施使用的雲提供商。它將管理我們的虛擬機器以及Kubernetes工作所需的網路,並允許Ingress從外界進入叢集。
- K3s——由Rancher開發的輕量級Kubernetes發行版。它對許多alpha功能和雲外掛進行了清理,同時也使用關係型資料庫(本例中是RDS)代替etcd進行後端儲存。
- Rancher——API驅動的UI,可以輕鬆管理你的Kubernetes叢集
- Vault——Hashicorp的金鑰管理實現。我將使用Banzai Cloud Vault的bank-- vaults實現,它可以通過使用Admission Webhook將金鑰直接注入pod中。這大大減輕了你在Git倉庫中儲存金鑰的需求。
- Argo CD——這是一個GitOps工具,可以讓你在Git中維護Kubernetes資源的狀態。Argo CD會自動將你的Kubernetes資源與Git倉庫中的資源進行同步,同時也確保叢集內對manifest的手動更改會自動還原。這保證了你的宣告式部署模式。
- Cert Manager或LetsEncrypt——提供了一種為Kubernetes Ingress自動生成和更新證書的方法。
讓我們先從AWS基礎架構開始。
## 前期準備
你需要在你的系統中安裝以下CLI:
- Terraform
- Kubectl
- AWS
同時,你還需要AWS管理員訪問許可權以及一個訪問金鑰。如果你沒有,你可以使用信用卡建立一個賬戶。
最後,你需要一個可以管理/更新的託管域名,以指向你的基於Kubernetes彈性負載均衡器(ELB)。如果你還沒有,建議你在NameCheap上開一個賬戶,然後購買一個.dev域名。它價格便宜,而且效果很好。
## AWS基礎架構
對於我們的AWS基礎架構,我們將使用Terraform與S3支援來持久化狀態。這為我們提供了一種方法來宣告性地定義我們的基礎架構,並在我們需要的時候反覆進行更改。在基礎設施倉庫中,你會看到一個k3s/example.tfvars檔案。我們需要根據我們特定的環境/使用情況更新這個檔案,設定以下值:
- **db_username** — 將應用於Kubernetes後端儲存的RDS例項的管理員使用者名稱
- **db_password** — RDS使用者的管理員密碼。這通常應該在你的terraform apply命令內聯過程中傳遞此引數,但為了簡單起見,我們將在檔案中設定它。
- **public_ssh_key** — 你的公共SSH金鑰,當你需要SSH到Kubernetes EC2s時,你將使用它。
- **keypair_name** — 要應用於你的public_ssh_key的金鑰對名稱。
- **key_s3_bucket_name** — 生成的bucket將在叢集成功建立時儲存你的kubeconfig檔案。
如果你想修改叢集大小或設定特定的CIDRs(無類域間路由),可以設定下面的一些可選欄位,但預設情況下,你會得到一個6節點(3個伺服器,3個代理)的K3s叢集。
同時,你將需要建立S3 bucket來儲存你的Terraform狀態並且在**k3s/backends/s3.tfvars**和**k3s/main.tf**檔案中更改bucket欄位來與其匹配。
一旦我們更新了所有的欄位,並建立了S3狀態bucket,我們就開始應用Terraform吧。首先,確保你在AWS賬戶中有一個管理IAM使用者並且你已經在系統上正確設定了環境變數或AWS憑證檔案,以便能夠與AWS API對接,然後執行以下命令:
```
cd k3s/
terraform init -backend-config=backends/s3.tfvars
terraform apply -var-file=example.tfvars
```
一旦你執行以上命令,Terraform會在apply成功後輸出預期的AWS狀態。如果一切看起來都符合預期,請輸入yes。這時候由於RDS叢集的原因,需要5—10分鐘的時間來配置AWS資源。
## 驗證你的Kubernetes叢集
Terraform成功應用之後(再多等幾分鐘的時間確保K3s已經部署完畢),你需要使用以下命令從S3 bucket中抓取kubeconfig檔案(替換你在`example.tfvars`中輸入的bucket名稱):
```
aws s3 cp s3://YOUR_BUCKET_NAME/k3s.yaml ~/.kube/config
```
這應該成功完成,讓你現在能夠與你的叢集通訊。讓我們檢查一下我們的節點狀態,在繼續之前,確保它們都處於就緒狀態。
```
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-10-0-1-208.ec2.internal R