云原生--argocd 安装

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 云原生--argocd 安装

介绍


Argo CD 是一个为 Kubernetes 而生的,遵循声明式 GitOps 理念的持续部署(CD)工具,它的配置和使用非常简单,并且自带一个简单易用的 Dashboard 页面,并且支持多种配置管理/模板工具(例如 Kustomize、Helm、Ksonnet、Jsonnet、plain-YAML)。

Argo CD 被实现为一个 Kubernetes 控制器,它持续监控正在运行的应用程序并将当前的实时状态与所需的目标状态(例如 Git 仓库中的配置)进行比较,在 Git 仓库更改时自动同步和部署应用程序

Argo CD 在 CI/CD 流程中的位置如下图所示,Argo CD 的主要职责是 CD(Continuous Delivery,持续交付),将应用部署到 Kubernetes 等环境中,而 CI(Continuous Integration,持续集成)主要是交给 Jenkins,Gitlab CI 等工具来完成。

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


Argo CD 中的主要组件


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

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

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

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

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

功能

  • 自动部署应用程序到指定的目标环境
  • 支持多种配置管理/模板工具(Kustomize、Helm、Ksonnet、Jsonnet)
  • 能够管理和部署到多个集群
  • 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 status:实时状态,指应用程序实时的状态,比如部署了哪些 pods 等真实状态
  • Sync status:同步状态,表示实时状态是否与目标状态一致,部署的应用是否与 Git 所描述的一样
  • Sync:同步,指将应用程序迁移到其目标状态的过程,比如通过对 Kubernetes 集群应用变更
  • Sync operation status:同步操作状态,指的是同步是否成功
  • Refresh:刷新,是指将 git 中的最新代码与实时状态进行比较,弄清楚有什么不同
  • Health:应用程序的健康状况,它是否正常运行,能否为请求提供服务
  • Tool:工具指从文件目录创建清单的工具,例如 kustomize 或 Ksonnet 等
  • Configuration management tool:配置管理工具
  • Configuration management plugin:配置管理插件


安装 argocd


使用以下命令在 argocd 命名空间部署 Argo CD。

# 创建命名空间
kubectl create namespace argocd 
# 下载资源清单
wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
# 部署 argo cd
kubectl apply -n argocd -f install.yaml

部署完成之后查看 pod 是否都正常起来

[root@master1 ~]# kubectl get pod -n argocd


安装 Argo CD CLI


Argo CD CLI 是用于管理 Argo CD 的命令行工具,不同操作系统具体的安装方式可以参考 Argo CD CLI Installation

我的是 centos ,使用下面命令进行安装

# 下载后移动到 /usr/local/bin/argocd
curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
# 授予权限
chmod +x /usr/local/bin/argocd

输入 argocd 验证

[root@master1 ~]# argocd
argocd controls a Argo CD server
Usage:
  argocd [flags]
  argocd [command]
Available Commands:
  account     Manage account settings
  admin       Contains a set of commands useful for Argo CD administrators and requires direct Kubernetes access
  app         Manage applications
  cert        Manage repository certificates and SSH known hosts entries
  cluster     Manage cluster credentials
  completion  output shell completion code for the specified shell (bash or zsh)
  context     Switch between contexts
  gpg         Manage GPG keys used for signature verification
 ......


暴露 Argo CD 服务


默认情况下, Argo CD 服务不对外暴露服务,可以通过 LoadBalancer 或者 NodePort 类型的 Service、Ingress、Kubectl 端口转发等方式将 Argo CD 服务发布到 Kubernetes 集群外部。

这里使用以下命令通过 NodePort 服务的方式暴露 Argo CD 到集群外部。

# 暴露服务,使用 NodePort
[root@master1 ~]# kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'
service/argocd-server patched

现在我们已经将名字为 argocd-server 的 Service 改成 NodePort 类型了,可以在集群外部通过 <节点 IP>:<随机生成的 NodePort 端口> 来访问 Argo CD,我这里随机生成的 NodePort 端口是 32382

浏览器输入 https://<节点 IP>:32382 访问 Argo CD。如果看到下面页面则部署成功


