Argo CD

在这里插入图片描述

一、定义
Argo CD 是用于 Kubernetes 的声明式 GitOps 持续交付工具。
Argo CD 遵循GitOps模式,使用 Git 存储库作为定义所需应用程序状态的真实来源
Argo CD 被实现为一个 kubernetes 控制器,它持续监控正在运行的应用程序并将当前的实时状态与所需的目标状态(如 Git 存储库中指定的)进行比较。考虑了一个已部署的应用程序,其活动状态偏离目标状态OutOfSync。Argo CD 报告并可视化差异,同时提供自动或手动将实时状态同步回所需目标状态的工具。对 Git 存储库中所需目标状态所做的任何修改都可以自动应用并反映在指定的目标环境中。

二、Argo CD 架构
从功能架构来看,Argo CD 主要有三个组件:API Server、Repository Server 和 Application Controller。从 GitOps 工作流的角度来看,总共分为 3 个阶段:检索、调谐和呈现。
(1)检索 – Repository Server
检索阶段会克隆应用声明式配置清单所在的 Git 仓库,并将其缓存到本地存储。包含 Kubernetes 原生的配置清单、Helm Chart 以及 Kustomize 配置清单。履行这些职责的组件就是 Repository Server。
(2)调谐 – Application Controller
调谐(Reconcile)阶段是最复杂的,这个阶段会将 Repository Server 获得的配置清单与反映集群当前状态的实时配置清单进行对比,一旦检测到应用处于 OutOfSync 状态,Application Controller 就会采取修正措施,使集群的实际状态与期望状态保持一致。
(3)呈现 – API Server
最后一个阶段是呈现阶段,由 Argo CD 的 API Server 负责,它本质上是一个 gRPC/REST Server,提供了一个无状态的可视化界面,用于展示调谐阶段的结果。同时还提供了以下这些功能:
- 应用管理和状态报告;
- 调用与应用相关的操作(例如同步、回滚、以及用户自定义的操作);
- Git 仓库与集群凭证管理(以 Kubernetes Secret 的形式存储);
- 为外部身份验证组件提供身份验证和授权委托;
- RBAC 增强;
- Git Webhook 事件的监听器/转发器。
在这里插入图片描述

三、核心概念
假设熟悉核心 Git、Docker、Kubernetes、持续交付和 GitOps 概念。以下是一些特定于 Argo CD 的概念。

应用程序			清单定义的一组 Kubernetes 资源。这是自定义资源定义 (CRD)。
应用程序源类型	用于构建应用程序的工具。
目标状态			应用程序的期望状态,由 Git 存储库中的文件表示。
实时状态			该应用程序的实时状态。部署了哪些 pod 等。
同步状态			实时状态是否与目标状态匹配。部署的应用程序是否与 Git 所说的一样?
同步				使应用程序移动到其目标状态的过程。例如,通过将更改应用于 Kubernetes 集群。
同步操作状态		同步是否成功。
刷新				将 Git 中的最新代码与实时状态进行比较。弄清楚有什么不同。
Health			应用程序的健康状况,是否正常运行?它可以满足请求吗?
工具				从文件目录创建清单的工具。例如 Kustomize。请参阅应用程序源类型。
配置管理工具		请参阅工具。
配置管理插件		自定义工具。

三、部署(带UI界面)

[root@k8s-master ~]# kubectl create namespace argocd
[root@k8s-master ~]# kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
[root@k8s-master ~]# kubectl -n argocd get pod
NAME                                               READY   STATUS    RESTARTS   AGE
argocd-application-controller-0                    1/1     Running   0          4h33m
argocd-applicationset-controller-d7cbbcdc8-pb2wj   1/1     Running   0          4h33m
argocd-dex-server-6d7b7b6b4d-4xmbd                 1/1     Running   0          4h33m
argocd-notifications-controller-77546bbb87-57zm2   1/1     Running   0          4h33m
argocd-redis-98fbb98fc-47pqj                       1/1     Running   0          4h33m
argocd-repo-server-c45579b5d-vbjp6                 1/1     Running   0          4h33m
argocd-server-85cf95fd9b-gspzn                     1/1     Running   0          4h33m

四、访问 Argo CD
部署完成后,可以通过 Service argocd-server 来访问可视化界面。

[root@k8s-master ~]# kubectl -n argocd get service
NAME                                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
argocd-applicationset-controller          ClusterIP   10.107.222.224   <none>        7000/TCP,8080/TCP            4h33m
argocd-dex-server                         ClusterIP   10.106.111.12    <none>        5556/TCP,5557/TCP,5558/TCP   4h33m
argocd-metrics                            ClusterIP   10.108.142.245   <none>        8082/TCP                     4h33m
argocd-notifications-controller-metrics   ClusterIP   10.101.163.114   <none>        9001/TCP                     4h33m
argocd-redis                              ClusterIP   10.104.219.224   <none>        6379/TCP                     4h33m
argocd-repo-server                        ClusterIP   10.111.121.38    <none>        8081/TCP,8084/TCP            4h33m
argocd-server                             NodePort    10.109.42.42     <none>        80:31977/TCP,443:32617/TCP   4h33m			#修改service文件 以 NodePort 形式访问
argocd-server-metrics                     ClusterIP   10.98.218.217    <none>        8083/TCP                     4h33m

五、访问密码获取
初始密码以明文形式存储在 Secret argocd-initial-admin-secret 中,可以通过以下命令获取:

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

也可以通过以下命令来修改登录密码:

argocd account update-password --account admin --current-password xxxx --new-password xxxx

六、访问并登录默认账号
http://主机IP:31977
admin

七、示例应用
(1)git仓库目录结构

app-src/						#程序代码
	├── code-of-conduct.md
	├── yaml.go
	└── yaml_go110.go
app-config/						#清单配置
	└── deployment.yaml
	└── service.yaml
application.yaml				#放在仓库的根目录

#deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  selector:
    matchLabels:
      app: myapp
  replicas: 7
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: nginx:1.20
        ports:
        - containerPort: 80

#service.yaml

apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80

#application.yaml

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapp-argo-application
  namespace: argocd
spec:
  project: default

  source:
    repoURL: https://gitee.com/laolaoxu/argocd-lab.git
    targetRevision: HEAD
    path: app-config										#注意此处写清单配置的目录名称
  destination: 
    server: https://kubernetes.default.svc
    namespace: myapp

  syncPolicy:
    syncOptions:
    - CreateNamespace=true

    automated:
      selfHeal: true
      prune: true

参数解释:

syncPolicy : 指定自动同步策略和频率,不配置时需要手动触发同步。
syncOptions : 定义同步方式。
	CreateNamespace=true : 如果不存在这个 namespace,就会自动创建它。
automated : 检测到实际状态与期望状态不一致时,采取的同步措施。
	selfHeal : 当集群世纪状态不符合期望状态时,自动同步。
	prune : 自动同步时,删除 Git 中不存在的资源。

Argo CD 默认情况下每 3 分钟会检测 Git 仓库一次,用于判断应用实际状态是否和 Git 中声明的期望状态一致,如果不一致,状态就转换为 OutOfSync。默认情况下并不会触发更新,除非通过 syncPolicy 配置了自动同步。
如果嫌周期性同步太慢了,也可以通过设置 Webhook 来使 Git 仓库更新时立即触发同步。

(2)argocd的UI界面配置,添加应用程序
(3)点击“sync”进行同步配置

  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值