首页 > 其他分享 >Argo CD

Argo CD

时间:2023-08-10 17:33:28浏览次数:45  
标签:k8s created argocd server io Argo CD

Argo CD 服务

什么是 Argo CD

Argo CD 是一个为 Kubernetes 而生的,遵循声明式 GitOps 理念的持续部署工具。Argo CD 可在 Git 存储库更改时自动同步和部署应用程序

如何工作

Argo CD 遵循 GitOps 模式,使用 Git 仓库作为定义所需应用程序状态的真实来源,Argo CD 支持多种 Kubernetes 清单:

  • kustomize
  • helm charts
  • ksonnet applications
  • jsonnet files
  • Plain directory of YAML/json manifests
  • Any custom config management tool configured as a config management plugin

Argo CD 可在指定的目标环境中自动部署所需的应用程序状态,应用程序部署可以在 Git 提交时跟踪对分支、标签的更新,或固定到清单的指定版本。

架构

ArgoCD架构

Argo CD 是通过一个 Kubernetes 控制器来实现的,它持续 watch 正在运行的应用程序并将当前的实时状态与所需的目标状态( Git 存储库中指定的)进行比较。已经部署的应用程序的实际状态与目标状态有差异,则被认为是 OutOfSync 状态,Argo CD 会报告显示这些差异,同时提供工具来自动或手动将状态同步到期望的目标状态。在 Git 仓库中对期望目标状态所做的任何修改都可以自动应用反馈到指定的目标环境中去。

Argo CD 中的主要组件

API 服务:API 服务是一个 gRPC/REST 服务,它暴露了 Web UI、CLI 和 CI/CD 系统使用的接口,主要有以下几个功能:

  • 应用程序管理和状态报告
  • 执行应用程序操作(例如同步、回滚、用户定义的操作)
  • 存储仓库和集群凭据管理(存储为 K8S Secrets 对象)
  • 认证和授权给外部身份提供者
  • RBAC
  • Git webhook 事件的侦听器/转发器

仓库服务:存储仓库服务是一个内部服务,负责维护保存应用程序清单 Git 仓库的本地缓存。当提供以下输入时,它负责生成并返回 Kubernetes 清单:

  • 存储 URL
  • revision 版本(commit、tag、branch)
  • 应用路径
  • 模板配置:参数、ksonnet 环境、helm values.yaml 等

应用控制器:应用控制器是一个 Kubernetes 控制器,它持续 watch 正在运行的应用程序并将当前的实时状态与所期望的目标状态( repo 中指定的)进行比较。它检测应用程序的 OutOfSync 状态,并采取一些措施来同步状态,它负责调用任何用户定义的生命周期事件的钩子(PreSync、Sync、PostSync)。

功能

  • 自动部署应用程序到指定的目标环境
  • 支持多种配置管理/模板工具(Kustomize、Helm、Ksonnet、Jsonnet、plain-YAML)
  • 能够管理和部署到多个集群
  • SSO 集成(OIDC、OAuth2、LDAP、SAML 2.0、GitHub、GitLab、Microsoft、LinkedIn)
  • 用于授权的多租户和 RBAC 策略
  • 回滚/随时回滚到 Git 存储库中提交的任何应用配置
  • 应用资源的健康状况分析
  • 自动配置检测和可视化
  • 自动或手动将应用程序同步到所需状态
  • 提供应用程序活动实时视图的 Web UI
  • 用于自动化和 CI 集成的 CLI
  • Webhook 集成(GitHub、BitBucket、GitLab)
  • 用于自动化的 AccessTokens
  • PreSync、Sync、PostSync Hooks,以支持复杂的应用程序部署(例如蓝/绿和金丝雀发布)
  • 应用程序事件和 API 调用的审计
  • Prometheus 监控指标
  • 用于覆盖 Git 中的 ksonnet/helm 参数

