目录
一、k8s 助力 DevOps 在企业落地实践
1.1 传统方式部署项目为什么发布慢,效率低?
1.2 上线一个功能,有多少时间被浪费了?
1.3 如何解决发布慢,效率低的问题呢?
1.4 什么是 DevOps?
1.4.1 敏捷开发
1.4.2 持续集成(CI)
1.5.3 持续交付
1.5.4 持续部署
二、为什么大厂都在用 DevOps?
2.1 传统软件服务企业的痛点
2.2 DevOps 在金融行业的应用
2.3 哪些企业在用 DevOps?
2.4 DevOps 在 5G 领域的的展望
三、K8s 在 DevOps 中的核心作用
3.1 自动化
3.2 多集群管理
3.3 多环境一致性
3.4 实时反馈和智能化报表
四、基于 Jenkins+K8s+Harbor+Git 等技术链助力 DevOps 在企业落地实践案例
4.1 神州泰岳 k8s+DevOps+微服务生态体系建设与实践
4.2 百度:基于 k8s 构建亿级 PV 流量的 DevOps 平台
扩展链接:一分钟看懂云计算是啥!
亚马逊的定义:https://aws.amazon.com/devops/what-is-devops/
谷歌的定义:https://cloud.google.com/devops#section-2
微软的定义:https://azure.microsoft.com/en-gb/overview/what-is-devops/#devops-overview
Atlassian 的定义:https://www.atlassian.com/devops/what-is-devops/benefits-of-devops
提高开发效率,及时跟进用户需求,缩短开发周期。 敏捷开发包括编写代码和构建代码两个阶段,可以使用 git 或者 svn 来管理代码,用 maven 对代码进行构建。
持续集成强调开发人员提交了新代码之后,立刻自动的进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。持续集成过程中很重视自动化测试验证结果,对可能出现的一些问题进行预警,以保障最终合并的代码没有问题。
常见的持续集成工具:
Jenkins:Jenkins 是用 Java 语言编写的,是目前使用最多和最受欢迎的持续集成工具,使用 Jenkins,可以自动监测到 git 或者 svn 存储库代码的更新,基于最新的代码进行构建,把构建好的源码或者镜像发布到生产环境。Jenkins 还有个非常好的功能:它可以在多台机器上进行分布式地构建和负载测试。
TeamCity
Travis CI
Go CD
Bamboo
GitLab CI
Codeship
它的好处主要有以下几点:
较早的发现问题:每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,哪个环节出现问题都可以较早的发现。
快速的发现错误:每完成一部分代码的更新,就会把代码集成到主干中,这样就可以快速的发现错误,比较容易的定位错误。
提升团队绩效:持续集成中代码更新速度快,能及时发现小问题并进行修改,使团队能创造出更好的产品。
防止分支过多的偏离主干:经常持续集成,会使分支代码经常向主干更新,当单元测试失败或者出现bug,如果开发者需要在没有调试的情况下恢复仓库的代码到没有bug的状态,只有很小部分的代码会丢失。
持续集成的目的是提高代码质量,让产品快速的更新迭代。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。
Martin Fowler说过,"持续集成并不能消除 Bug,而是让它们非常容易发现和改正。"
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
如果所有的代码完成之后一起交付,会导致很多问题爆发出来,解决起来很麻烦,所以持续集成,也就是没更新一次代码,都向下交付一次,这样可以及时发现问题,及时解决,防止问题大量堆积。
持续部署是指当交付的代码通过评审之后,自动部署到生产环境中。持续部署是持续交付的最高阶段。
Puppet,SaltStack 和 Ansible 是这个阶段使用的流行工具。容器化工具在部署阶段也发挥着重要作用。 Docker 和 k8s 是流行的工具,有助于在开发,测试和生产环境中实现一致性。 除此之外,k8s 还可以实现自动扩容缩容等功能。
解决之道:DevOps
标准的敏捷开发流程:
Docker 和 K8s 的出现使 DevOps 变得更加普及,更加容易实现。在传统运维中我们服务时需要针对不同的环境去安装不同的版本,部署方式也杂、多。那么有了 docker 之后,一次构建、到处运行,我们只需要要构建一次镜像,那么只要有 docker 的主机,就可以基于镜像把应用跑起来。
docker 可以实现 DevOps 的这个思想,但是存在一个问题,什么问题呢?
在众多微服务中,我们每天可能需要去处理各种服务的崩溃,而服务间的依赖调用关系也及其复杂,这对我们解决问题带来了很大的复杂度。要很好的解决这个问题。我们就需要用到容器编排工具。
Kubernetes 的出现主宰了容器编排的市场,也进化了过去的运维方式,将开发与运维联系的更加紧密。而且让 DevOps 这一角色变得更加清晰,它是目前可用的很流行的容器解决方案之一。
敏捷开发 -> 持续集成 -> 持续交付 -> 持续部署
可以根据客户需求对开发、测试、生产环境部署多套 kubernetes 集群,每个环境使用独立的物理资源,相互之间避免影响。
Kubernetes 是基于 docker 的容器编排工具,因为容器的镜像是不可变的,所以镜像把 OS、业务代码、运行环境、程序库、目录结构都包含在内,镜像保存在我们的私有仓库,只要用户从我们提供的私有仓库拉取镜像,就能保证环境的一致性。
每次集成或交付,都会第一时间将结果通过多途径的方式反馈给你,也可以定制适合企业专用的报表平台。
开发代码 -> 提交代码到代码仓库 -> Jenkins 调 k8s API -> 动态生成 Jenkins Slave Pod -> Slave Pod 拉取 git 上的代码 -> 编译代码 -> 打包镜像 -> 推送镜像到镜像仓库 harbor 或者 docker hub -> 通过 k8s 编排服务发布到测试、生产平台 -> Slave Pod 工作完成之后自动删除 > 通过 Ingress 发布服务
功能图:
架构图:
发布应用到测试环境:
发布应用到生产环境:
整个 DevOps 流程图:
上一篇文章:【Kubernetes 企业项目实战】05、基于云原生分布式存储 Ceph 实现 K8s 数据持久化(下)_Stars.Sky的博客-CSDN博客
下一篇文章:【Kubernetes 企业项目实战】06、基于 Jenkins+K8s 构建 DevOps 自动化运维管理平台(中)_Stars.Sky的博客-CSDN博客