公众号关注 「奇妙的 Linux 世界」
设为「星标」,每天带你玩转 Linux !
在我们开始实现Gitops
之前,让我为那些不熟悉 GitOps
及其工具的人提供一些背景。
GitOps
背后的基本思想是拥有一个版本控制的代码,就像在 Git
存储库中一样,它包含我们在生产中期望的基础设施的声明性定义,以及一个确保我们在那里拥有该状态的自动化过程。
这意味着每个pull
请求都可以为您的用户发布一个新特性,任何断点都可以通过简单的git revert
来回滚。因此,开发人员只需要访问代码,而不需要访问实际环境。请注意,这并不意味着我们在限制开发人员;这只会让开发人员更接近环境,从而使他们能够使用。
Argo CD
和 Flux CD
都是著名的工具,可以将您的实时环境与 Git
存储库中的所需状态相匹配。而这个博客内容将帮助您了解这些工具的核心功能,然后进行公平的比较,以便您做出正确的选择。
ArgoCD
Argo CD
是Kubernetes
的声明式GitOps
持续交付工具。它具有可伸缩性、安全性(以及SSO
集成)、多集群多租户支持和可扩展性。
安装
Argo CD
的安装非常简单,可以在入门页面上看到。
https://argo-cd.readthedocs.io/en/stable/getting_started/
![18ccfacbbd47155527ba510429118139.png](https://img-blog.csdnimg.cn/img_convert/18ccfacbbd47155527ba510429118139.png)
要访问UI
,使用这两种方法暴露Argo CD
服务
![3594db1e2ea3c504da215e5e8178ba46.png](https://img-blog.csdnimg.cn/img_convert/3594db1e2ea3c504da215e5e8178ba46.png)
如果你计划只使用核心的argocd
,你可以用argocd CLI
来控制它。要安装命令行,只需运行命令行
![dcc170ca3662a69cf41f3c604d750e28.png](https://img-blog.csdnimg.cn/img_convert/dcc170ca3662a69cf41f3c604d750e28.png)
核心概念
在Argo CD
中,所有相关资源都被分组并部署为一个名为Application
的单元。每个申请都是Project
的一部分,Project
是Argo CD
的租赁单位。每个租户可以被限制在一个名称空间和集群中。
您的应用程序链接到一个版本控制,比如Git
,它决定应用程序的状态。一旦部署,资源就处于Live
状态。每当在Git
中更改代码时,就会创建一个新的Desired
状态,可以通过仪表板上的快速刷新查看该状态。为了使您的活动状态与期望的状态相匹配,您可以同步它们。
它还允许您监视应用程序的运行状况,并在出现故障时,允许使用历史记录和回滚功能回滚到旧版本。
预排
现在到仪表板上… 仪表盘看起来非常现代,非常直观。要开始一个新项目,只需单击new App
按钮并填写以下细节。
![f2e6d0d07ba08bc54cbb9095f9e99d6c.png](https://img-blog.csdnimg.cn/img_convert/f2e6d0d07ba08bc54cbb9095f9e99d6c.png)
在源代码部分,提供Git repo
的URL
和文件夹的路径(这是从repo
派生的响应式下拉列表)。然后向下滚动选择集群,可以是你已经注册的任何一个集群。
已经注册: https://argo-cd.readthedocs.io/en/stable/getting_started/#5-register-a-cluster-to-deploy-apps-to-optional
创建完成后,你会在主仪表板上看到一个以你的应用名称命名的卡片。点击它到达这个视图。对于本演示,使用了kustomize-guestbook
示例应用程序。
kustomize-guestbook: https://github.com/argoproj/argocd-example-apps/tree/master/kustomize-guestbook
![9b108830c39bd9538b2e0fef40d7e2af.png](https://img-blog.csdnimg.cn/img_convert/9b108830c39bd9538b2e0fef40d7e2af.png)
live
状态不等于想要的状态(因为我们还没有部署任何东西),因此它显示OutOfSync
状态。现在单击Sync
按钮进行部署
![8caafdd114701784eefaf10df307e566.png](https://img-blog.csdnimg.cn/img_convert/8caafdd114701784eefaf10df307e566.png)
该视图显示了部署中复制集中的pod
的粒度。在这里,您可以单击任何元素来查看它们的事件、日志和状态。
现在,每当Git
中的代码发生变化时,您都可以单击Refresh
以查看新的Sync
状态。如果不同步,比如需要改变资源,你可以点击App Diff
查看这些差异,然后点击sync
部署它们。
Flux CD
Flux
最初由Weaveworks
开发,现在在CNCF
下孵化,是一套针对Kubernetes
的持续和进步的交付解决方案,是开放和可扩展的。
安装
Flux
有一个cli
优先的方法,UI
只是一个附加组件。要安装Flux CLI
,请使用其中之一
安装Flux CLI: https://fluxcd.io/docs/installation/
# HOMEBREW
brew install fluxcd/tap/flux
# GOFISH
gofish install flux
# BASH
curl -s https://fluxcd.io/install.sh | sudo bash
# YAY
yay -S flux-bin
# NIX OS
nix-env -i fluxcd
# CHOCOLATEY
choco install flux
安装CLI
后,使用以下命令在Kubernetes
集群上安装Flux
# For generic git server
flux bootstrap git \
--url=ssh://git@<host>/<org>/<repository> \
--branch=<my-branch> \
--path=clusters/my-cluster
# For GitHub or GitHub enterprise
flux bootstrap github \
--owner=my-github-username \
--repository=my-repository \
--path=clusters/my-cluster \
--personal
核心概念
Flux
是一种更直接的GitOps
方法,更少的人为干扰。这个过程从Bootstrapping
开始。这将在集群上安装flux
组件,该组件将监视Source
上的一个目录。这个源上的任何更改都将通过Reconciliation
过程更新到集群上。它可以与Helm
释放,Kustomization
或保存在桶中的文物一起使用。
预排
让我们从一些预先配置开始… 导出将被flux CLI
用于与你的repo
交互的Git
登录细节。
![b40d29e70a4341e2a6baef2acbffb698.png](https://img-blog.csdnimg.cn/img_convert/b40d29e70a4341e2a6baef2acbffb698.png)
接下来,检查集群是否兼容。您应该看到这样的输出
现在使用
git
配置将flux
安装到你的集群中
![e40d87e02c9ce3b6a885a5fe36c1e374.png](https://img-blog.csdnimg.cn/img_convert/e40d87e02c9ce3b6a885a5fe36c1e374.png)
这将在你的GitHub
帐户中创建一个test-repo
,并在repo
中添加Flux
组件清单。它还将附带组件部署到集群,并将它们配置跟踪集群中的./clusters/my-cluster/
目录。如果你克隆这个和检查内容,你会发现类似的东西
![73741a2d7376fe905d5200512442f6de.png](https://img-blog.csdnimg.cn/img_convert/73741a2d7376fe905d5200512442f6de.png)
这样,您的设置就准备好了。您可以在test-repo/clusters/my-cluster/
中创建任何清单,flux
将轮询它并部署更新。
你也可以试试它实验性的web UI。
https://github.com/fluxcd/webui
那我该选哪个呢?
虽然它们都遵循相同的路径,但这些工具之间存在差异。让我们看看,然后我会让你决定什么最适合你
代码协作中的灵活性
Argo
允许将多个代码库连接到集群,而Flux
每个operator
只能连接一个代码库。如果多个团队在同一个应用程序上工作,并提供不同的清单,这将有利于Argo
。
Manifest工具支持
Argo
和Flux
都与Helm
和Kustomization
合作。Argo
还可以使用ksonnet
和jsonnet
。此外,这两种工具都支持作为配置管理插件配置的自定义配置管理工具。
多租户
直到几个月前,这可能还在Argo
的篮子里,然而,Flux v2
对多租户和服务器端协调的支持现在甚至在这个领域。
Flux多租户:https://github.com/fluxcd/flux2-multi-tenancy
服务器端协调的支持: https://fluxcd.io/blog/2021/09/server-side-reconciliation-is-coming/
Web UI
Argo
提供了一个强大的UI
,可以帮助可视化不同对象之间的关系,并更好地监控它们,而Flux
则完全依赖于CLI
。你可以添加web UI
到Flux
,但它仍然是实验性的。
web UI: https://github.com/fluxcd/webui
Flux: https://github.com/fluxcd/webui
身份验证
Argo
可以与SSO
集成,并且内置了对RBAC
的额外支持。Flux
只与服务帐户的RBAC
一起工作。
自动化容器更新
Flux
在自动化容器更新方面占了上风,而另一方面,在Argo
中需要手动提交和同步。
管理
另一点是Flux
的简单设计。Flux
可以自动部署应用程序,几乎无需维护。Argo
需要你来部署但我个人更喜欢在这里控制。
最后的判决
Argo
和Flux
都是非常棒的工具,为它们的用例提供了很好的服务。由于Argo
的可扩展控制和多功能性,我总是倾向于使用Argo
。然而,Flux v2
可能很快就会改变这一点!
参考资料
[1]
参考地址: https://rajputvaibhav.medium.com/argo-cd-vs-flux-cd-right-gitops-tool-for-your-kubernetes-cluster-c71cff489d26
本文转载自:「云原生CTO」,原文:https://tinyurl.com/3x8cf9w8,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。
你可能还喜欢
点击下方图片即可阅读
5 种快速查找容器文件系统中文件的方法
点击上方图片,『美团|饿了么』外卖红包天天免费领
更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!