核心概念

  • Application:应用,一组由资源清单定义的 Kubernetes 资源,这是一个 CRD 资源对象
  • Application source type:用来构建应用的工具
  • Target state:目标状态,指应用程序所需的期望状态,由 Git 存储库中的文件表示
  • Live state:实时状态,指应用程序实时的状态,比如部署了哪些 Pods 等真实状态
  • Sync status:同步状态表示实时状态是否与目标状态一致,部署的应用是否与 Git 所描述的一样?
  • Sync:同步指将应用程序迁移到其目标状态的过程,比如通过对 Kubernetes 集群应用变更
  • Sync operation status:同步操作状态指的是同步是否成功
  • Refresh:刷新是指将 Git 中的最新代码与实时状态进行比较,弄清楚有什么不同
  • Health:应用程序的健康状况,它是否正常运行?能否为请求提供服务?
  • Tool:工具指从文件目录创建清单的工具,例如 Kustomize 或 Ksonnet 等
  • Configuration management tool:配置管理工具
  • Configuration management plugin:配置管理插件

安装 Argo CD

要求

  • kubernetes 集群
  • 一个 kubectl 可访问的 Kubernetes 的集群

Argo CD 安装类型

Argo CD 还提供两种类型的安装清单

  • 非高可用清单: 用于演示和测试

    • install.yaml: 在默认的 ns 中部署,在一个集群部署仅部署一个 argodb 应用
    • namespaces-install.yaml: 在不同的 ns 中部署,在一个集群中部署多个 argocd 应用
  • 高可用清单: 建议在生产环境中使用高可用性安装

    • ha/install.yaml - 与 install.yaml 相同,但具有受支持组件的多个副本。
    • ha/namespace-install.yaml - 与 namespace-install.yaml 相同,但具有受支持组件的多个副本。

安装服务

使用版本 v2.7.10

https://github.com/argoproj/argo-cd/tree/v2.7.10/manifests

[root@node argocd]# kubectl create namespace argocd
[root@node argocd]# kubectl apply -n argocd -f https://ghproxy.com/https://raw.githubusercontent.com/argoproj/argo-cd/v2.7.10/manifests/install.yaml

安装创建的资源信息

# CRD
customresourcedefinition.apiextensions.k8s.io/applications.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/applicationsets.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/appprojects.argoproj.io created

# ServiceAccount
serviceaccount/argocd-application-controller created
serviceaccount/argocd-applicationset-controller created
serviceaccount/argocd-dex-server created
serviceaccount/argocd-notifications-controller created
serviceaccount/argocd-redis created
serviceaccount/argocd-repo-server created
serviceaccount/argocd-server created

# RBAC: Role ClusterRole RoleBinding ClusterRoleBinding
role.rbac.authorization.k8s.io/argocd-application-controller created
role.rbac.authorization.k8s.io/argocd-applicationset-controller created
role.rbac.authorization.k8s.io/argocd-dex-server created
role.rbac.authorization.k8s.io/argocd-notifications-controller created
role.rbac.authorization.k8s.io/argocd-server created
clusterrole.rbac.authorization.k8s.io/argocd-application-controller created
clusterrole.rbac.authorization.k8s.io/argocd-server created
rolebinding.rbac.authorization.k8s.io/argocd-application-controller created
rolebinding.rbac.authorization.k8s.io/argocd-applicationset-controller created
rolebinding.rbac.authorization.k8s.io/argocd-dex-server created
rolebinding.rbac.authorization.k8s.io/argocd-notifications-controller created
rolebinding.rbac.authorization.k8s.io/argocd-redis created
rolebinding.rbac.authorization.k8s.io/argocd-server created
clusterrolebinding.rbac.authorization.k8s.io/argocd-application-controller created
clusterrolebinding.rbac.authorization.k8s.io/argocd-server created

# ConfigMap
configmap/argocd-cm created
configmap/argocd-cmd-params-cm created
configmap/argocd-gpg-keys-cm created
configmap/argocd-notifications-cm created
configmap/argocd-rbac-cm created
configmap/argocd-ssh-known-hosts-cm created
configmap/argocd-tls-certs-cm created

# Secret
secret/argocd-notifications-secret created
secret/argocd-secret created