获取 Argo CD 密码


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

# 获取密码
[root@master1 ~]# kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
t3b8TQvLjugSIrMq

使用 admin 和上面的 密码进行登录,登录后的页面如下

命令行可以使用以下方式登录

# 登录,你的 ip 地址和端口号
[root@master1 ~]# argocd login 10.6.215.30:32382
# 接收证书风险
WARNING: server certificate had error: x509: cannot validate certificate for 10.6.215.30 because it doesn't contain any IP SANs. Proceed insecurely (y/n)? y
Username: admin # 用户名
Password:  # 密码
'admin:login' logged in successfully
Context '10.6.215.30:32382' updated


更新密码


默认的密码太难记了,我们也可以修改,登录到页面上点击 USER INFO

修改完成之后点击 SAVE NEW PASSWORD 就可以了,注意:密码最少为 8 位

也可以在命令行里更新密码

# 先登录
[root@master1 ~]# argocd login 10.6.215.30:32382
WARNING: server certificate had error: x509: cannot validate certificate for 10.6.215.30 because it doesn't contain any IP SANs. Proceed insecurely (y/n)? y
Username: admin
Password:
'admin:login' logged in successfully
Context '10.6.215.30:32382' updated
# 登录成功后更新密码
[root@master1 ~]# argocd account update-password
*** Enter password of currently logged in user (admin):  # 输入当前的密码
*** Enter new password for user admin: 12345678  # 新密码
*** Confirm new password for user admin: 12345678  # 确认密码
Password updated
Context '10.6.215.30:32382' updated

更新成功后,就可以用 admin 和 12345678 去登录了


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
Cloud Native
云盾·数据库审计中d100适用于自建和云原生的统一日志审计吗? 客户端或APP端安装Agent是否必要?
云盾·数据库审计中d100适用于自建和云原生的统一日志审计吗? 客户端或APP端安装Agent是否必要?
72 1
|
Kubernetes Cloud Native Docker
云原生Istio安装和使用2
云原生Istio安装和使用2
130 0
|
1月前
|
运维 监控 Cloud Native
构建行业应用生态:云原生应用市场简化企业软件安装
在移动互联网时代,尽管手机应用市场为用户带来了极大的便利,但企业级软件的安装和管理仍面临诸多挑战,包括安装复杂、交付效率低、应用兼容性差等问题。为此,基于云原生技术的企业级应用市场Rainstore应运而生,旨在简化企业软件的安装和管理,提升交付效率,增强应用兼容性,支持远程管理和个性化定制,构建开放的行业应用生态,助力企业数字化转型。
构建行业应用生态:云原生应用市场简化企业软件安装
|
4月前
|
Cloud Native 关系型数据库 Java
云原生数据仓库使用问题之如何安装PL/Java插件
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
6月前
|
Ubuntu Linux Docker
【云原生|Docker系列第2篇】Docker的安装和配置
【云原生|Docker系列第2篇】Docker的安装和配置
431 1
|
6月前
|
Kubernetes Cloud Native Linux
云原生|kubernetes|rancher-2.6.4安装部署简明手册
云原生|kubernetes|rancher-2.6.4安装部署简明手册
1218 0
云原生|kubernetes|rancher-2.6.4安装部署简明手册
|
6月前
|
Kubernetes Cloud Native 虚拟化
云原生|kubernetes|minikube的部署安装完全手册(修订版)
云原生|kubernetes|minikube的部署安装完全手册(修订版)
1303 1
|
6月前
|
缓存 Cloud Native 应用服务中间件
云原生 Nginx安装&配置解析
【1月更文挑战第8天】云原生 Nginx安装&配置解析
|
6月前
|
Prometheus Cloud Native Unix
prometheus|云原生|kubernetes内部安装prometheus
prometheus|云原生|kubernetes内部安装prometheus
164 0
|
6月前
|
Prometheus Cloud Native 关系型数据库
prometheus|云原生|prometheus项目安装postgres-exporter监视组件的部署简介
prometheus|云原生|prometheus项目安装postgres-exporter监视组件的部署简介
295 0