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
的值,即可登录:
![c434faf8b344ea14ed86827eae8c5cce.png](https://i-blog.csdnimg.cn/blog_migrate/43e3e45cade6af21460b01ce2c0b9bd6.png)
登录后,可以将进入 APPLICATIONS
视图,该视图可以快速了解部署的状态并显示来自 Kustomization
和 HelmRelease
对象的摘要信息。我们还可以使用右上角的切换开关应用深色模式。
![3ee1d94c333508da3b7947607fde71e5.png](https://i-blog.csdnimg.cn/blog_migrate/66d0b8c04d379b4e9f406891a1ad17fc.png)
让我们来探索下 flux-system
这个基础设施 Kustomization
对象,返回到应用程序视图,并点击 flux-system
对象。
![eb5fd8e41e02042f38ed9dcd10d8c79b.png](https://i-blog.csdnimg.cn/blog_migrate/f1c22562465f7a3c136ef31839ec0516.png)
可能需要一些时间来加载数据。一旦加载完成,应该会得到一个类似上面截图的结果。在这里,可以找到有关资源定义的关键信息。
它正在读取哪个来源
Source
最新应用的提交
正在部署的源存储库的确切路径
Flux 将寻求调谐声明状态和实时状态之间任何差异的时间间隔
Interval
。例如,如果集群上应用了 kubectl 补丁,它将被有效地恢复。如果该对象报告了较长的错误消息,您将能够在此页面上看到完整的错误消息。
在 UI 的左侧菜单中,单击 SOURCES
视图,这将向你显示 Flux 从何处提取其应用程序定义(例如 Git 存储库)以及该同步的当前状态。Sources
显示来自 GitRepository
、HelmRepository
、HelmChart
和 Bucket
对象的摘要信息。
![0a4d92099bc24a617ff88f186fca9149.png](https://i-blog.csdnimg.cn/blog_migrate/a758751ec93f938f097c704279a5419d.png)
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 的部署的可靠性和一致性。
![95f3297a868a7ab0f5718629438fc1ba.png](https://i-blog.csdnimg.cn/blog_migrate/380f77be9ce41f3f10eaccea576a1533.png)
要安装 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 了。
![914610b55167723c4af77f14f0e161e9.png](https://i-blog.csdnimg.cn/blog_migrate/cb37e203e2926724414d7ec6d2eff9e5.png)
默认情况下会有 2 个 FSA 应用,每个应用程序由 1 个 Flux 的 Kustomization
和 1 个 Flux 的 GitRepository
组成。
![bb276c665169a6f0b58238250477bc2c.png](https://i-blog.csdnimg.cn/blog_migrate/ffd9d9278d7297391b0464bbcd6eef6a.png)
如果你现有集群中已经安装了 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 应用:
![961e7741411ad68872b5e9b1b0d8486c.png](https://i-blog.csdnimg.cn/blog_migrate/d410fd15b9f1b98ec6f4768a658c7070.png)
这样我们就可以通过 Argo CD 的 Web UI 界面来管理 Flux 的应用了。