# Service
service/argocd-applicationset-controller created
service/argocd-dex-server created
service/argocd-metrics created
service/argocd-notifications-controller-metrics created
service/argocd-redis created
service/argocd-repo-server created
service/argocd-server created
service/argocd-server-metrics created

# Deployment
deployment.apps/argocd-applicationset-controller created
deployment.apps/argocd-dex-server created
deployment.apps/argocd-notifications-controller created
deployment.apps/argocd-redis created
deployment.apps/argocd-repo-server created
deployment.apps/argocd-server created

# StatefulSet
statefulset.apps/argocd-application-controller created

# NetworkPolicy
networkpolicy.networking.k8s.io/argocd-application-controller-network-policy created
networkpolicy.networking.k8s.io/argocd-applicationset-controller-network-policy created
networkpolicy.networking.k8s.io/argocd-dex-server-network-policy created
networkpolicy.networking.k8s.io/argocd-notifications-controller-network-policy created
networkpolicy.networking.k8s.io/argocd-redis-network-policy created
networkpolicy.networking.k8s.io/argocd-repo-server-network-policy created
networkpolicy.networking.k8s.io/argocd-server-network-policy created

查看 Argo CD 服务

[root@node argocd]# kubectl -n argocd get pods
NAME                                                READY   STATUS    RESTARTS   AGE
argocd-application-controller-0                     1/1     Running   0          2m42s
argocd-applicationset-controller-57bbb6bcdf-kgzmk   1/1     Running   0          2m43s
argocd-dex-server-7fd667d566-m94wr                  1/1     Running   0          2m43s
argocd-notifications-controller-ccd6b9d56-dlsmx     1/1     Running   0          2m43s
argocd-redis-74f98b85f-j5fp2                        1/1     Running   0          2m43s
argocd-repo-server-b55c54f9b-vj6t8                  1/1     Running   0          2m43s
argocd-server-7b5cb98999-cw4b7                      1/1     Running   0          2m42s

创建 ingress 访问 web 界面

此处依赖 traefik ,或者也可以安装 nginx ingressargocd ingress 配置官网文档:https://argo-cd.readthedocs.io/en/stable/operator-manual/ingress/#ingressroute-crd

[root@node argocd]# cat traefik.yaml 
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: argocd-server
  namespace: argocd
spec:
  entryPoints:
    - websecure
  routes:
    - kind: Rule
      match: Host(`argocd.evescn.com`)
      priority: 10
      services:
        - name: argocd-server
          port: 80
    - kind: Rule
      match: Host(`argocd.evescn.com`) && Headers(`Content-Type`, `application/grpc`)
      priority: 11
      services:
        - name: argocd-server
          port: 80
          scheme: h2c
  tls:
    certResolver: default

访问服务出现 url 307 问题,详细的查看这个文章:https://devpress.csdn.net/k8s/62fff4557e6682346619531a.html

307 问题解决方法

[root@node argocd]# wget https://ghproxy.com/https://raw.githubusercontent.com/argoproj/argo-cd/v2.7.10/manifests/install.yaml


# 这个文中找到 ConfigMapargocd-cmd-params-cm 更改的配置
# 官方文档也有说明(如果没有提供 ssl 证书):https://devpress.csdn.net/k8s/62fff4557e6682346619531a.html
# The API server should be run with TLS disabled. Edit the argocd-server deployment to add the --insecure flag to the argocd-server command, or simply set server.insecure: "true" in the argocd-cmd-params-cm ConfigMap as described here.

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cmd-params-cm
data:
  server.insecure: "true"

[root@node argocd]# kubeclt -n argocd delete -f install.yaml
[root@node argocd]# kubeclt -n argocd apply -f install.yaml

访问 web

默认情况下 admin 帐号的初始密码是自动生成的,会以明文的形式存储在 Argo CD 安装的命名空间中名为 argocd-initial-admin-secret 的 Secret 对象下的 password 字段下,我们可以用下面的命令来获取:

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

使用用户名 admin 和上面输出的密码即可登录 Dashboard。

安装 cli 命令行工具

下载连接:

  • 从 web 界面获取地址

https://argocd.evescn.com:20443/download/argocd-linux-amd64

  • 从文档中获取的地址

