Argocd入门

概念

ArgoCD 是一个基于 GitOps 的持续交付(CD)工具,专门用于 Kubernetes 环境。它通过使用 Git 仓库作为应用程序的 "源代码真相",自动化应用的部署和管理。

以下是 ArgoCD 的一些关键特性:

GitOps 模型:ArgoCD 遵循 GitOps 原则,将基础设施和应用程序的期望状态存储在 Git 仓库中。任何对 Git 仓库的变更都会自动触发部署。

声明式配置:ArgoCD 支持通过 Helm Charts、Kustomize 文件或直接的 YAML 清单定义 Kubernetes 应用程序。它会持续监控 Git 仓库和 Kubernetes 集群中的运行应用,确保两者状态一致。

同步与回滚:ArgoCD 会同步 Kubernetes 集群中的应用状态与 Git 仓库中的期望状态。如果发生不一致,它可以自动或手动进行修复,并支持快速回滚到以前的版本。

多集群管理:可以同时管理多个 Kubernetes 集群的应用部署,使得跨集群的应用管理更加简便。

自定义健康检查与自动部署:根据定义的健康检查标准自动检测应用是否正常运行,并进行自动部署和更新。

ArgoCD 是 GitOps 和 Kubernetes 环境中常用的自动化工具,适合用于 DevOps 团队来提高交付效率。

简单示例

下面是一个使用 ArgoCD 的简单示例,展示如何通过 ArgoCD 实现 GitOps 流程来自动化 Kubernetes 应用的部署。

步骤 1: 安装 ArgoCD

首先需要在 Kubernetes 集群中安装 ArgoCD。你可以使用以下命令安装:

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

安装完成后,你可以使用 kubectl 来暴露 ArgoCD 的 API 服务,方便你访问 ArgoCD 的 Web UI:

kubectl port-forward svc/argocd-server -n argocd 8080:443

然后你可以通过浏览器访问 https://localhost:8080 来登录 ArgoCD。

步骤 2: 登录 ArgoCD

获取 ArgoCD 的初始密码(默认是 argocd-server 服务的 admin 用户):

kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d

使用该密码和 admin 用户登录 ArgoCD Web UI。

步骤 3: 创建一个 Git 仓库用于存储 Kubernetes 配置

在 GitHub(或其他 Git 托管平台)上创建一个 Git 仓库,存储你的 Kubernetes 资源配置文件,比如 deployment.yamlservice.yaml 等。

例如,创建一个简单的 Nginx Deployment 和 Service:

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.19.0
        ports:
        - containerPort: 80
---
# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: LoadBalancer

将这些文件推送到 Git 仓库中。

步骤 4: 配置 ArgoCD 应用

在 ArgoCD 中创建一个应用程序,将它与 Git 仓库关联。可以通过命令行或 ArgoCD Web UI 完成。

通过命令行创建应用:

argocd app create nginx-app \
    --repo https://github.com/your-user/your-repo.git \
    --path . \
    --dest-server https://kubernetes.default.svc \
    --dest-namespace default

通过 Web UI 创建应用:

  1. 登录到 ArgoCD Web UI。
  2. 点击“新建应用”(New App)。
  3. 填写应用的名称,如 nginx-app
  4. 配置 Git 仓库 URL,选择存放 Kubernetes 配置的路径。
  5. 设置目标集群和命名空间。

步骤 5: 同步应用

创建应用后,ArgoCD 将监控 Git 仓库中的变化。你可以手动同步,也可以启用自动同步。

通过命令行手动同步:

argocd app sync nginx-app

或者在 Web UI 上点击 "Sync" 按钮进行同步。

步骤 6: 检查部署状态

你可以通过 ArgoCD Web UI 查看应用的健康状态、资源详情以及同步情况。如果 Git 仓库中的配置发生更改,ArgoCD 会自动识别,并同步集群中的资源以匹配 Git 中的状态。

argocd app get nginx-app

通过以上步骤,ArgoCD 将自动从 Git 仓库中拉取 Kubernetes 配置文件,并在集群中进行部署和管理。这展示了 GitOps 的核心思想:将所有操作通过 Git 进行版本控制和管理,确保集群的实际状态与声明的状态保持一致。

CD配合哪些CI来完成

在 ArgoCD 中,确实只负责 持续交付 (CD) 的部分,而不包含 持续集成 (CI) 的功能。对于 CI 部分,通常会结合其他工具来完成。常见的组合方式如下:

1. Jenkins + ArgoCD

  • Jenkins 用于 持续集成 (CI),负责从代码库中拉取代码,执行代码编译、构建、单元测试等任务,生成容器镜像,并将镜像推送到容器镜像仓库。
  • ArgoCD 从 Git 仓库中拉取 Kubernetes 配置文件,然后将这些文件应用到 Kubernetes 集群,实现 持续交付 (CD)
  • 这种组合方式较为常见,因为 Jenkins 强大的 CI 流水线功能和 ArgoCD 的 GitOps CD 模式互补。

2. GitLab CI + ArgoCD

  • GitLab CI 提供内置的 CI/CD 功能。你可以使用 GitLab CI 执行代码编译、测试和构建容器镜像,然后推送到 Docker Registry(如 Docker Hub 或 GitLab Container Registry)。
  • 接着,ArgoCD 负责持续监控 Git 仓库中的 Kubernetes 部署配置文件(如 Helm chart 或 Kustomize),并将其同步到 Kubernetes 集群,完成 CD 部分。

3. CircleCI + ArgoCD

  • CircleCI 是一个流行的持续集成服务,主要用于自动化代码测试和构建流程。它可以用于执行 CI 阶段,生成 Docker 镜像,并推送到容器仓库。
  • ArgoCD 可以接管 CD 部分,自动监控和更新 Kubernetes 集群。

4. Tekton + ArgoCD

  • Tekton 是一个 Kubernetes 原生的 CI 工具,它可以在 Kubernetes 上运行 CI 流水线任务。你可以用 Tekton 来处理代码编译、测试和容器镜像的构建任务。
  • 然后使用 ArgoCD 来处理镜像更新和部署,保持 GitOps 模型的 CD 流程。

5. Drone CI + ArgoCD

  • Drone CI 是一个基于容器的 CI 工具,轻量且易于集成。它同样可以用于代码构建、测试和生成 Docker 镜像。
  • ArgoCD 可以与 Drone 配合,完成镜像部署到 Kubernetes 集群的持续交付。

CI 和 CD 的分工

在现代 CI/CD 流程中,通常是通过专门的 CI 工具来完成代码的构建、测试、镜像创建等任务,而 CD 工具负责将构建结果(如容器镜像)自动部署到目标环境中。

  1. CI 工具:负责代码的集成,包括编译、单元测试、集成测试、生成 Docker 镜像并推送到镜像仓库。

    • 常用工具:Jenkins、GitLab CI、CircleCI、Drone、Tekton 等。
  2. ArgoCD:持续监控 Git 仓库中的 Kubernetes 配置,并将更新部署到 Kubernetes 集群中。

这种工具组合的方式让 CI/CD 流程更加模块化和灵活,ArgoCD 可以与不同的 CI 工具配合,从而实现高效的自动化交付流程。

posted @ 2024-09-19 10:16  jasmine456  阅读(57)  评论(0编辑  收藏  举报