使用 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

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

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