https://github.com/argoproj/argo-cd/releases/latest

安装 cli

[root@node argocd]# wget https://argocd.evescn.com/download/argocd-linux-amd64 --no-check-certificate

[root@node argocd]# chmod a+x argocd-linux-amd64 && mv argocd-linux-amd64 /usr/local/bin/argocd

[root@node argocd]# argocd version
argocd: v2.7.10+469f257.dirty
  BuildDate: 2023-07-31T22:05:17Z
  GitCommit: 469f25753b2be7ef0905a11632a6382060bcae99
  GitTreeState: dirty
  GoVersion: go1.19.10
  Compiler: gc
  Platform: linux/amd64
FATA[0000] Argo CD server address unspecified   

通过 ArgoCD CLI 命令行工具进行登录:

[root@node argocd]# argocd login argocd.evescn.com:20080 --insecure 
Username: admin
Password: 
'admin:login' logged in successfully
Context 'argocd.evescn.com' updated

需要注意的是这里登录的地址为 gRPC 暴露的服务地址。

CLI 登录成功后,可以使用如下所示命令更改密码:

[root@node ~]# argocd account update-password
*** Enter password of currently logged in user (admin): 
*** Enter new password for user admin: 
*** Confirm new password for user admin: 
Password updated
Context 'argocd.evescn.com' updated
[root@node ~]# argocd version
argocd: v2.7.10+469f257.dirty
  BuildDate: 2023-07-31T22:05:17Z
  GitCommit: 469f25753b2be7ef0905a11632a6382060bcae99
  GitTreeState: dirty
  GoVersion: go1.19.10
  Compiler: gc
  Platform: linux/amd64
argocd-server: v2.7.10+469f257.dirty
  BuildDate: 2023-07-31T22:05:17Z
  GitCommit: 469f25753b2be7ef0905a11632a6382060bcae99
  GitTreeState: dirty
  GoVersion: go1.19.10
  Compiler: gc
  Platform: linux/amd64
  Kustomize Version: v5.0.1 2023-03-14T01:32:48Z
  Helm Version: v3.11.2+g912ebc1
  Kubectl Version: v0.24.2
  Jsonnet Version: v0.19.1

配置集群

由于 Argo CD 支持部署应用到多集群,所以如果你要将应用部署到外部集群的时候,需要先将外部集群的认证信息注册到 Argo CD 中,如果是在内部部署(运行 Argo CD 的同一个集群,默认不需要配置),直接使用 https://kubernetes.default.svc 作为应用的 K8S APIServer 地址即可。

首先列出当前 kubeconfig 中的所有集群上下文:

[root@node ~]# kubectl config get-contexts -o name
context-cluster1

从列表中选择一个上下文名称并将其提供给 argocd cluster add CONTEXTNAME,比如对于 kind-kind上下文,运行:

[root@node ~]# argocd cluster add context-cluster1
WARNING: This will create a service account `argocd-manager` on the cluster referenced by context `context-cluster1` with full cluster level privileges. Do you want to continue [y/N]? y
INFO[0002] ServiceAccount "argocd-manager" created in namespace "kube-system" 
INFO[0002] ClusterRole "argocd-manager-role" created    
INFO[0002] ClusterRoleBinding "argocd-manager-role-binding" created 
Cluster 'https://192.168.0.101:6443' added

[root@node ~]# argocd cluster list
SERVER                          NAME              VERSION  STATUS   MESSAGE                                                  PROJECT
https://192.168.0.101:6443      context-cluster1           Unknown  Cluster has no applications and is not being monitored.  
https://kubernetes.default.svc  in-cluster                 Unknown  Cluster has no applications and is not being monitored. 

img

Argo CD 创建部署应用

https://www.cnblogs.com/evescn/p/17614884.html

Argo CD YAML 资源清单

https://www.cnblogs.com/evescn/p/17617392.html

Argo CD Project

https://www.cnblogs.com/evescn/p/17617484.html

标签:k8s,created,argocd,server,io,Argo,CD
From: https://www.cnblogs.com/evescn/p/17606149.html

