当前位置:首页 > 科技  > 软件

使用 Argo CD 探索 GitOps,你学会了吗?

来源: 责编: 时间:2024-05-22 17:15:08 226观看
导读Argo CD 是一个用于 Kubernetes 的声明式 GitOps 持续交付工具。管理 Kubernetes 集群的复杂性可能是一项艰巨的任务,尤其是在跨多个环境部署和同步应用程序时。为了研究如何更好地应对此类挑战,我决定研究流行的 GitOp

Argo CD 是一个用于 Kubernetes 的声明式 GitOps 持续交付工具。dqE28资讯网——每日最新资讯28at.com

管理 Kubernetes 集群的复杂性可能是一项艰巨的任务,尤其是在跨多个环境部署和同步应用程序时。为了研究如何更好地应对此类挑战,我决定研究流行的 GitOps 持续交付工具 Argo CD。Argo CD 是一款开源 GitOps 持续交付工具,可为 Kubernetes 集群管理带来便利性和自动化。借助此工具,工程师可以利用 GitOps 的强大功能,以声明方式定义 Git 存储库中 Kubernetes 集群的所需状态,从而实现高效、自动化的应用程序部署。dqE28资讯网——每日最新资讯28at.com

让我们通过回顾 Argo CD 在自己的项目文档中的解释来开始这篇文章。dqE28资讯网——每日最新资讯28at.com

https://argoproj.github.io/dqE28资讯网——每日最新资讯28at.com

Argo CD 被实现为 Kubernetes 控制器,它持续监控正在运行的应用程序并将当前的实时状态与所需的目标状态进行比较。Argo CD 报告并可视化差异,同时提供自动或手动将实时状态同步回所需目标状态的方法。对 Git 存储库中所需目标状态所做的任何修改都可以自动应用并反映在指定的目标环境中。 dqE28资讯网——每日最新资讯28at.com

换句话说,Argo CD 是 Kubernetes 的声明式 GitOps 持续交付工具。让我们更深入地了解这实际上意味着什么。dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

GitOps 是一种软件开发和交付流程,强调使用 Git 存储库作为定义系统所需状态(例如云基础设施或软件应用程序)的事实来源。在这个持续交付过程中,整个交付流程(从代码提交到部署)都是使用 Git 实现自动化和版本控制的。系统的所需状态(包括基础设施、配置和/或应用程序源)被定义为代码并捕获为存储库中的提交。一旦提交,声明的系统状态可以使用 GitOps 部署工具与系统实时持续同步。其结果是一个可靠的持续交付流程,使 DevOps 团队能够以自动化和可审核的方式快速、自信地部署代码更改。dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

Argo CD 是一个基于 GitOps 的持续交付工具,在同步系统状态时采用“pull”模式。“pull”模式是目标环境从源代码控制存储库“pull”最新提交并根据声明的系统状态自动更新自身。这与“push”模式相反,“push”模式将更改从开发环境推送到目标环境。dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

持续交付的“pull”模型如下所示:dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

图片图片dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

这里的意义在于,“push”模式要求交付机制提供对目标环境的入站网络访问,而“pull”模式仅需要出站网络访问。出站连接被认为风险较小,因为内部网络通常通过对发起网络通信的受信任实体授予最小权限的访问控制来保护自身。入站连接会带来更大的安全风险,因为它们源自外部、不受信任的网络,并且可能包含恶意流量。dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

在更高层面上,Argo CD 部署过程按以下方式工作:dqE28资讯网——每日最新资讯28at.com

  1. 开发人员向受监控的 Git 存储库进行提交。
  2. Argo CD 识别提交,克隆存储库,将当前系统状态与提交中声明的系统状态进行比较,然后将所需的更改应用于集群的配置。
  3. Kubernetes 会将应用清单中包含的配置与当前资源进行协调,并进行所需的更改以实现所需的集群状态。
  4. Argo CD 将持续监控当前状态与受监控存储库中声明的状态的同步状态。

请注意,此工作流程总结遗漏了通常执行持续集成的重要步骤。持续集成流程用于自动构建和测试应用程序代码,以确保在生产部署之前满足要求和标准。除了这个简单的定义之外,我将在另一个时间点对此主题进行更深入的讨论。dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

