searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Argocd实现k8s应用的CD流程

2024-05-07 02:18:31
35
0

工作原理

Argo CD遵循GitOps模式,使用Git存储库作为定义应用程序期望状态的数据源。

Kubernetes应用清单可以通过以下几种方式指定:

kustomize应用

helm应用

ksonnet应用

jsonnet

带有yaml|json清单的目录

Argo CD可以在指定的目标环境中自动部署、维护期望的应用程序状态,该期望状态由清单文件定义。应用程序清单版本可以基于Git提交时跟踪对分支、tag或固定到特定版本的Git commit。

Argo CD基于kubernetes控制器实现,它持续监控运行中的应用程序,并将当前的活动状态与期望的目标状态(如Git repo中所指定的)进行比较。如果已部署的应用程序的活动状态偏离目标状态,则将被视为OutOfSync。Argo CD可视化展现程序状态差异,同时提供自动或手动同步工具。

特性

将应用程序自动部署到指定的目标环境

支持多种应用配置管理工具/模板(Kustomize, Helm, Ksonnet, Jsonnet, plain-YAML)

能够管理和部署到多个k8s集群

单点登录

用于授权的多租户和RBAC策略

回滚至Git仓库中指定的commit

应用程序资源的运行状况分析

自动配置漂移检测和可视化

自动/手动同步应用至期望状态

提供应用程序活动的实时视图的Web UI

用于自动化和CI集成的CLI

Webhook集成(GitHub, BitBucket, GitLab)

PreSync, Sync, PostSync钩子来支持复杂应用(例如蓝/绿和金丝雀的升级)

应用程序事件审计和追踪API调用

Prometheus指标

覆盖Git中ksonnet/helm的参数

架构:

Argo CD 的主要职责是 CD(Continuous Delivery,持续交付),将应用部署到 Kubernetes 等环境 中,而 CI(Continuous Integration,持续集成)主要是交给 Jenkins,Gitlab CI 等工具来完成。

安装:

(1)演示安装非HA argocd

模板位置:raw.githubusercontent.com/argoproj/argo-cd/v2.10.4/manifests/install.yaml

kubectl create namespace argocd

kubectl apply -n argocd -f install.yaml

(2)从github下载argocd cli工具

github.com/argoproj/argo-cd/releases/v2.10.4/download/argocd-linux-amd64

chmod +x /usr/local/bin/argocd

(3)默认情况下, Argo CD 服务不对外暴露服务,这里使用以下命令通过 NodePort 服务的方式暴露 Argo CD 到集群外部:

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'

浏览器输入 <节点 IP>:NodePort 访问 Argo CD。

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

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

也可以使用argocd cli获取:

argocd admin initial-password -n argocd

部署应用:

(1)登录webUI,用户名admin,密码为上面查询的内容

(2)登陆后可以修改admin默认密码

(3)ArgoCD 准备添加REPO(仓库)

(4)ArgoCD 创建application (手动策略、自动创建命名空间、指定仓库与集群)

Application Name: 自定义的应用名。 
Project: 使用默认创建好的 default 项目。
SYNC POLICY:  同步方式,可以选择自动或者手动,这里我们选择手动同步。

PRUNE LAST:可以选择是否删除在git中移除的资源,如某个git版本中创建了一个svc,随后又删除了,如果不勾选该选项,则argocd不会自动删除该svc

SKIP SCHEMA VALIDATION:跳过语法检查,不建议开启

AUTO-CREATE NAMESPACE:可以设置如果对应的namespace不存在的话是否自动创建

APPLY OUT OF SYNC ONLY:类似于增量部署而不是全量部署,仅部署和git版本中不一样的资源,而不是全部重新部署一次,可以降低K8S集群的压力

REPLACE:会将部署的命令从默认的kubectl apply变更为kubectl replace/create,可以解决部分资源修改之后无法直接apply部署的问题,同时也有可能会导致资源的重复创建

RETRY:可以设定部署失败后重试的次数和频率

Repository URL: 项目的 Git 地址。 
Revision: 分支名。
Path: yaml 资源文件所在的相对路径。

Cluster URL: Kubernetes API Server 的访问地址,由于 Argo CD 和下发应用的 Kubernetes 集群是同 一个,因此可以直接使用 kubernetes.default.svc 来访问。

Namespace: 部署应用的命名空间。

(5)创建完成后如下图所示,此时处于 OutOfSync 的状态:由于设置的是手动同步,因此需要点一下下面的 SYNC 进行同步:

(6)在弹出框点击 SYNCHRONIZE,确认同步:

(7)部署成功

(8)在 Argo CD 上点击应用进入查看详情,如下图:

版本升级:

(1)修改nginx.yaml模板镜像版本号,提交git操作。

(2)ArgoCD会周期性拉取一次git仓库的内容以检测manifests的变化。如果等不及可以点击 Refresh,Argo CD 会去立即获取最新的资源 文件。当与实际应用状态不一致时,会更新成OutOfSync。

点击SYNC升级新版本

  • 查看事件更新成功

版本回退:

(1)升级完成后,可以查看历史版本记录

(2)假设刚刚上线的 v2 版本出现了问题,需要回滚回 v1 版本,那么可以选中 v1 版本,然后点击 Rollback 进行回滚。

(3)等待一会可以看到此时已经回滚成功,此时 Pod 是 v1 版本的,并且由于此时线上的版本并不是 Git 仓 库中最新的版本,因此此时同步状态是 OutOfSync

 