相关文章

  • 数据库-etcd备份恢复
    1.member下数据说明:snap:存放快照数据,etcd防止WAL文件过多而设置的快照,存储etcd数据状态wal:存放预写式日志,最大的作用是记录了整个数据变化的全部历程。在etcd中,所有数据的修改在提交前,都要先写入到WAL中 2.备份,只需要备份其中一台etcdexportETCDCTL_API=3/home/s/bin/etc......
  • 拓端tecdat|R语言实现k-means聚类优化的分层抽样(Stratified Sampling)分析各市镇的人
    原文链接:http://tecdat.cn/?p=23038原文出处:拓端数据部落公众号最近我们被客户要求撰写关于k-means聚类的研究报告,包括一些图形和统计输出。简介假设我们需要设计一个抽样调查,有一个完整的框架,包含目标人群的信息(识别信息和辅助信息)。如果我们的样本设计是分层的,我们需要选择......
  • CDC 数据复制:技术、权衡、见解
    推荐:使用NSDT场景编辑器助你快速搭建可编辑的3D应用场景在本文中,我将定义CDC数据复制,简要讨论最常见的用例,然后讨论常见技术及其权衡。最后,我将提供一些我作为数据集成公司Dataddo的首席执行官和创始人所学到的一般实现见解。什么是变更数据捕获(CDC)数据复制?CDC数据复制是......
  • 高防cdn和高防服务器有什么不一样?
    高防cdn:    相信很多看过我们文章的小伙伴对cdn已经很了解了,cdn的原理很简单,就是构建在网络上的很多个节点,为网站作内容分发。使用户就近获取所需资源。且分配的cdn节点都是高防节点,每个节点都有防御功能。还可以帮助用户隐藏真实ip。高防服务器:    高防服务器就是一个......
  • CDGA/CDGP数据治理认证8月20日正式开班
    DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业竞争能力。DAMA是数据管理方面的认证,帮助数据从业者提升......
  • 2023年9月北京/广州深圳DAMA-CDGA/CDGP认证考试报名进行中
    据DAMA中国官方网站消息,2023年度第三期DAMA中国CDGA和CDGP认证考试定于2023年9月23日举行。 报名通道现已开启,相关事宜通知如下: 考试科目: 数据治理工程师(CertifiedDataGovernanceAssociate,CDGA)数据治理专家(CertifiedDataGovernanceProfessional,CDGP) 考试时间: CDGA:2023......
  • 视频监控—在LCD上显示摄像头图像
    一、框架1、程序框架仿照之前数码相册的框架来进行改造,完成在开发板上动态显示摄像头的数据信息: 对于上述完成主要功能的5个部分:display显示部分、debug调试信息输出部分、render渲染部分、video视频设备部分、convert格式转换部分 video视频设备部分:负责获得摄像头的原......
  • argo的输入输出--output和input输出目录或文件到下一步骤
    有部分场景需要使用output把目录或者文件传递到下一个步骤。argo提供了两种方式一种是参数方式parameter一种是组件方式artifacts各自适用于不同的场景,参数方式是把某个文本的内容读取出来传递给下一步骤。组件方式可以传递文件本身或者文件目录。参数方式parameter参数方式的用......
  • k8s--kubernetes--argo----使用动态存储PVC---基于nfs 的storageclass
    PVC简介Docker中有volumes的概念,在Docker中,volume是对物理节点服务器node路径目录的一种映射,也就是我们可以把服务器的一个目录挂载给镜像使用。同样的,k8s创建的pod也可以挂载volume,而且不仅仅支持pod所在的服务器node的目录映射,也可以挂载其他网络存储的作为目录挂载。k8s支......
  • 遇到问题--Kubernetes--argo--output does not exist
    情况在使用argo进行流程串联时使用了output进行文件输出。在生产环境的argo中运行,即时需要output的文件在pod中不存在,也能正常运行进入后续步骤。但是内测环境的argo同样的情况下会报错。报错如下:path/mendel/need_update_barcode.txtdoesnotexist(or/mendel/need_update_......