体验 Argo CD

体验 Argo CD

  • Argo CD 是什么
  • Argo CD 核心概念
    • Application
    • Project
  • Argo CD 架构
  • 安装 Argo CD CLI
  • 部署应用
  • 使用用户界面检查应用程序

Argo CD 是什么

Argo CD 是一款针对 Kubernetes 的开源 GitOps Operator,它是 Argo 家族中的一员。Argo CD 专注于应用程序交付的使用场景。在 2020 年,Argo CD 被云原生计算基金会(CNCF)接纳为孵化级托管项目,现在已经是毕业项目。

Argo CD 核心概念

为了有效使用 Argo CD,我们应该了解两个基本概念:应用(Application)和项目(Project)。

Application

Application 提供了 Kubernetes 资源的逻辑分组,并定义了资源清单的源和目标。
体验 Argo CD_第1张图片
Application 的源包括仓库 URL 和仓库种的目录。仓库通常包括多个目录,每个应用程序环境可能会有一个(例如 QA 和 Prod)。
目录不一定包含纯 YAML 文件。Argo CD 不捆绑任何配置管理工具,反倒是为多种配置管理工具提供优秀的支持。因此,该目录可能不但包含一个 Helm Chart 的定义,还有由 Kustomize 覆盖处理的 YAML 文件。
Application 目标(destination)定义了资源需要部署的位置,包括目标 Kubernetes 集群的 API 服务器 URL 以及集群内命名空间的名称。命名空间的名称用于标识应用程序资源的目标命名空间。

Project

Argo CD 引入了 Project 这一抽象,一支撑不同访问级别的多个团队。
Project 提供了 Application 的逻辑分组,,将团队间彼此隔离,支持每个 Project 中访问控制的细粒度调整。

体验 Argo CD_第2张图片
除了分离应用集之外,Project 还提供了以下功能集:

  • 约束 Project 里的 Application 可以使用哪些 Kubernetes 集群和 Git 仓库
  • 约束 Project 里的 Application 可以部署哪些 Kubernetes 资源

Argo CD 架构

Argo CD 由实现 GitOps 协商周期阶段的三个主要组件组成:argocd-repo-server 从 Git 中检索清单;argocd-application-contrller 将来自 Git 的清单与 Kubernetes 集群中的资源进行比较; argocd-api-server 向用户呈现协商结果。

体验 Argo CD_第3张图片

安装 Argo CD CLI

执行下面命令安装 Argo CD CLI,

curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64

执行下面命令进行登录,

argocd login argocd.default.172.18.0.231.nip.io
Username: admin
Password:

'admin:login' logged in successfully

部署应用

Argo CD 一旦成功运行,就可以部署第一个第一个应用程序。
要部署 Argo CD 应用程序,我们需要指定包含部署清单的 Git 仓库,并以 Kubernetes 集群和命名空间作为目标。
要以该练习创建 Git 仓库,请打开以下 Github 仓库并创建一个仓库复刻(Fork),

https://github.com/engchina/sample-app-deployment

由于我们已经安装并配置了 Argo CD CLI,那就使用它来部署应用程序。
继续并执行以下命令来创建一个应用程序:

argocd app create sample-app \
--repo https://github.com/engchina/sample-app-deployment \
--path . \
--dest-server https://kubernetes.default.svc \
--dest-namespace default

执行下面命令获取 sample-app 应用的状态信息,

argocd app get sample-app --grpc-web

输出示例,

Name:               argocd/sample-app
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          default
URL:                https://argocd.default.172.18.0.231.nip.io/applications/sample-app
Repo:               https://github.com/engchina/sample-app-deployment
Target:
Path:               .
SyncWindow:         Sync Allowed
Sync Policy:        
Sync Status:        OutOfSync from  (a301fbe)
Health Status:      Missing

GROUP  KIND        NAMESPACE  NAME        STATUS     HEALTH   HOOK  MESSAGE
       Service     default    sample-app  OutOfSync  Missing
apps   Deployment  default    sample-app  OutOfSync  Missing

