- Kubernetes 集群部署
- OpenEBS 的使用
- Helm Chart 开发
- Jenkins 部署
- Jenkins Pipeline 开发
- Argocd 部署以及使用
- 多分支流水线自动化部署
- Deployment、Service、Ingress 使用
- Gitlab 部署以及使用
- Harbor 部署以及镜像管理
- Jenkins 用户权限管理
- Jenkins 共享库配置及使用
- Argo rollouts 使用
- GitOps
这篇课程带大家完成基于 Kubernetes 的 CI/CD,整个课程所涉及的软件都是目前企业中使用非常多的软件,比如 Jenkins、Gitlab、Argocd、Harbor 等,学完整个课程,你将学会如何搭建一套完整的 CI/CD,如何发布以及管理 Kubernetes 应用以及如何在企业中进行落地实践。
近年来,DevOps 在我们身边出现的频率越来越高,大到几万人的大公司,小到几个人的初创企业,都在积极拥抱 DevOps 文化。
而对于大部分企业来说,CI/CD
是 DevOps
的最佳实践,CI/CD
不仅能提升软件交付的效率,也能有效的打破不同团队之间的沟通壁垒。去面试的时候,可以不懂 DevOps
,但是不能不懂 CI/CD
。
本篇课程不是发布主机应用,也不是发布单纯的 Docker 应用,而是发布热度很高的 Kubernetes 应用。我们整个 CI/CD 交付平台是基于 Kubernetes 来构建,旨在通过开源软件打造一个能现学现用的企业级持续交付平台。
乔克 运维工程师 RESICO 共发布过 1 门课程
云原生爱好者、实践者,目前就职于 RESICO 集团,负责集团的运维工作,对 Linux、Kubernetes、DevOps 有比较深的研究。在 DevOps 方面,对 Jenkins、Tekton、Argo workflow、Zadig 等技术软件都非常丰富的使用经验,完成集团多个团队的持续交付平台建设,曾在公众号《运维开发故事》中分享过一系列的 DevOps 最佳实践。
查看老师的所有课程 >
gitlab的实验里面没有配置runner的信息,能不能提供一下,谢谢
首先我们对 Helm Charts 进行了改造,让其能适配 Argo rollouts 的 CRD 进行应用管理 其次我们对流水线进行改造,去掉了自动触发流水线改成手动选择分支发布 最后我们校验了整个流程,从构建到灰度部署,再到全部更新,确保每个环节都能正常进行 其实,不论是常用的滚动更新,还是灰度发布,我们都可以基于这些模板进行改造,在实际工作中,大家可以酌情处理,灵活性还是比较大。
本次实验带大家从以 Jenkins 为中心的 CICD 拆分成以 Jenkins+argocd 为中心的 CICD,做完本次实验,你将知道应该在什么位置进行拆分,在什么情况下使用 Jenkins 共享库。
不过,上面的流水线还不是最优的,比如我们大量的使用明文信息,这将是非常不安全的,有没有什么办法规避呢?大家可以思考一下。
现在,我们已经完成应用多分支自动流水线发布,并且将流水线模板化,以后遇到同类的应用,只需要像 go-hello-world 项目一样写几行简单的 Jenkinsfile 就可以了,避免重复造轮子,也降低了项目的维护难度。
整个实验我们介绍了什么是灰度发布,以及使用 argo rollouts 完成两个灰度发布的测试,灰度发布是一个很常见的需求,而且做法是多种多样,比如有的公司会做前端灰度、后端灰度,甚至数据库灰度等,在流量策略上也各有选择,比如最简单的就是权重,然后复杂点的可以基于 Header、地域、IP 等,这些方式方法大家可以下来自行研究。
本次实验主要是带大家了解什么是 GitOps 以及和传统的 CD 有何区别,然后介绍了本课程的主角之一 Argocd 以及在 Kubernetes 中安装并简单使用,并通过一个简单的示例来演示如何在 Argocd 上创建应用。Argocd 的功能比较多,而且也有不少的企业已经投入生产,后续我们会将持续交付都通过 Argocd 来完成。
现在我们已经完成 go-hello-world 项目使用 Jenkins 进行发版了,我们再来回顾一下整个过程:
首先,我们先定义了整个流程步骤 然后,根据每个步骤进行代码开发 最后,把所有的步骤整合成一个 Pipeline,进行测试发版 每个步骤都不难,主要是掌握开发 Pipeline 的逻辑,而且,在这中间可能会出现很多问题,需要慢慢调试。
本次实验主要是操作 Gitlab hook 和 Generic webhook trigger 两个插件,它们都是打通 Jenkins 和 Gitlab 的重要工具,在实际场景中使用也比较广泛。
这次实验我们介绍了什么是 Pipeline,以及如何开发一个简单的 Pipeline 并再 Jenkins 中部署使用。在针对复杂企业环境中,大多数都会使用到共享库,所以本次实验也带大家从 0 到 1 搭建并使用共享库,后续的实验中,我们会不断的丰富共享库,以满足日常需求。
本次实验围绕 Role-based Authorization Strategy 插件进行展开,从用户、角色、项目分别进行实验,最终让不同的用户能管理不同的项目,最后再介绍了如何在 Jenkins 中管理凭据。
整个实验比较简单,但是涉及 Jenkins 的插件管理、用户管理、权限管理、视图管理、凭据管理以及项目管理,基本涵盖日常使用 Jenkins 的所有需求。
首先带大家了解什么是 Jenkins,以及如何在 Kubernetes 中部署 Jenkins,包括数据持久化,应用访问等,再然后带大家完成 Jenkins 的初始化并测试流水线功能是否正常,最后,为了最大化的利用 Kubernetes 的特性,带大家配置如何基于 Kubernetes 实现 Jenkins Slave 的动态化,通过模板定制、标签关联可以实现不同任务关联不同的 Slave,再企业中也可以根据实际情况配置多个模板,比如 Java 应用的模板,Nodejs 的模板等。
通过本次实验,我们掌握了如何在 Kubernetes 中部署 Harbor 镜像仓库,如何使用 docker 命令管理镜像,如果制作 Dockerfile 以及如何使用 Helm 部署应用。
Gitlab 项目的整个部署包括 Redis、PostgreSQL、Gitlab 三个主要的组件,每个组件的部署过程差不多,都是创建存储卷 PVC,然后使用 Deployment 进行部署服务,最后使用 Service 进行应用访问,当然在正式环境中,如果要把有状态的服务部署到 Kubernetes 中,建议使用 StatefulSet 或者 Operator 的方式部署,这样才能更好的管理有状态应用。
Gitlab 是代码仓库,会保存我们整个实验的源代码,包括应用代码,YAML 清单等。所以请记住其地址以及用户名密码,后面是时常使用到。
本次实验的主旨是带大家了解 Kubernetes 的基本用法,主要包括:
Deployment 的 YAML 开发、部署、更新、回滚 Service 的 YAML 开发、部署、访问 Ingress Controller 的部署 Ingress 的 YAML 开发、部署、访问 当然,Kubernetes 还有其他更复杂的操作,可以自行到官网 https://kubernetes.io/docs/home/ 进行学习研究。
大家如果在实验过程中有不成功的,或者觉得实验有问题的,麻烦说明什么环境、什么实验、什么问题、什么现象,我才好对症下药。