使用 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
的值,即可登录:
登录后,可以将进入 APPLICATIONS
视图,该视图可以快速了解部署的状态并显示来自 Kustomization
和 HelmRelease
对象的摘要信息。我们还可以使用右上角的切换开关应用深色模式。
让我们来探索下 flux-system
这个基础设施 Kustomization
对象,返回到应用程序视图,并点击 flux-system
对象。
可能需要一些时间来加载数据。一旦加载完成,应该会得到一个类似上面截图的结果。在这里,可以找到有关资源定义的关键信息。
- 它正在读取哪个来源
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 的部署的可靠性和一致性。
要安装 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 了。
默认情况下会有 2 个 FSA 应用,每个应用程序由 1 个 Flux 的 Kustomization
和 1 个 Flux 的 GitRepository
组成。
如果你现有集群中已经安装了 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 应用:
这样我们就可以通过 Argo CD 的 Web UI 界面来管理 Flux 的应用了。
文章转载自公众号:k8s技术圈