使用 Argo CD 的 UI 界面可视化管理 Flux 应用?

使用 Argo CD 的 UI 界面可视化管理 Flux 应用?

作者:阳明 2023-10-08 07:59:25

云计算

云原生 Weave GitOps 改善了开发人员体验,简化了在 Kubernetes 上部署和管理云原生应用程序的复杂性和认知负担,使团队可以更快地开展工作,它是 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 的应用了。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/268379.html<

(0)
管理的头像管理
上一篇2025-05-06 20:51
下一篇 2025-05-06 20:53

相关推荐

  • 云服务器和云虚拟主机怎么选?云服务器和虚拟主机区别

    云服务器适合业务增长快、需弹性扩展的场景,而云虚拟主机适合预算有限、技术门槛低的小型静态网站或测试环境,二者核心区别在于资源独享性与运维复杂度,核心差异解析:从底层架构到使用体验很多人容易混淆这两者,觉得它们都是“买空间建站”,它们的底层逻辑完全不同,云服务器(ECS)就像是你租了一整栋别墅,水电网络独立,你想……

    2026-06-29
    0
  • 赣州智慧旅游招聘是真的吗?赣州旅游人才招聘信息

    中级岗位(3-5年经验)月薪范围通常在6000-10000元,这类岗位需要独立负责项目模块,如独立运营一个抖音账号,或维护一个景区小程序的功能迭代,具备成功案例的候选人议价能力较强,高级岗位(5年以上经验)月薪范围通常在10000-20000元,部分核心管理岗可达更高,这类人才需要具备战略规划能力,如制定整个景……

    2026-06-29
    0
  • 赣州智能物联网车位锁如何管理?智能车位锁管理系统多少钱

    赣州智能物联网车位锁管理的核心在于通过云端平台实现远程控锁、状态实时监控及自动计费,彻底解决传统车位“被占难管”与“找位难”的痛点,在赣州这样的城市,随着机动车保有量的持续增长,老旧小区、商业综合体以及私人固定车位的资源矛盾日益凸显,传统的机械地锁或简易遥控锁,不仅操作繁琐,更无法实现数据化管理,引入智能物联网……

    2026-06-29
    0
  • 赣州智能消防栓好用吗,智能消防栓多少钱一个

    赣州智能消防栓通过物联网技术实现实时监测与远程报警,能显著降低火灾响应时间并提升城市消防安全管理水平,是目前智慧城市建设中不可或缺的基础设施,赣州智能消防栓的核心价值与应用场景传统消防栓往往存在“看不见、摸不着、用不了”的痛点,在赣州这样地形复杂、老城区与新城区并存的区域,传统设施的管理难度极大,智能消防栓的出……

    2026-06-29
    0
  • 云服务器和物理机到底有啥区别?

    云服务器本质上是虚拟化资源池中的弹性实例,而传统物理服务器是独占的硬件实体,前者胜在弹性与运维便捷,后者强在物理隔离与性能稳定,具体选择取决于业务对成本、扩展性及安全合规的权衡,很多人初次接触服务器时,容易把“云服务器”和“传统物理服务器”混为一谈,觉得它们都是用来跑网站或存数据的盒子,这两者的底层逻辑完全不同……

    2026-06-29
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注