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.yaml
、service.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 创建应用:
- 登录到 ArgoCD Web UI。
- 点击“新建应用”(New App)。
- 填写应用的名称,如
nginx-app
。 - 配置 Git 仓库 URL,选择存放 Kubernetes 配置的路径。
- 设置目标集群和命名空间。
步骤 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 工具负责将构建结果(如容器镜像)自动部署到目标环境中。
-
CI 工具:负责代码的集成,包括编译、单元测试、集成测试、生成 Docker 镜像并推送到镜像仓库。
- 常用工具:Jenkins、GitLab CI、CircleCI、Drone、Tekton 等。
-
ArgoCD:持续监控 Git 仓库中的 Kubernetes 配置,并将更新部署到 Kubernetes 集群中。
这种工具组合的方式让 CI/CD 流程更加模块化和灵活,ArgoCD 可以与不同的 CI 工具配合,从而实现高效的自动化交付流程。