在命令的输出中我们可以看到,应用程序不同步且不健康。
对于资源的部署,我们可以使用同步策略配置自动化的应用程序同步,也可以是手动触发同步。
执行下面命令触发同步并部署资源,

argocd app sync sample-app --grpc-web

输出示例,

TIMESTAMP                  GROUP        KIND   NAMESPACE                  NAME    STATUS    HEALTH        HOOK  MESSAGE
2023-03-17T10:58:27+08:00            Service     default            sample-app  OutOfSync  Missing
2023-03-17T10:58:27+08:00   apps  Deployment     default            sample-app  OutOfSync  Missing
2023-03-17T10:58:28+08:00            Service     default            sample-app    Synced  Healthy
2023-03-17T10:58:28+08:00            Service     default            sample-app    Synced   Healthy              service/sample-app created
2023-03-17T10:58:28+08:00   apps  Deployment     default            sample-app  OutOfSync  Missing              deployment.apps/sample-app created
2023-03-17T10:58:28+08:00   apps  Deployment     default            sample-app    Synced  Progressing              deployment.apps/sample-app created

Name:               argocd/sample-app
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          default
URL:                https://argocd.default.172.18.0.231.nip.io/applications/sample-app
Repo:               https://github.com/engchina/sample-app-deployment
Target:
Path:               .
SyncWindow:         Sync Allowed
Sync Policy:        
Sync Status:        Synced to  (a301fbe)
Health Status:      Progressing

Operation:          Sync
Sync Revision:      a301fbe40e35f908800e0e39567d245f8ca1d9b3
Phase:              Succeeded
Start:              2023-03-17 10:58:27 +0800 CST
Finished:           2023-03-17 10:58:28 +0800 CST
Duration:           1s
Message:            successfully synced (all tasks run)

GROUP  KIND        NAMESPACE  NAME        STATUS  HEALTH       HOOK  MESSAGE
       Service     default    sample-app  Synced  Healthy            service/sample-app created
apps   Deployment  default    sample-app  Synced  Progressing        deployment.apps/sample-app created

一旦触发同步,Argo CD 将存储在 Git 中的清单推送到 Kubernetes 集群,然后重新评估应用程序的状态。同步完成后,最终的应用程序状态将输出到控制台。
再次执行下面命令获取 sample-app 应用的状态信息,

Name:               argocd/sample-app
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          default
URL:                https://argocd.default.172.18.0.231.nip.io/applications/sample-app
Repo:               https://github.com/engchina/sample-app-deployment
Target:
Path:               .
SyncWindow:         Sync Allowed
Sync Policy:        
Sync Status:        Synced to  (a301fbe)
Health Status:      Healthy

GROUP  KIND        NAMESPACE  NAME        STATUS  HEALTH   HOOK  MESSAGE
       Service     default    sample-app  Synced  Healthy        service/sample-app created
apps   Deployment  default    sample-app  Synced  Healthy        deployment.apps/sample-app created

可以看到示例应用程序已成功同步,并且每个结果都与预期状态匹配。

使用用户界面检查应用程序

Argo CD 提供了一个用户友好的 Web 界面。使用 Web 界面,你可以获得跨多个集群部署的所用应用程序的高级视图,以及有关每个应用程序资源非常详细的信息。
应用列表页面提供所用已部署应用程序相关的高级信息,包括运行状态和同步状态。使用此页面,你可以快速发现任何应用程序是否已降级或存在配置偏差。用户界面专为大型企业设计,能够处理数百个应用程序。你可以使用搜索和各种过滤器快速找到所需的应用程序。
体验 Argo CD_第4张图片
应用详情页面将应用程序的资源层次化结构可视化,并提供有关同步状态和健康状态的其他详细信息。
资源树的根元素是应用本身,第二个层次由托管资源组成。托管资源是在 Git 中清单定义的资源,并由 Argo CD 显示地控制。
体验 Argo CD_第5张图片完结!

你可能感兴趣的:(Kubernetes,kubernetes,docker,运维)