0条评论
0 / 1000
L****s
6文章数
1粉丝数
L****s
6 文章 | 1 粉丝
原创

Argocd实现k8s应用的CD流程

2024-05-07 02:18:31
35
0

工作原理

Argo CD遵循GitOps模式,使用Git存储库作为定义应用程序期望状态的数据源。

Kubernetes应用清单可以通过以下几种方式指定:

kustomize应用

helm应用

ksonnet应用

jsonnet

带有yaml|json清单的目录

Argo CD可以在指定的目标环境中自动部署、维护期望的应用程序状态,该期望状态由清单文件定义。应用程序清单版本可以基于Git提交时跟踪对分支、tag或固定到特定版本的Git commit。

Argo CD基于kubernetes控制器实现,它持续监控运行中的应用程序,并将当前的活动状态与期望的目标状态(如Git repo中所指定的)进行比较。如果已部署的应用程序的活动状态偏离目标状态,则将被视为OutOfSync。Argo CD可视化展现程序状态差异,同时提供自动或手动同步工具。

特性

将应用程序自动部署到指定的目标环境

支持多种应用配置管理工具/模板(Kustomize, Helm, Ksonnet, Jsonnet, plain-YAML)

能够管理和部署到多个k8s集群

单点登录

用于授权的多租户和RBAC策略

回滚至Git仓库中指定的commit

应用程序资源的运行状况分析

自动配置漂移检测和可视化

自动/手动同步应用至期望状态

提供应用程序活动的实时视图的Web UI

用于自动化和CI集成的CLI

Webhook集成(GitHub, BitBucket, GitLab)

PreSync, Sync, PostSync钩子来支持复杂应用(例如蓝/绿和金丝雀的升级)

应用程序事件审计和追踪API调用

Prometheus指标

覆盖Git中ksonnet/helm的参数

架构:

Argo CD 的主要职责是 CD(Continuous Delivery,持续交付),将应用部署到 Kubernetes 等环境 中,而 CI(Continuous Integration,持续集成)主要是交给 Jenkins,Gitlab CI 等工具来完成。

安装:

(1)演示安装非HA argocd

模板位置:raw.githubusercontent.com/argoproj/argo-cd/v2.10.4/manifests/install.yaml

kubectl create namespace argocd

kubectl apply -n argocd -f install.yaml

(2)从github下载argocd cli工具

github.com/argoproj/argo-cd/releases/v2.10.4/download/argocd-linux-amd64

chmod +x /usr/local/bin/argocd

(3)默认情况下, Argo CD 服务不对外暴露服务,这里使用以下命令通过 NodePort 服务的方式暴露 Argo CD 到集群外部:

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'

浏览器输入 <节点 IP>:NodePort 访问 Argo CD。

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

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

也可以使用argocd cli获取:

argocd admin initial-password -n argocd

部署应用:

(1)登录webUI,用户名admin,密码为上面查询的内容

(2)登陆后可以修改admin默认密码

(3)ArgoCD 准备添加REPO(仓库)

(4)ArgoCD 创建application (手动策略、自动创建命名空间、指定仓库与集群)

Application Name: 自定义的应用名。 
Project: 使用默认创建好的 default 项目。
SYNC POLICY:  同步方式,可以选择自动或者手动,这里我们选择手动同步。

PRUNE LAST:可以选择是否删除在git中移除的资源,如某个git版本中创建了一个svc,随后又删除了,如果不勾选该选项,则argocd不会自动删除该svc

SKIP SCHEMA VALIDATION:跳过语法检查,不建议开启

AUTO-CREATE NAMESPACE:可以设置如果对应的namespace不存在的话是否自动创建

APPLY OUT OF SYNC ONLY:类似于增量部署而不是全量部署,仅部署和git版本中不一样的资源,而不是全部重新部署一次,可以降低K8S集群的压力

REPLACE:会将部署的命令从默认的kubectl apply变更为kubectl replace/create,可以解决部分资源修改之后无法直接apply部署的问题,同时也有可能会导致资源的重复创建

RETRY:可以设定部署失败后重试的次数和频率

Repository URL: 项目的 Git 地址。 
Revision: 分支名。
Path: yaml 资源文件所在的相对路径。

Cluster URL: Kubernetes API Server 的访问地址,由于 Argo CD 和下发应用的 Kubernetes 集群是同 一个,因此可以直接使用 kubernetes.default.svc 来访问。

Namespace: 部署应用的命名空间。

(5)创建完成后如下图所示,此时处于 OutOfSync 的状态:由于设置的是手动同步,因此需要点一下下面的 SYNC 进行同步:

(6)在弹出框点击 SYNCHRONIZE,确认同步:

(7)部署成功

(8)在 Argo CD 上点击应用进入查看详情,如下图:

版本升级:

(1)修改nginx.yaml模板镜像版本号,提交git操作。

(2)ArgoCD会周期性拉取一次git仓库的内容以检测manifests的变化。如果等不及可以点击 Refresh,Argo CD 会去立即获取最新的资源 文件。当与实际应用状态不一致时,会更新成OutOfSync。

点击SYNC升级新版本

  • 查看事件更新成功

版本回退:

(1)升级完成后,可以查看历史版本记录

(2)假设刚刚上线的 v2 版本出现了问题,需要回滚回 v1 版本,那么可以选中 v1 版本,然后点击 Rollback 进行回滚。

(3)等待一会可以看到此时已经回滚成功,此时 Pod 是 v1 版本的,并且由于此时线上的版本并不是 Git 仓 库中最新的版本,因此此时同步状态是 OutOfSync

 

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0