使用 Argo CD 的 UI 界面可視化管理 Flux 應(yīng)用?
Flux 項(xiàng)目原本提供了一個(gè) Web UI 來管理 Flux 集群,但該項(xiàng)目已經(jīng)存檔,F(xiàn)luxCD 組織不再開發(fā),所以我們這里不再介紹了,如果你想使用 Web UI 來管理 Flux 集群,可以使用 Weaveworks 提供的 weave-gitops(https://github.com/weaveworks/weave-gitops
) 項(xiàng)目,該下面為 Flux 提供了一個(gè)免費(fèi)的開源 GUI。
weave gitops
Weave GitOps 改善了開發(fā)人員體驗(yàn),簡化了在 Kubernetes 上部署和管理云原生應(yīng)用程序的復(fù)雜性和認(rèn)知負(fù)擔(dān),使團(tuán)隊(duì)可以更快地開展工作,它是 Flux 的一個(gè)強(qiáng)大擴(kuò)展。
Weave GitOps 可以幫助應(yīng)用程序運(yùn)維人員輕松發(fā)現(xiàn)和解決問題 - 簡化和擴(kuò)展 GitOps 和持續(xù)交付的采用。UI 提供了引導(dǎo)式體驗(yàn),可幫助用戶輕松發(fā)現(xiàn) Flux 對象之間的關(guān)系并加深理解,同時(shí)提供對應(yīng)用程序部署的見解。
Weave GitOps 初了提供了一個(gè)開源的版本之外,還有一個(gè)企業(yè)版本,其 OSS 版本是一個(gè)簡單的開源開發(fā)者平臺(tái),適合那些沒有 Kubernetes 專業(yè)知識(shí)但想要云原生應(yīng)用程序的人。它包括 UI 和許多其他功能,使團(tuán)隊(duì)超越簡單的 CI/CD 系統(tǒng)。體驗(yàn)啟用 GitOps 并在集群中運(yùn)行應(yīng)用程序是多么容易。我們這里當(dāng)然是使用開源版本了。
Weave GitOps 提供了一個(gè)命令行界面,可幫助用戶創(chuàng)建和管理資源。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
當(dāng)然如果是 Mac 用戶可以使用 Homebrew 進(jìn)行一鍵安裝:
brew tap weaveworks/tap
brew install weaveworks/tap/gitops
CLI 工具安裝完成后,接下來就可以來部署 Weave GitOps 了,我們將:
- 使用 GitOps CLI 工具生成 HelmRelease 和 HelmRepository 對象。
- 創(chuàng)建一些登錄憑據(jù)來訪問 Dashboard。
- 將生成的 yaml 提交到我們的基礎(chǔ)設(shè)施代碼庫。
- 觀察它們是否已同步到集群。
前面我們安裝 Flux 的基礎(chǔ)設(shè)施代碼倉庫為 http://gitlab.k8s.local/cnych/flux,現(xiàn)在我們 Clone 這個(gè)倉庫到本地:
$ git clone http://gitlab.k8s.local/cnych/flux
$ cd flux
然后運(yùn)行以下命令創(chuàng)建 HelmRepository 和 HelmRelease 來部署 Weave GitOps:
PASSWORD="gitops321" # 設(shè)置登錄密碼
gitops create dashboard ww-gitops \
--password=$PASSWORD \
--export > ./clusters/my-cluster/weave-gitops-dashboard.yaml
該命令會(huì)存儲(chǔ)密碼的哈希值,這在演示和測試的時(shí)候相對安全,但我們強(qiáng)烈建議在生產(chǎn)系統(tǒng)中使用更安全的密鑰存儲(chǔ)方法(如 Flux 的 SOPS 集成)。
然后提交 weave-gitops-dashboard.yaml 并將其推送到 flux 基礎(chǔ)存儲(chǔ)庫中去:
git add -A && git commit -m "Add Weave GitOps Dashboard"
git push
然后隔一會(huì)兒可以去檢測下是否已經(jīng)部署成功了:
$ kubectl get pods -n flux-system
如果想要定制 Weave GitOps 的部署,可以通過配置 Helm Chart 的 Values 來實(shí)現(xiàn),可配置的參數(shù)可以參考文檔:https://docs.gitops.weave.works/docs/references/helm-reference/。
現(xiàn)在我們想要訪問 Weave GitOps 的 Web UI,可以通過 kubectl port-forward 命令來實(shí)現(xiàn):
kubectl port-forward svc/ww-gitops-weave-gitops -n flux-system 9001:9001
然后我們就可以通過瀏覽器訪問 http://localhost:9001 來訪問 Weave GitOps 的 Web UI 了,輸入用戶名為 admin,密碼為前面配置的 PASSWORD 的值,即可登錄:
weave gitops
登錄后,可以將進(jìn)入 APPLICATIONS 視圖,該視圖可以快速了解部署的狀態(tài)并顯示來自 Kustomization 和 HelmRelease 對象的摘要信息。我們還可以使用右上角的切換開關(guān)應(yīng)用深色模式。
APPLICATIONS
讓我們來探索下 flux-system 這個(gè)基礎(chǔ)設(shè)施 Kustomization 對象,返回到應(yīng)用程序視圖,并點(diǎn)擊 flux-system 對象。
flux-system detail
可能需要一些時(shí)間來加載數(shù)據(jù)。一旦加載完成,應(yīng)該會(huì)得到一個(gè)類似上面截圖的結(jié)果。在這里,可以找到有關(guān)資源定義的關(guān)鍵信息。
- 它正在讀取哪個(gè)來源 Source。
- 最新應(yīng)用的提交。
- 正在部署的源存儲(chǔ)庫的確切路徑。
- Flux 將尋求調(diào)諧聲明狀態(tài)和實(shí)時(shí)狀態(tài)之間任何差異的時(shí)間間隔 Interval。例如,如果集群上應(yīng)用了 kubectl 補(bǔ)丁,它將被有效地恢復(fù)。如果該對象報(bào)告了較長的錯(cuò)誤消息,您將能夠在此頁面上看到完整的錯(cuò)誤消息。
在 UI 的左側(cè)菜單中,單擊 SOURCES 視圖,這將向你顯示 Flux 從何處提取其應(yīng)用程序定義(例如 Git 存儲(chǔ)庫)以及該同步的當(dāng)前狀態(tài)。Sources 顯示來自 GitRepository、HelmRepository、HelmChart 和 Bucket 對象的摘要信息。
源列表
Sources 表視圖顯示有關(guān)狀態(tài)的信息,以便可以查看 Flux 是否能夠從給定源成功拉取,以及最后檢測到哪個(gè)特定提交。它向你顯示諸如 INTERVAL 之類的關(guān)鍵信息,即 Flux 在指定源位置檢查更新的頻率。你還可以查看該來源是否經(jīng)過驗(yàn)證。
除此之外還有其他的一些功能,比如 IMAGE AUTOMATION 頁面、POLICIES 也沒、NOTIFICATIONS 頁面等等。但是可以發(fā)現(xiàn)這個(gè) UI 主要是用于展示的,我們并不能通過頁面去創(chuàng)建資源對象,所以我們還是推薦使用命令行來管理 Flux 集群。
Flamingo
Flamingo 是 Argo 的 Flux 子系統(tǒng)(FSA),F(xiàn)lamingo 的容器鏡像可以作為等效的 ArgoCD 版本的插件擴(kuò)展,與 Argo CD 一起可視化和管理 Flux 工作負(fù)載。
Loopback Reconciliation 是 Flamingo 的一項(xiàng)功能,有助于同步使用 GitOps 方法部署的應(yīng)用程序。當(dāng) Argo CD 用戶界面中啟用 FluxSubsystem 功能時(shí),它會(huì)被激活。其工作原理如下:
- 在 Kustomization 或 Helm 模式下創(chuàng)建 Argo CD 應(yīng)用程序清單并將其部署到集群。
- Flamingo 將 Argo CD 應(yīng)用程序清單轉(zhuǎn)換為等效的 Flux 對象,可以是 Kustomization 對象,也可以是帶有 Source 的 HelmRelease 對象,具體取決于 Argo CD 清單中使用的模式。如果應(yīng)用程序中已存在 Flux 對象,F(xiàn)lamingo 將使用它們作為引用,而不是創(chuàng)建新對象。
- Flamingo 通過使用 Flux 對象的狀態(tài)作為所需狀態(tài)來同步或協(xié)調(diào) Argo CD 應(yīng)用程序的狀態(tài)與其 Flux 對應(yīng)項(xiàng)。為此,環(huán)回調(diào)諧機(jī)制繞過了 Argo CD 中的本機(jī)協(xié)調(diào)過程,而是依賴于 Flux 調(diào)諧。然后它使用 Flux 對象的結(jié)果向 Argo CD 報(bào)告。
Loopback Reconciliation 通過使應(yīng)用程序的狀態(tài)與 Flux 對象中定義的所需狀態(tài)保持同步,有助于確保基于 GitOps 的部署的可靠性和一致性。
how to work
要安裝 Flamingo 比較簡單,我們可以通過 Flux 的 Kustomization 對象來部署,創(chuàng)建如下所示的資源對象:
# 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
然后直接應(yīng)用該資源對象即可:
$ 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
上面的資源對象會(huì)創(chuàng)建一個(gè) argocd 的命名空間,并會(huì)部署 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
默認(rèn)情況下會(huì)有 2 個(gè) FSA 應(yīng)用,每個(gè)應(yīng)用程序由 1 個(gè) Flux 的 Kustomization 和 1 個(gè) Flux 的 GitRepository 組成。
argocd app
如果你現(xiàn)有集群中已經(jīng)安裝了 Argo CD,那么我們可以使用下面的命令來升級現(xiàn)有的 Argo CD。如果已經(jīng)安裝了 Argo CD,可以使用來自 FSA 的鏡像替換現(xiàn)有安裝的鏡像。
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 -
如果想要將現(xiàn)有的 Flux 應(yīng)用轉(zhuǎn)換成 FSA 應(yīng)用,可以使用 flamingo 的 CLI 命令來實(shí)現(xiàn),所以首先需要安裝 flamingo 命令行工具,前往 Flamingo CLI Release 頁面下載對應(yīng)的版本即可,然后解壓后將二進(jìn)制文件移動(dòng)到 /usr/local/bin 目錄下即可:
$ flamingo --version
flamingo version 0.3.1
CLI 工具安裝完成后,接下來我們就可以將現(xiàn)有的 Flux 應(yīng)用轉(zhuǎn)換成 FSA 應(yīng)用了,比如現(xiàn)在我們創(chuàng)建一個(gè)如下所示的 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
創(chuàng)建后我們可以使用下面的命令來生成一個(gè) FSA 應(yīng)用:
flamingo generate-app \
--app-name=podinfo-ks \
-n podinfo-kustomize ks/podinfo
創(chuàng)建完成后我們再去訪問 Argo CD 的 Web UI,可以看到已經(jīng)生成了一個(gè) FSA 應(yīng)用:
argocd ui
這樣我們就可以通過 Argo CD 的 Web UI 界面來管理 Flux 的應(yīng)用了。