前一天我們在 K8s Cluster 建置好了 ArgoCD 服務,今天就來實際操作看看,透過 ArgoCD 建立 Application 的 Stage 以及 Production 環境。
因為 ArgoCD 是以 GitOps 的方式運作,一開始需要先將 Manifest Repo 連線到 ArgoCD ,我們就來實際操作看看。
使用 Day21 介紹的方式登入到 ArgoCD
點擊左邊齒輪,接著點選 Repositories
CONNECT REPO USING HTTPS
Clone-> Clone with HTTPS
複製地址Repository URL
貼上位址,完成後點擊CONNECT
可以看到成功連線到 Manifest Repository。
因為我們設置的是 Public Repository ,不需要提供帳號密碼就能連線,若你是使用 Privare 的 Repo,就需要建立金鑰才能連線。
接著試著透過 GUI ,建立 Application 的 Stage 環境。
CREATE APPLICATION
GENERAL
輸入以下資訊Application Name
Project
SYNC POLICY
PRUNE RESOURCES
打勾SELF HEAL
打勾AUTO-CREATE NAMESPACE
打勾這裡的 Sync Policy 為同步方式,Automatic 代表當 Git Repo 更新 ArgoCD 也會自動同步。
SOURCE
以及 DESTINATION
輸入以下資訊Repository URL
Revision
Path
Cluster URL
Namespace
Source 為你要使用的資源位置,這裡的設置代表會使用 Manifest Repo 在 HEAD 上的根目錄檔案。
Destination 為資源要部屬的位置,這裡選擇 default.svc ( 執行 ArgoCD 的 K8s Cluster ),並且會部屬在 stage 的命名空間。
還記得之前的章節我們在 Helm Chart 裡面建立了多個 values 檔案,在 ArgoCD 中,就可以根據需要的環境帶入不同配置的 values 檔案。
Helm -> VALUES FILES
選擇 values.stage.yaml
檔案CREATE
,主畫面就可以看到新的 Application等到 Status 顯示 Synced ,代表 ArgoCD 已經建置好服務了,我們可以到 Kubernetes 實際驗證一下。
進入 Cloud Shell 網站
點擊倒三角形->點選專案的 PROJECT_ID
,開啟專案 Terminal
kubectl get all -n stage
(輸出結果)
NAME READY STATUS RESTARTS AGE
pod/webapp-stage-5bcbc8d798-4nf9j 1/1 Running 0 9m36s
pod/webapp-stage-5bcbc8d798-4nvkr 1/1 Running 0 9m36s
pod/webapp-stage-5bcbc8d798-9nhdb 1/1 Running 0 9m36s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/webapp-stage LoadBalancer 10.3.254.204 34.150.28.184 80:31918/TCP 9m39s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/webapp-stage 3/3 3 3 9m40s
NAME DESIRED CURRENT READY AGE
replicaset.apps/webapp-stage-5bcbc8d798 3 3 3 9m41s
可以看到元件都已建置完成,使用 Service 的 EXTERNAL-IP 連線到服務確認有無正常執行。
http://<SERVICE EXTERNAL-IP>
可以看到服務正常運行。
ArgoCD 的 Application 也是一種 Kubernetes 元件,所以可以建置相關的 yaml 檔案,並用 kubectl apply
的方式來建立,就來試著用 CLI 的方式建立 Application 的 Production 環境。
webapp-prod.yaml
檔案mkdir ~/argocd && cd ~/argocd
touch webapp-prod.yaml
webapp-prod.yaml
檔案並輸入以下內容,需要將 repoURL 改成你的 Manifest RepoapiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: webapp-prod
spec:
destination:
name: ''
namespace: prod
server: 'https://kubernetes.default.svc'
source:
path: .
repoURL: '<YOUR Manifest Repo>'
targetRevision: HEAD
helm:
valueFiles:
- values.production.yaml
project: default
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
kubectl apply -f <file>
建立 ArgoCD Applicationkubectl apply -f webapp-prod.yaml
kubectl get application -n argocd
(輸出結果)
NAME SYNC STATUS HEALTH STATUS
webapp-prod Synced Progressing
webapp-stage Synced Healthy
會看到多了一個 webapp-prod 的 App ,在 ArgoCD 的 GUI 也可以看到。
kubectl get all -n prod
(輸出結果)
NAME READY STATUS RESTARTS AGE
pod/webapp-prod-6448d5b84-5fsfs 1/1 Running 0 2m9s
pod/webapp-prod-6448d5b84-bqh8n 1/1 Running 0 2m9s
pod/webapp-prod-6448d5b84-hnsjr 1/1 Running 0 2m9s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/webapp-prod LoadBalancer 10.3.254.73 34.92.49.24 80:30082/TCP 2m11s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/webapp-prod 3/3 3 3 2m10s
NAME DESIRED CURRENT READY AGE
replicaset.apps/webapp-prod-6448d5b84 3 3 3 2m10s
可以看到 Production 環境的元件也建置完成。
今天學習到如何使用 ArgoCD 建立應用程式,也代表從 Day16 - Day22 製作的 CI/CD 流水線已經可以工作了,明天我們就來試試看,到底多了 CI/CD 工具對開發以及維運有哪些好處。