点击上方蓝字⭐️关注“DevOps云学堂”,接收最新技术实践
今天是「DevOps云学堂」与你共同进步的第 44天
第⑦期DevOps实战训练营· 7月15日正式开营
实践环境升级基于K8s和ArgoCD
使用 ArgoCD 和 Tekton 在 OpenShift 上创建端到端 DevOps 管道的分步指南
Tekton是什么?
在云原生开发领域,持续集成和持续交付(CI/CD)已成为无缝构建、测试和部署应用程序的关键组件
。随着 Kubernetes和容器化的兴起,开发人员需要高效的工具来有效管理他们的 CI/CD 管道
。Tekton
是一个强大的开源框架,专为云原生 CI/CD 工作流程而设计
。
Tekton 是一个 Kubernetes 原生框架
,专注于提供一种声明性
且可扩展
的方法来构建 CI/CD 系统。Tekton 作为持续交付基金会 (CDF) 旗下的开源项目而诞生,它利用 Kubernetes API 并利用自定义资源定义 (CRD) 来定义管道资源、任务和工作区
。它为您的 CI/CD 工作流程带来了可扩展性、可移植性和可重复性的优势
,使其成为云原生环境的绝佳选择。
Tekton主要特点
主要特点和概念
Task任务:Tekton 管道的基本构建块是任务。每个任务代表一个特定的工作单元,例如
构建代码、运行测试或部署应用程序
。任务可以跨管道组合和重用
,从而促进模块化和代码共享
。Pipeline管道:管道提供了一种按特定顺序
编排任务以创建端到端 CI/CD 工作流程的方法
。使用 Tekton,您可以定义包括多个阶段、并行执行和条件分支的复杂管道
。Resources资源:资源代表管道中
任务的输入和输出
。它们可以包括源代码存储库、容器映像或管道执行所需的任何其他工件
。Tekton 使您能够将资源定义和管理为 Kubernetes CRD。Workspace工作区:工作区允许您在管道内的
任务之间共享文件
。它们提供了一种在 CI/CD 工作流程的不同阶段之间传递数据和工件的机制
。工作空间可确保隔离性和可重复性,从而更轻松地管理复杂的管道。
5. 一个任务可以由多个步骤组成
,管道也可以由多个任务组成
。任务可以并行或顺序运行
。
什么是 ArgoCD
ArgoCD 在 OpenShift 中有一个本地支持,称为 OpenShift GitOps,它基于 ArgoCD
。Argo CD
是 Kubernetes 的声明式持续交付工具
,使开发人员能够跨多个集群自动化应用程序部署
。它遵循 GitOps 理念,其中应用程序的所需状态在 Git 存储库
中定义,Argo CD 确保实际状态持续与所需状态匹配
。通过利用 Kubernetes 自定义资源,Argo CD 提供了一种声明式的应用程序部署方法
,使管理复杂的配置和回滚变得更加容易。
ArgoCD 的主要特点
GitOps 方法:使用
Argo CD
,应用程序的所需状态在Git 存储库
中定义,允许您使用熟悉的 Git 工作流程管理部署。这种方法为部署过程带来了版本控制、可审核性和协作
,从而更容易跟踪更改并维护可靠的应用程序状态。声明性应用程序定义:Argo CD 使用
Kubernetes 清单
(例如 YAML 文件)来定义应用程序的所需状态。这种声明式方法消除了部署过程中手动干预
的需要,确保了不同环境之间的一致性和可重复性
。持续交付:Argo CD 持续监控应用程序的状态,并
自动协调期望状态和实际状态之间的任何差异
。它检测 Git 存储库中的更改并相应地触发部署、回滚或更新
,确保您的应用程序始终保持最新状态。多集群支持:Argo CD 简化了
多个 Kubernetes 集群的管理
。它提供所有集群的统一视图,允许您从单个控制平面将应用程序部署到多个环境。这种集中式方法提高了运营效率并简化了复杂基础设施的管理
。回滚:Argo CD 可以
轻松回滚到特定应用程序版本
。通过利用 Git 存储库中存储的版本历史记录,您可以轻松恢复到以前的状态或进展到新版本,从而在管理部署方面提供灵活性和敏捷性。
使用 ArgoCD 和 Tekton 编写完整的 DevOps 管道
让我们动手吧!
让我们解释一下架构
这是基于
.Netcore
应用程序的示例管道我们有 2 个存储库。
第一个存储库包含应用程序代码和 tekton 资源
。第二个存储库定义了 ArgoCD 资源
每当第一个存储库有触发器时,当应用程序代码有变化时,通过
webhook的触发器
,tekton
就会开始克隆,构建源代码,构建docker镜像,并push到registry
。然后 Tekton 还会
将更改提交到其他存储库
,以便推送镜像标签包括部署应用程序所需的所有 yaml 的资源(例如部署、服务、报价、副本集)存储在用于 GitOps 的第二个存储库中
tekton 完成任务后,
ArgoCD 将与您的应用程序的最新更改同步
,这可能是副本计数、最新映像、回滚等方面的更改。
步骤1:通过OpenShift中的operatorhub安装ArgoCD和Tekton。
ArgoCD 在 OpenShift 中称为
OpenShift Gitops
Tekton 在 OpenShift 中称为
OpenShift Pipelines
导航到 OpenShift 中的
OperatorHub
并在 OpenShift 中安装OpenShift Gitops
和 OpenShift 中的OpenShift Pipelines
步骤2:在quay.io创建您的帐户
在
Quay.io
中创建您的帐户,然后创建一个如下所示的存储库并将其命名为dotnetcore
。
2. 进入账户设置,点击生成新的加密密码,更改quay
的密码。
3.记下密码
步骤3:设置Tekton
克隆存储库,确保为此演示构建自己的存储库。
git clone git@github.com:SaifRehman/dotnetcore-ci-ocp-pipeline.git
创建一个名为
dotnetcore
的项目。
oc new-project dotnetcore
创建一个
Secret
将quay
链接到openshift
。
oc create secret docker-registry quay-secret --docker-server=quay.io --docker-username=<QUAY_USERNAME> --docker-password=<ENCRYPTED_PASSWORD>
创建一个
github
令牌密钥,允许tekton
将更改提交/推送到您的 github。
apiVersion: v1
kind: Secret
metadata:
name: git-user-pass
annotations:
tekton.dev/git-0: https://github.com
type: kubernetes.io/basic-auth
stringData:
username: <github user>
password: <github personal access token>
oc apply -f secret.yaml
5. 将 Secrets 链接到管道服务帐户
$ oc secret link pipeline quay-secret
$ oc secret link pipeline git-user-pass
导航到
k8s/pipeline.yaml
,并替换为您的 github 存储库,替换第 10 行和 22 行
7. 应用Tekton 资源
。导航到 k8s 文件夹并运行以下命令。
$ oc apply -f dotnetcore-api-pvc.yaml
$ oc apply -f el-route.yaml
$ oc apply -f eventlistener.yaml
$ oc apply -f git-update-deployment-task.yaml
$ oc apply -f pipeline.yaml
$ oc apply -f triggerbinding.yaml
$ oc apply -f triggertemplate.yaml
8.这将创建所有 tekton 资源并创建一个 web hook URL
,通过查看其路由
来复制 webhook url
$ oc get route
就我而言,它是el-dotnetcore-api-dotnetcore.apps.cluster-l8wqt.l8wqt.sandbox952.opentlc.com
。复制此路线并导航到您的 github 存储库,导航到设置,然后导航到 webhook
9. 单击添加 webhook 创建 webhook
你的管道已经设置好了!!!
要检查导航到管道并转到您各自的项目,以查看您的管道
步骤4:设置 ArgoCD
向 ArgoCD 申请权限
$ oc adm policy add-cluster-role-to-user cluster-admin -z openshift-gitops-argocd-application-controller -n openshift-gitops
2.克隆存储库,并将其推送到您自己的存储库
$ git clone git@github.com:SaifRehman/dotnetcore-gitops.git
3.创建一个ArgoCD应用程序,指向您创建的存储库。
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: vote-app-dev
namespace: openshift-gitops
spec:
destination:
namespace: vote-app-dev
server: https://kubernetes.default.svc
project: default
source:
path: environments/dev
repoURL: <your-gitops-cloned-repo>
targetRevision: main
syncPolicy:
automated:
prune: true
selfHeal: false
syncOptions:
- CreateNamespace=true
4.应用yaml配置
$ oc apply -f argo.yaml
通过获取其
路由和密码登录 ArgoCD
,如下所示。用户名是admin。
$ oc get route -n openshift-gitops
$ oc extract secret/openshift-gitops-cluster -n openshift-gitops --to=-
登录后,您可以看到 ArgoCD 部署的应用程序。
步骤5:通过提交应用程序代码中的新更改来创建触发器
更改应用程序代码中的某些内容并提交/推送新更改。
$ git commit -am "new changes"
$ git push
2. 这将使用 Tekton 自动启动 CI。
3.等待一定时间CI完成
4. 导航到您的GitHub
,您会注意到 tekton
已将最新更改推送到您的 GitOps 存储库
。
5. 您可以等待 3 分钟
让 ArgoCD 自动同步
您的存储库的最新更改,也可以手动单击 Argo 上的同步。
恭喜您使用 Tekton 和 ArgoCD 的端到端 GitOps 已准备就绪!
原文链接:https://medium.com/@s4saif.121/creating-end-to-end-gitops-pipeline-on-openshift-using-argocd-and-tekton-aa14166281e2
参考
https://cloud.redhat.com/blog/introducing-openshift-pipelines
https://docs.openshift.com/container-platform/4.13/cicd/gitops/understanding-openshift-gitops.html
https://github.com/SaifRehman/dotnetcore-ci-ocp-pipeline
https://github.com/SaifRehman/dotnetcore-gitops
往期推荐
A/B测试: 如何使用Argo Rollouts 进行渐进式交付