让我们继续快速浏览一下构成 Argo CD 架构的三个主要组件。dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

API 和Web服务器

API 服务器是一个 gRPC/REST 服务器,它公开 Web UI、CLI 和 CI/CD 系统使用的 API。dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

存储库服务器

存储库服务器是一项内部服务,用于维护保存应用程序清单的 Git 存储库的本地缓存。它负责生成和返回 Kubernetes 清单。dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

应用控制器

应用控制器是一个 Kubernetes 控制器,它持续监视正在运行的应用程序,并将当前的实时状态与所需的目标状态(如存储库中指定的)进行比较。它检测偏离声明配置的应用程序状态,并可以选择采取纠正措施。它负责为生命周期事件(PreSync、Sync、PostSync)调用任何用户定义的钩子。dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

图片图片dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

Argo CD 支持以下声明格式:dqE28资讯网——每日最新资讯28at.com

  • Helm Charts
  • Jsonnet Documents
  • Kubernetes Manifests
  • Kustomize Templates

我们将在本文中使用标准 Kubernetes Manifests。你将看到 Argo CD 文档将这些源作为“字典”。dqE28资讯网——每日最新资讯28at.com

现在我们已经了解了 Argo CD 是什么、它提供的价值以及它的构建方式,让我们开始安装它,以便更好地了解它如何用于管理 Kubernetes 工作负载。dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

本演练的先决条件如下:dqE28资讯网——每日最新资讯28at.com

  • 对 Kubernetes 的集群提升访问权限
  • Git 存储库
  • kubectl 命令行工具

dqE28资讯网——每日最新资讯28at.com

我们将从安装“argocd”命令行工具开始。执行以下 CLI 命令来完成此操作dqE28资讯网——每日最新资讯28at.com

curl -L 'https://github.com/argoproj/argo-cd/releases/download/v2.5.8/argocd-linux-amd64' > /usr/local/sbin/argocdchmod 0755 /usr/local/sbin/argocd

我们现在需要创建一个命名空间供 Argo CD 在其中运行。执行以下 CLI 命令来完成此操作。dqE28资讯网——每日最新资讯28at.com

kubectl create namespace argocd

接下来,我们将下载安装manifests并将其应用到我们的 Kubernetes 集群。dqE28资讯网——每日最新资讯28at.com

curl -L 'https://raw.githubusercontent.com/argoproj/argo-cd/v2.6.0/manifests/ha/install.yaml' > argocd-ha-install.yamlkubectl apply -n argocd -f argocd-ha-install.yaml

请注意,这是高可用安装类型。如果你的系统资源不足,你可以使用非 HA 版本。只需使用以下一组 CLI 命令即可。dqE28资讯网——每日最新资讯28at.com

curl -L 'https://raw.githubusercontent.com/argoproj/argo-cd/v2.6.0/manifests/install.yaml' > argocd-install.yamlkubectl apply -n argocd -f argocd-install.yaml

安装过程完成后,你需要获取管理员密码。执行以下 CLI 命令来完成此操作。dqE28资讯网——每日最新资讯28at.com

kubectl get secrets argocd-initial-admin-secret -n argocd -o json | jq -rM '.data.password' | base64 -d

这是一个高度敏感的信息。将此信息存储在安全的地方。尤其是在生产系统中工作时。dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

有了这些信息,我们现在可以使用 Web 浏览器连接到 UI。但首先,让我们将内部 Argo CD 服务端口转发到外部地址。执行以下 CLI 命令来完成此操作。dqE28资讯网——每日最新资讯28at.com

kubectl port-forward svc/argocd-server -n argocd 8443:443 --address='0.0.0.0'

这里需要注意的一个重要警告是,我在我的家庭实验室网络中运行的裸机 Kubernetes 集群中工作,并且不担心有威胁的访问者访问这个开放端口。如果你的集群暴露在互联网上,我强烈建议你采取必要的预防措施。此配置超出了本文章的范围,因此,你将承担保护集群访问的责任。dqE28资讯网——每日最新资讯28at.com

我运行此命令的服务器的 IP 地址恰好是 192.168.0.161。这让我访问以下 URL 来访问 Argo CD Web 界面:dqE28资讯网——每日最新资讯28at.com

