Argo CD 入门

Argo CD 是一个简单的基于拉取的 GitOps 部署工具,可将 Kubernetes 清单文件与集群同步,以实现简单、务实的部署。
81 位读者喜欢这个。
Plumbing tubes in many directions

在典型的基于推送的部署中,Ansible 和 Jenkins 等工具直接连接到服务器或集群并执行配置命令。当集群可在网络上访问并且部署服务器和目标服务器之间存在直接连接时,此方法效果良好。出于合规性或安全原因,部署工具和集群之间的连接可能不可行。

Argo CD 是一个基于拉取的部署工具。它监视远程 Git 存储库中新的或更新的清单文件,并将这些更改与集群同步。通过在 Git 中管理清单并将其与集群同步,您可以获得基于 Git 的工作流的所有优势(版本控制、拉取请求审查、协作透明度等)以及 Git 仓库中的内容与集群中部署的内容之间的一对一映射。此方法称为 GitOps。

在本教程中,您将

  1. 在 Minikube 安装上安装 Argo CD
  2. 创建名为 ayush-test-application 的示例 Argo CD 应用程序,并将其与 我的仓库 ayush-sharma/example-assets 链接
  3. 创建具有三个副本的 Nginx 部署
  4. 确保新应用程序显示在 Argo CD 仪表板上,并使用 kubectl 进行验证

安装 Argo CD

本教程使用 Minikube 版本 v1.21.0。如果您没有,请下载并安装 Minikube

在 Minikube 启动并运行后,您可以安装 Argo CD。Argo CD 文档包含有关如何为任何集群安装和配置它的详细步骤。执行这些步骤后,在单独的终端窗口中运行 minikube tunnel,以确保 Minikube 在本地系统上公开 Argo CD 服务器的负载均衡器端点。要验证这一点,请运行 kubectl get po -n argocd 并检查 argo-server 服务是否具有 EXTERNAL-IP:

user@system ~ kubectl get svc -n argocd
NAME                    TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
argocd-dex-server       ClusterIP      10.110.2.52     <none>          5556/TCP,5557/TCP,5558/TCP   3h32m
argocd-metrics          ClusterIP      10.100.73.57    <none>          8082/TCP                     3h32m
argocd-redis            ClusterIP      10.104.11.24    <none>          6379/TCP                     3h32m
argocd-repo-server      ClusterIP      10.100.132.53   <none>          8081/TCP,8084/TCP            3h32m
argocd-server           LoadBalancer   10.98.182.198   10.98.182.198   80:32746/TCP,443:31353/TCP   3h32m
argocd-server-metrics   ClusterIP      10.105.182.52   <none>          8083/TCP                     3h32m

安装完成后并且负载均衡器工作正常,Argo CD 用户界面 (UI) 将可在 EXTERNAL IP 访问。

创建您的第一个应用程序

在讨论 Argo CD 部署之前,您需要一个带有 Kubernetes (k8s) 清单文件的 Git 仓库,以便进行部署。我正在使用我的公共仓库 example-assets,其中包含 Nginx 部署清单文件,位于 /argocd/getting-started

目标是让 Argo CD 监听 k8s 清单文件的更改,然后将其与部署它的集群(在本例中为 Minikube)同步。您可以通过创建一个包含有关清单文件的源仓库、目标集群详细信息和同步策略的应用程序来完成此操作。

单击左上角的 New App 以配置新应用程序。由于我的目标 Kubernetes 服务器是安装 Argo CD 的服务器 (Minikube),因此我将服务器默认设置保持不变。以下是我配置的值

  1. 应用程序名称:ayush-test-application
  2. 项目:default
  3. 同步策略:automated
  4. 同步选项:prune: true; selfHeal: true
  5. 源仓库 URL:https://gitlab.com/ayush-sharma/example-assets.git
  6. 源修订版本:HEAD
  7. 源路径:argocd/getting-started
  8. 目标集群 URL:https://kubernetes.default.svc
  9. 目标命名空间:default

为了简化操作,您可以单击右上角的 EDIT AS YAML 并粘贴到

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: ayush-test-application
spec:
  destination:
    name: 'default'
    namespace: default
    server: 'https://kubernetes.default.svc'
  source:
    path: argocd/getting-started
    repoURL: 'https://gitlab.com/ayush-sharma/example-assets.git'
    targetRevision: HEAD
  project: default
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

您的配置应如下所示

保存配置后,您的应用程序应以卡片形式显示在主页上。由于您将同步策略指定为 Automated,因此您的新应用程序将立即开始与仓库同步。

创建 Nginx 部署

在本教程中,清单文件是一个标准的 Nginx 部署,带有三个副本。一旦 ayush-test-application 完成同步,Argo CD 将显示部署的精美图形视图。

使用 kubectl get po 验证部署

NAME                               READY   STATUS    RESTARTS   AGE
nginx-deployment-585449566-584cj   1/1     Running   0          5m
nginx-deployment-585449566-6qn2z   1/1     Running   0          5m
nginx-deployment-585449566-d9fm2   1/1     Running   0          5m

Argo CD 的优势

Argo CD 是一种相对轻量级的 k8s 部署方法。我特别喜欢仓库中的内容与集群中的内容之间的一对一关系,这使得事件管理变得更加简单。

另一个很大的优势是,由于 Git 仓库包含 Argo CD 所需的一切内容,您可以删除整个 Argo CD 安装并从头开始设置。这意味着,在发生灾难性中断的情况下,现在可以更可行和更实际地启动第二个相同的集群并部署您的整个工作负载。

第三个很大的优势是开放端口更少。Argo CD 从远程 Git 仓库拉取更改,因此无需定义防火墙规则和虚拟私有云 (VPC) 对等连接来使您的部署服务器与您的集群连接,这减少了一个入口点。这大大减少了您的开发、质量保证 (QA) 和生产服务器的攻击面。

由于 Git 仓库和分支名称是可配置的,因此您可以在部署模型方面发挥创意。例如,您可以让两个不同的 Argo CD 在两个不同的 QA 和生产集群上运行,并监听同一仓库的分支。这保证了相同的清单文件部署在两个集群上,确保 QA 和生产环境包含相同的代码库。此外,单个 Argo CD 能够定位多个服务器,这意味着可以实现中心辐射型部署模型,其中一个主 Argo CD 协调跨不同区域或环境中的多个开发、QA 和生产集群的部署。

尽情发挥 Argo CD 的创意,不要忘记与他人分享您的实验。


本文最初发表在 Ayush Sharma 的博客上,根据 CC BY-SA 4.0 许可发布。

接下来阅读什么
标签
https://ayushsharma.in
我是一名作家和 AWS 解决方案架构师。我与初创公司和企业合作进行软件工程、DevOps、SRE 和云架构方面的工作。我在 https://ayushsharma.in 上撰写关于我的经验的文章。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可获得许可。
© . All rights reserved.