使用 Argo CD 的 UI 界面可視化管理 Flux 應用?
Flux 項目原本提供了一個 Web UI 來管理 Flux 集群,但該項目已經存檔,FluxCD 組織不再開發,所以我們這里不再介紹了,如果你想使用 Web UI 來管理 Flux 集群,可以使用 Weaveworks 提供的 weave-gitops(https://github.com/weaveworks/weave-gitops
) 項目,該下面為 Flux 提供了一個免費的開源 GUI。
weave gitops
Weave GitOps 改善了開發人員體驗,簡化了在 Kubernetes 上部署和管理云原生應用程序的復雜性和認知負擔,使團隊可以更快地開展工作,它是 Flux 的一個強大擴展。
Weave GitOps 可以幫助應用程序運維人員輕松發現和解決問題 - 簡化和擴展 GitOps 和持續交付的采用。UI 提供了引導式體驗,可幫助用戶輕松發現 Flux 對象之間的關系并加深理解,同時提供對應用程序部署的見解。
Weave GitOps 初了提供了一個開源的版本之外,還有一個企業版本,其 OSS 版本是一個簡單的開源開發者平臺,適合那些沒有 Kubernetes 專業知識但想要云原生應用程序的人。它包括 UI 和許多其他功能,使團隊超越簡單的 CI/CD 系統。體驗啟用 GitOps 并在集群中運行應用程序是多么容易。我們這里當然是使用開源版本了。
Weave GitOps 提供了一個命令行界面,可幫助用戶創建和管理資源。gitops CLI 目前在 Mac(x86 和 Arm)和 Linux 上受支持,包括 Windows Subsystem for Linux (WSL)。
有多種方法可以安裝 gitops CLI:
$ curl --silent --location "https://github.com/weaveworks/weave-gitops/releases/download/v0.32.0/gitops-$(uname)-$(uname -m).tar.gz" | tar xz -C /tmp
$ sudo mv /tmp/gitops /usr/local/bin
$ gitops version
Current Version: 0.32.0
GitCommit: 49a4249d8c205f14f0777c921cd69c04951e208f
BuildTime: 2023-09-13T17:23:13Z
Branch: releases/v0.32.0
當然如果是 Mac 用戶可以使用 Homebrew 進行一鍵安裝:
brew tap weaveworks/tap
brew install weaveworks/tap/gitops
CLI 工具安裝完成后,接下來就可以來部署 Weave GitOps 了,我們將:
- 使用 GitOps CLI 工具生成 HelmRelease 和 HelmRepository 對象。
- 創建一些登錄憑據來訪問 Dashboard。
- 將生成的 yaml 提交到我們的基礎設施代碼庫。
- 觀察它們是否已同步到集群。
前面我們安裝 Flux 的基礎設施代碼倉庫為 http://gitlab.k8s.local/cnych/flux,現在我們 Clone 這個倉庫到本地:
$ git clone http://gitlab.k8s.local/cnych/flux
$ cd flux
然后運行以下命令創建 HelmRepository 和 HelmRelease 來部署 Weave GitOps:
PASSWORD="gitops321" # 設置登錄密碼
gitops create dashboard ww-gitops \
--password=$PASSWORD \
--export > ./clusters/my-cluster/weave-gitops-dashboard.yaml
該命令會存儲密碼的哈希值,這在演示和測試的時候相對安全,但我們強烈建議在生產系統中使用更安全的密鑰存儲方法(如 Flux 的 SOPS 集成)。
然后提交 weave-gitops-dashboard.yaml 并將其推送到 flux 基礎存儲庫中去:
git add -A && git commit -m "Add Weave GitOps Dashboard"
git push
然后隔一會兒可以去檢測下是否已經部署成功了:
$ kubectl get pods -n flux-system
如果想要定制 Weave GitOps 的部署,可以通過配置 Helm Chart 的 Values 來實現,可配置的參數可以參考文檔:https://docs.gitops.weave.works/docs/references/helm-reference/。
現在我們想要訪問 Weave GitOps 的 Web UI,可以通過 kubectl port-forward 命令來實現:
kubectl port-forward svc/ww-gitops-weave-gitops -n flux-system 9001:9001
然后我們就可以通過瀏覽器訪問 http://localhost:9001 來訪問 Weave GitOps 的 Web UI 了,輸入用戶名為 admin,密碼為前面配置的 PASSWORD 的值,即可登錄:
weave gitops
登錄后,可以將進入 APPLICATIONS 視圖,該視圖可以快速了解部署的狀態并顯示來自 Kustomization 和 HelmRelease 對象的摘要信息。我們還可以使用右上角的切換開關應用深色模式。
APPLICATIONS
讓我們來探索下 flux-system 這個基礎設施 Kustomization 對象,返回到應用程序視圖,并點擊 flux-system 對象。
flux-system detail
可能需要一些時間來加載數據。一旦加載完成,應該會得到一個類似上面截圖的結果。在這里,可以找到有關資源定義的關鍵信息。
- 它正在讀取哪個來源 Source。
- 最新應用的提交。
- 正在部署的源存儲庫的確切路徑。
- Flux 將尋求調諧聲明狀態和實時狀態之間任何差異的時間間隔 Interval。例如,如果集群上應用了 kubectl 補丁,它將被有效地恢復。如果該對象報告了較長的錯誤消息,您將能夠在此頁面上看到完整的錯誤消息。
在 UI 的左側菜單中,單擊 SOURCES 視圖,這將向你顯示 Flux 從何處提取其應用程序定義(例如 Git 存儲庫)以及該同步的當前狀態。Sources 顯示來自 GitRepository、HelmRepository、HelmChart 和 Bucket 對象的摘要信息。
源列表
Sources 表視圖顯示有關狀態的信息,以便可以查看 Flux 是否能夠從給定源成功拉取,以及最后檢測到哪個特定提交。它向你顯示諸如 INTERVAL 之類的關鍵信息,即 Flux 在指定源位置檢查更新的頻率。你還可以查看該來源是否經過驗證。
除此之外還有其他的一些功能,比如 IMAGE AUTOMATION 頁面、POLICIES 也沒、NOTIFICATIONS 頁面等等。但是可以發現這個 UI 主要是用于展示的,我們并不能通過頁面去創建資源對象,所以我們還是推薦使用命令行來管理 Flux 集群。
Flamingo
Flamingo 是 Argo 的 Flux 子系統(FSA),Flamingo 的容器鏡像可以作為等效的 ArgoCD 版本的插件擴展,與 Argo CD 一起可視化和管理 Flux 工作負載。
Loopback Reconciliation 是 Flamingo 的一項功能,有助于同步使用 GitOps 方法部署的應用程序。當 Argo CD 用戶界面中啟用 FluxSubsystem 功能時,它會被激活。其工作原理如下:
- 在 Kustomization 或 Helm 模式下創建 Argo CD 應用程序清單并將其部署到集群。
- Flamingo 將 Argo CD 應用程序清單轉換為等效的 Flux 對象,可以是 Kustomization 對象,也可以是帶有 Source 的 HelmRelease 對象,具體取決于 Argo CD 清單中使用的模式。如果應用程序中已存在 Flux 對象,Flamingo 將使用它們作為引用,而不是創建新對象。
- Flamingo 通過使用 Flux 對象的狀態作為所需狀態來同步或協調 Argo CD 應用程序的狀態與其 Flux 對應項。為此,環回調諧機制繞過了 Argo CD 中的本機協調過程,而是依賴于 Flux 調諧。然后它使用 Flux 對象的結果向 Argo CD 報告。
Loopback Reconciliation 通過使應用程序的狀態與 Flux 對象中定義的所需狀態保持同步,有助于確保基于 GitOps 的部署的可靠性和一致性。
how to work
要安裝 Flamingo 比較簡單,我們可以通過 Flux 的 Kustomization 對象來部署,創建如下所示的資源對象:
# flamingo.yaml
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: OCIRepository
metadata:
name: fsa-demo
namespace: flux-system
spec:
interval: 30s
url: oci://ghcr.io/flux-subsystem-argo/flamingo/manifests
ref:
tag: latest
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: fsa-demo
namespace: flux-system
spec:
prune: true
interval: 2m
path: "./demo"
sourceRef:
kind: OCIRepository
name: fsa-demo
timeout: 3m
然后直接應用該資源對象即可:
$ kubectl apply -f flamingo.yaml
$ kubectl get ocirepository fsa-demo -n flux-system
NAME URL READY STATUS AGE
fsa-demo oci://ghcr.io/flux-subsystem-argo/flamingo/manifests True stored artifact for digest 'latest@sha256:e9df1250e9e9ae2931a6121b11f30f989cb20aaa4326659fd8ee5b6dd8ddec94' 72s
$ kubectl get kustomization fsa-demo -n flux-system
NAME AGE READY STATUS
fsa-demo 82s True Applied revision: latest@sha256:e9df1250e9e9ae2931a6121b11f30f989cb20aaa4326659fd8ee5b6dd8ddec94
上面的資源對象會創建一個 argocd 的命名空間,并會部署 Argo CD 的所有組件:
$ kubectl get pods -n argocd
NAME READY STATUS RESTARTS AGE
argocd-application-controller-0 1/1 Running 0 2m16s
argocd-applicationset-controller-c9b9899d6-t4gh6 1/1 Running 0 2m16s
argocd-dex-server-798cc6585d-dtc4k 1/1 Running 0 2m16s
argocd-notifications-controller-5b77dc9659-7t9cw 1/1 Running 0 2m16s
argocd-redis-b5d6bf5f5-6kdgc 1/1 Running 0 2m16s
argocd-repo-server-785445967d-xxrq7 1/1 Running 0 2m16s
argocd-server-758f648df4-8zhc5 1/1 Running 0 2m16s
argocd 部署完成后,我們可以通過 kubectl port-forward 命令來訪問 Argo CD 的 Web UI:
$ kubectl -n argocd port-forward svc/argocd-server 8003:443
然后我們就可以通過瀏覽器訪問 https://localhost:8003 來訪問 Argo CD 的 Web UI 了。
argocd
默認情況下會有 2 個 FSA 應用,每個應用程序由 1 個 Flux 的 Kustomization 和 1 個 Flux 的 GitRepository 組成。
argocd app
如果你現有集群中已經安裝了 Argo CD,那么我們可以使用下面的命令來升級現有的 Argo CD。如果已經安裝了 Argo CD,可以使用來自 FSA 的鏡像替換現有安裝的鏡像。
kustomize build https://github.com/flux-subsystem-argo/flamingo//release?ref=${FSA_VERSION} \
| yq e '. | select(.kind=="Deployment" or .kind=="StatefulSet")' - \
| kubectl -n argocd apply -f -
如果想要將現有的 Flux 應用轉換成 FSA 應用,可以使用 flamingo 的 CLI 命令來實現,所以首先需要安裝 flamingo 命令行工具,前往 Flamingo CLI Release 頁面下載對應的版本即可,然后解壓后將二進制文件移動到 /usr/local/bin 目錄下即可:
$ flamingo --version
flamingo version 0.3.1
CLI 工具安裝完成后,接下來我們就可以將現有的 Flux 應用轉換成 FSA 應用了,比如現在我們創建一個如下所示的 Flux Kustomization 對象:
cat << EOF | kubectl apply -f -
---
apiVersion: v1
kind: Namespace
metadata:
name: podinfo-kustomize
---
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: OCIRepository
metadata:
name: podinfo
namespace: podinfo-kustomize
spec:
interval: 10m
url: oci://ghcr.io/stefanprodan/manifests/podinfo
ref:
tag: latest
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: podinfo
namespace: podinfo-kustomize
spec:
interval: 10m
targetNamespace: podinfo-kustomize
prune: true
sourceRef:
kind: OCIRepository
name: podinfo
path: ./
EOF
創建后我們可以使用下面的命令來生成一個 FSA 應用:
flamingo generate-app \
--app-name=podinfo-ks \
-n podinfo-kustomize ks/podinfo
創建完成后我們再去訪問 Argo CD 的 Web UI,可以看到已經生成了一個 FSA 應用:
argocd ui
這樣我們就可以通過 Argo CD 的 Web UI 界面來管理 Flux 的應用了。