https://192.168.0.161:8443dqE28资讯网——每日最新资讯28at.com

使用“admin”作为用户名和我们之前检索到的密码登录后,你应该看到类似以下内容:dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

图片图片dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

现在让我们使用 Argo CD 命令行工具登录。执行以下命令来完成此操作:dqE28资讯网——每日最新资讯28at.com

argocd login 192.168.0.161:8443

同样,192.168.0.161 是我的网络中的 IP 地址。这会和你的不一样。dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

你可以使用以下 CLI 命令更改管理员密码。如果在生产环境中工作,这样做可能是个好主意。dqE28资讯网——每日最新资讯28at.com

argocd account update-password

在这里,我们在与Argo CD 和 Kubernetes 集群交互时将主要使用 CLI。让我们继续创建我们的第一个 Argo CD 应用程序。我们将通过执行以下 CLI 命令来完成此操作。dqE28资讯网——每日最新资讯28at.com

argocd app create foo-app --repo https://github.com/trek10inc/exploring-gitops-with-argo --path part1/app1 --dest-server https://kubernetes.default.svc --dest-namespace default

dqE28资讯网——每日最新资讯28at.com

请注意,此命令使用公共存储库创建应用程序。使用私有存储库创建应用程序超出了本文章的范围。你可以通过以下链接阅读有关如何完成此操作的更多信息:dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

https://argo-cd.readthedocs.io/en/stable/user-guide/private-repositories/dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

此外,还要注意 CLI 命令中提供的“路径”属性。这就是告诉 Argo CD 在哪里寻找 Kubernetes 清单的信息。此属性允许你在单个存储库中存储多个应用程序。dqE28资讯网——每日最新资讯28at.com

命令执行完成后,我们将使用以下 CLI 命令列出新创建的 Argo CD 应用程序:dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

argocd app get foo-app

你应该看到类似以下内容:dqE28资讯网——每日最新资讯28at.com

Name:               argocd/foo-appProject:            defaultServer:             https://kubernetes.default.svcNamespace:          defaultURL:                https://192.168.0.161:8443/applications/foo-appRepo:               https://github.com/trek10inc/exploring-gitops-with-argoTarget:Path:               part1/app1SyncWindow:         Sync AllowedSync Policy:        <none>Sync Status:        OutOfSync from  (37b85c8)Health Status:      MissingGROUP  KIND        NAMESPACE  NAME     STATUS     HEALTH   HOOK  MESSAGE       Service     default    foo-svc  OutOfSync  Missingapps   Deployment  default    foo-app  OutOfSync  Missing

dqE28资讯网——每日最新资讯28at.com

记下“Service”和“Deployment”资源的“OutOfSync”状态。应用程序状态最初处于“OutOfSync”状态,因为应用程序尚未部署,这意味着尚未创建 Kubernetes 资源。dqE28资讯网——每日最新资讯28at.com

要同步(部署)应用程序,请执行以下 CLI 命令:dqE28资讯网——每日最新资讯28at.com

argocd app sync foo-app

dqE28资讯网——每日最新资讯28at.com

使用此命令,Argo CD 将从受监控的存储库检索最新提交,并使用其包含的清单执行“kubectl apply”。dqE28资讯网——每日最新资讯28at.com

“foo-app”应用程序现在应该正在运行中。你可以查看其资源组件、日志、历史记录和评估的健康状态。dqE28资讯网——每日最新资讯28at.com

argocd app get foo-appName:               argocd/foo-appProject:            defaultServer:             https://kubernetes.default.svcNamespace:          defaultURL:                https://192.168.0.161:8443/applications/foo-appRepo:               https://github.com/trek10inc/exploring-gitops-with-argoTarget:Path:               part1/app1SyncWindow:         Sync AllowedSync Policy:        <none>Sync Status:        Synced to  (37b85c8)Health Status:      HealthyGROUP  KIND        NAMESPACE  NAME     STATUS  HEALTH   HOOK  MESSAGE       Service     default    foo-svc  Synced  Healthy        service/foo-svc createdapps   Deployment  default    foo-app  Synced  Healthy        deployment.apps/foo-app created—------argocd app logs foo-appwaiting 0Starting application serverWeb server is running on port 80waiting 0Starting application serverWeb server is running on port 80waiting 0Starting application serverWeb server is running on port 80—--argocd app history foo-appID  DATE                           REVISION0   2023-02-08 15:15:33 -0700 MST   (37b85c8)

