Argo CD安装配置

简介

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

Argo CD支持多种k8s清单:

  • 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提交时跟踪对分支、标签的更新,或固定到清单的指定版本。

  • 架构 

    Argo CD安装配置_第1张图片

Argo CD是通过一个k8s控制器来实现的,它持续watch正在运行的应用程序并将当前的实时状态与所需的目标状态(Git仓库中指定的)进行比较。状态有差异则认为是 OutOfSync 状态,Argo CD同时提供工具来自动或手动将状态同步到期望的目标状态。

核心组件

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

    • 应用程序管理和状态报告
    • 执行应用程序操作(如同步、回滚、用户自定义的操作)
    • 存储仓库和集群凭据管理(存储为k8s secrets对象)
    • 认证和授权给外部身份提供者
    • RBAC
    • Git webhook事件的侦听器/转发器
  • 存库服务:这是一个内部服务,负责维护保存应用程序清单Git仓库的本地缓存。当提供以下输入时,它负责生成并返回k8s清单:

    • 存储URL
    • revision版本(commit、tag、branch)
    • 应用路径
    • 模板配置:参数、ksonnet环境、helm values.yaml等
  • 应用控制器:是一个k8s控制器,它持续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 参数

安装

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

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

# 生产环境可部署HA高可用版本(当前稳定版v2.4.9)
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.4.9/manifests/ha/install.yaml
  • 资源查看
[root@master ~]# kubectl get pod -n argocd 
NAME                                                READY   STATUS    RESTARTS        AGE
argocd-application-controller-0                     1/1     Running   3 (3h8m ago)    2d20h
argocd-applicationset-controller-86c8556b6d-qvmtd   1/1     Running   3 (3h8m ago)    2d20h
argocd-dex-server-5c65569f55-ns6rm                  1/1     Running   14 (3h8m ago)   13d
argocd-notifications-controller-f5d57bc55-d49cc     1/1     Running   2 (3h8m ago)    2d20h
argocd-redis-65596bf87-l7ppm                        1/1     Running   2 (3h8m ago)    2d20h
argocd-repo-server-5bfd7c4cfd-sc58x                 1/1     Running   14 (3h8m ago)   13d
argocd-server-8544dd9f89-ws6xk                      1/1     Running   2 (3h8m ago)    2d20h
  • 后台登录
# 查看后台初始密码,登录后请修改初始密码
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d && echo

# 通过web浏览器访问登录
kubectl edit svc -n argocd argocd-server   # type改为NodePort

# 通过argocd CLI命令行工具进行登录
[root@master ~]# argocd login 10.233.81.124
WARNING: server certificate had error: x509: cannot validate certificate for 10.233.81.124 because it doesn't contain any IP SANs. Proceed insecurely (y/n)? y
Username: admin
Password: 
'admin:login' logged in successfully
Context '10.233.81.124' updated

配置

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

# 列出当前kubeconfig中的所有集群上下文
kubectl config get-contexts -o name

# 从列表选择上下文名称并提供给argocd
argocd cluster add xxxx
  • 创建应用
Git仓库选用https://github.com/argoproj/argocd-example-apps.git,这是一个包含留言簿应用程序的示例库。由于国内访问github速度慢,将其clone到gitee上。
  • 2种创建方式
    • 通过CLI创建应用
      argocd app create guestbook --repo https://gitee.com/liyk1024/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default
    
    • 通过web UI(控制台)创建应用
    a.点击 +NEW APP 新建应用
    b.给应用命名,使用default project,并将同步策略设置为Manual
    c.配置Repository URL:https://gitee.com/liyk1024/argocd-example-apps.git
    d.Revision填写master,Path填写guestbook
    e.Cluster URL:https://kubernetes.default.svc,Namespace填写需要创建资源的ns
    
    ArgoCD默认每3分钟会检测Git仓库一次,用于判断应用实际状态是否和Git中声明的期望状态一致(不一致OutOfSync)
    

    Argo CD安装配置_第2张图片

部署应用

由于上面创建应用时同步策略为Manual,所以应用创建完成后没有自动部署需手动去部署应用。同样支持CLI和UI界面2种同步方式。

  • 2种同步方式

    • 通过CLI同步
    argocd app sync guestbook  #此命令从git仓库中检索资源清单并执行kubectl apply部署应用
    argocd app get guestbook  #查看资源状态
    
    • 通过UI同步
    点击进入创建的应用,点击上方菜单栏的 SYNC 按钮进行同步。
    

    Argo CD安装配置_第3张图片

  • 资源查看

[root@master ~]# kubectl get pod -l app=guestbook-ui
NAME                           READY   STATUS    RESTARTS        AGE
guestbook-ui-6b689986f-8rwz7   1/1     Running   1 (4h35m ago)   47h
guestbook-ui-6b689986f-bcch6   1/1     Running   2 (4h35m ago)   2d20h
[root@master ~]# kubectl get svc -l app.kubernetes.io/instance=guestbook
NAME           TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
guestbook-ui   ClusterIP   10.233.8.43           80/TCP    2d20h

你可能感兴趣的:(git,github,kubernetes)