dqE28资讯网——每日最新资讯28at.com

请注意,Argo CD 不会自动部署我们应用程序的最新提交版本。我们必须手动将本地系统状态与存储在存储库中的远程声明同步。由于利用 Argo CD 的全部目的是自动化部署过程,因此我们希望启用 Argo CD 所谓的“自动同步策略”。dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

当 Argo CD 检测到 Git 中所需的清单与集群中的实时状态之间的差异时,它能够自动同步应用程序。 dqE28资讯网——每日最新资讯28at.com

使用以下 CLI 命令启用我们的应用程序的自动同步:dqE28资讯网——每日最新资讯28at.com

argocd app set foo-app --sync-policy automated

你可以通过以下 URL 了解有关同步策略可以利用的附加功能的更多信息。dqE28资讯网——每日最新资讯28at.com

https://argocd.readthedocs.io/en/stable/user-guide/auto/_sync/dqE28资讯网——每日最新资讯28at.com

https://argocd.readthedocs.io/en/stable/user-guide/sync-options/dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

现在让我们访问我们通过部署“foo-app”应用程序创建的 NodePort 服务上运行的 Web 服务器。我们首先需要找到集群节点的 IP 地址以及“foo-svc”服务正在侦听的端口。dqE28资讯网——每日最新资讯28at.com

你可以通过以下 CLI 命令获取集群节点的 IP 地址:dqE28资讯网——每日最新资讯28at.com

kubectl get nodes -o json | jq -rM '.items[].status.addresses[] | select(.type == "InternalIP") | .address' | tee /tmp/nodes.txt

dqE28资讯网——每日最新资讯28at.com

你可以通过以下 CLI 命令获取“foo-svc”服务正在侦听的端口:dqE28资讯网——每日最新资讯28at.com

kubectl get svc foo-svc -o json | jq -rM '.spec.ports[].nodePort' | tee /tmp/port.txt

dqE28资讯网——每日最新资讯28at.com

有了这些信息,我们将向每个集群节点上的服务的顶端路由发出请求,以验证我们的应用程序是否正常运行。执行以下 CLI 命令来完成此操作。dqE28资讯网——每日最新资讯28at.com

PORT=$(cat /tmp/port.txt)cat /tmp/nodes.txt | while read IP; do curl http://${IP}:${PORT}; done

dqE28资讯网——每日最新资讯28at.com

你应该看到以下输出:dqE28资讯网——每日最新资讯28at.com

{ "version": "1.0.0" }{ "version": "1.0.0" }{ "version": "1.0.0" }{ "version": "1.0.0" }

dqE28资讯网——每日最新资讯28at.com

现在,我们将更改存储库中的清单之一,通过对“part1/app1/deployment.yaml”进行轻微编辑来强制更改系统状态。这是通过编辑“CONTENT”环境变量使其读取“1.0.1”然后提交更改来完成的。dqE28资讯网——每日最新资讯28at.com

name: foo-appenv:  - name: CONTENT    value: '{ "version": "1.0.1" }'

dqE28资讯网——每日最新资讯28at.com

短暂等待后,我们将看到我们的应用程序已自动更新。请注意,默认同步间隔设置为 3 分钟。dqE28资讯网——每日最新资讯28at.com

使用以下 CLI 命令查看“foo-app”应用程序的运行状况和同步状态。dqE28资讯网——每日最新资讯28at.com

argocd app get foo-app | grep Status

dqE28资讯网——每日最新资讯28at.com

你应该看到类似以下内容:dqE28资讯网——每日最新资讯28at.com

Sync Status:        Synced to  (5c8fe96)Health Status:      Healthy

dqE28资讯网——每日最新资讯28at.com

使用以下 CLI 命令查看“foo-app”应用程序的历史记录。dqE28资讯网——每日最新资讯28at.com

argocd app history foo-app

dqE28资讯网——每日最新资讯28at.com

这应该会产生如下所示的结果。提交 ID 将不同。dqE28资讯网——每日最新资讯28at.com

ID  DATE                           REVISION0   2023-02-08 15:15:33 -0700 MST   (37b85c8)1   2023-02-08 15:19:25 -0700 MST   (5c8fe96)

我们还可以在 Web UI 中查看“foo-app”应用程序的漂亮的图形展示。请注意健康同步状态、修订号和副本集。dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

图片图片dqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

知道应用程序已成功同步后,让我们再次向每个集群节点上的“foo-svc”服务发出请求。我们将重用之前的命令。dqE28资讯网——每日最新资讯28at.com

PORT=$(cat /tmp/port.txt)cat /tmp/nodes.txt | while read IP; do curl http://${IP}:${PORT}; done

这次我们应该看到以下内容。dqE28资讯网——每日最新资讯28at.com

{ "version": "1.0.1" }{ "version": "1.0.1" }{ "version": "1.0.1" }{ "version": "1.0.1" }

至此,我们使用称之为 Argo CD 的持续交付工具成功且安全地自动化了应用程序的部署!恭喜!dqE28资讯网——每日最新资讯28at.com

你可以通过执行以下 CLI 命令来删除 Argo CD 应用程序及其生成的所有资源。dqE28资讯网——每日最新资讯28at.com

argocd app delete foo-app

dqE28资讯网——每日最新资讯28at.com

Argo CD 是一个强大的持续交付解决方案,其功能远远超出了本文章中强调的功能。如果你觉得这篇文章很有趣并且打算在生产环境中使用 Argo CD,我强烈建议你访问以下链接以了解有关该工具丰富功能集的更多信息。dqE28资讯网——每日最新资讯28at.com

https://argocd.readthedocs.io/en/stable/dqE28资讯网——每日最新资讯28at.com

当你这样做时,查看他们的安全文档会对你更有帮助!dqE28资讯网——每日最新资讯28at.com

https://github.com/argoproj/argo-cd/blob/master/docs/operator-manual/security.mddqE28资讯网——每日最新资讯28at.com

dqE28资讯网——每日最新资讯28at.com

如有相关问题,请在文章后面给小编留言,小编安排作者第一时间和您联系,为您答疑解惑。dqE28资讯网——每日最新资讯28at.com

原文链接:dqE28资讯网——每日最新资讯28at.com

https://www.trek10.com/blog/exploring-gitops-with-argo-cddqE28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-90043-0.html使用 Argo CD 探索 GitOps,你学会了吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 我们忘记了前端基础知识

下一篇: RocketMQ 是什么?它的架构是怎么样的?和 Kafka 又有什么区别?

标签:
  • 热门焦点
  • 不容错过的MSBuild技巧,必备用法详解和实践指南

    一、MSBuild简介MSBuild是一种基于XML的构建引擎,用于在.NET Framework和.NET Core应用程序中自动化构建过程。它是Visual Studio的构建引擎,可在命令行或其他构建工具中使用
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    Tech星球(微信ID:tech618)文 | 陈桥辉 Tech星球独家获悉,拼多多在其APP内上线了&ldquo;本地生活&rdquo;入口,位置较深,位于首页的&ldquo;充值中心&rdquo;内,目前主要售卖美食相关的
  • 网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就&ldquo;胡锡进炒股是否知道认真报道&rdquo;展开讨论。有
  • 华为HarmonyOS 4升级计划公布:首批34款机型今日开启公测

    8月4日消息,今天下午华为正式发布了HarmonyOS 4系统,在更流畅的前提下,还带来了不少新功能,UI设计也有变化,会让手机焕然一新。华为宣布,首批机型将会在
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • 三星电子Q2营收60万亿韩元 存储业务营收同比仍下滑超过50%

    7月27日消息,据外媒报道,从三星电子所发布的财报来看,他们主要利润来源的存储芯片业务在今年二季度仍不乐观,营收同比仍在大幅下滑,所在的设备解决方案
  • 2299元起!iQOO Pad开启预售:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其搭载了天玑
  • 英特尔Xe HPG游戏显卡:拥有512EU,单风扇版本

    据10 月 30 日外媒 TheVerge 消息报道,英特尔 Xe HPG Arc Alchemist 的正面实被曝光,不仅拥有 512 EU 版显卡,还拥有 128EU 的单风扇版本。另外,这款显卡 PCB
Top