pull/457/head
Jimmy Song 2022-01-18 10:29:07 +08:00
parent a92d07c750
commit 6f4aad3a14
No known key found for this signature in database
GPG Key ID: CBA666E6EF8B2C3A
6 changed files with 90 additions and 111 deletions

View File

@ -198,7 +198,7 @@
* [服务编排管理](practice/services-management-tool.md) * [服务编排管理](practice/services-management-tool.md)
* [使用 Helm 管理 Kubernetes 应用](practice/helm.md) * [使用 Helm 管理 Kubernetes 应用](practice/helm.md)
* [构建私有 Chart 仓库](practice/create-private-charts-repo.md) * [构建私有 Chart 仓库](practice/create-private-charts-repo.md)
* [持续集成与发布](practice/ci-cd.md) * [持续集成与发布CI/CD](practice/ci-cd.md)
* [使用 Jenkins 进行持续集成与发布](practice/jenkins-ci-cd.md) * [使用 Jenkins 进行持续集成与发布](practice/jenkins-ci-cd.md)
* [使用 Drone 进行持续集成与发布](practice/drone-ci-cd.md) * [使用 Drone 进行持续集成与发布](practice/drone-ci-cd.md)
* [更新与升级](practice/update-and-upgrade.md) * [更新与升级](practice/update-and-upgrade.md)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 244 KiB

BIN
images/gitops.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -1,28 +1,28 @@
# 持续集成与发布 # 持续集成与发布CI/CD
持续集成与发布简称CI/CD是微服务构建的重要环节也是DevOps中推崇的方法论。如何在kubernetes中使用持续构建与发布工具?可以既可以与企业内部原有的持续构建集成,例如Jenkins也可以在kubernetes中部署一套新的持续构建与发布工具例如Drone。 持续集成与发布,简称 CI/CD是微服务构建的重要环节也是 DevOps 中推崇的方法论。如何在 Kubernetes 中使用持续构建与发布工具?可以既可以与企业内部原有的持续构建集成,例如 Jenkins也可以在 Kubernetes 中部署一套新的持续构建与发布工具,例如 Drone、ArgoCD、Tekton 等
众所周知Kubernetes并不提供代码构建、发布和部署所有的这些工作都是由CI/CD工作流完成的最近TheNewStack又出了本小册子117页介绍了Kubernetes中CI/CD的现状。下载本书的PDF请访问https://thenewstack.io/ebooks/kubernetes/ci-cd-with-kubernetes/ 众所周知 Kubernetes 并不提供代码构建、发布和部署,所有的这些工作都是由 CI/CD 工作流完成的TheNewStack 推出过一本专门介绍 Kubernetes 中的 CI/CD 的白皮书 [CI/CD with Kubernetes](https://thenewstack.io/ebooks/kubernetes/ci-cd-with-kubernetes/),本书共 117 页,介绍了 Kubernetes 中 CI/CD 的现状。
![CI/CD with Kubernetes](../images/00704eQkgy1fsaxszh01vj30da0j2jvn.jpg) > **CI/CD with Kubernetes 简介 **
>
> 主要作者
> - Rob ScottReactiveOps 公司的 SRE
> - Janakiram MSVJanakiram & Associates 的首席分析师
> - Craig MartinKenzan 的高级副总裁
> - Container Solutions
>
> 主要内容
> - DevOps 模式
> - 云原生应用模式
> - 使用 Spinnaker 做持续交付
> - 云原生时代的监控
本书的作者有: 本节本分内容引用自本书。
- Rob ScottReactiveOps公司的SRE
- Janakiram MSVJanakiram & Associates 的首席分析师
- Craig MartinKenzan的高级副总裁
- Container Solutions
这本小册子里主要主要介绍了以下几点:
- DevOps模式
- 云原生应用模式
- 使用Spinnaker做持续交付
- 云原生时代的监控
### DevOps 模式 ### DevOps 模式
这一章从一些流行的自动化运维工具讲起比如Chef、Puppet等引申出CI/CD流水线进而引出Docker和DevOps将容器如何解除开发和运维之间的隔阂但同时也带来了一些挑战比如频繁的发布变更如何控制如何控制容器集群的行为如何拆分应用到容器之中等。这是一个专门用于容器编排调度的工具呼之欲出Kubernetes的出现彻底改变了局面可以说它直接改变了应用的基础架构。 在云原生应用诞生之前,就已经有很多流行的自动化运维工具,比如 Chef、Puppet 等,后来又诞生了 CI/CD 流水线Docker 和 DevOps 使用容器解除开发和运维之间的隔阂但同时也带来了一些挑战比如频繁的发布变更如何控制如何控制容器集群的行为如何拆分应用到容器之中等。这是一个专门用于容器编排调度的工具呼之欲出Kubernetes 的出现彻底改变了局面,可以说它直接改变了应用的基础架构。
![Kubernetes 改变了应用的基础架构](../images/00704eQkgy1fsayashxz3j31c00w6aed.jpg) ![Kubernetes 改变了应用的基础架构](../images/00704eQkgy1fsayashxz3j31c00w6aed.jpg)
@ -32,13 +32,27 @@ Kubernetes细化的应用程序的分解粒度同时将服务发现、配置
![Kubernetes 中的 CI/CD](../images/00704eQkgy1fsayfzk3ezj31bu0tkdky.jpg) ![Kubernetes 中的 CI/CD](../images/00704eQkgy1fsayfzk3ezj31bu0tkdky.jpg)
有了基于Kubernetes的CI/CD流程后又诞生了GitOps<https://www.weave.works>的博客中有很多相关文章和SecOpsSecurity Operation 有了基于 Kubernetes 的 CI/CD 流程后,又出现了 GitOps 和 DevSecOps。
## GitOps
GitOps 是一套使用 Git 来管理基础设施和应用配置的实践。对于 Kubernetes 来说,这意味着任何 GitOps 操作者都需要依次自动完成以下步骤:
1. 通过克隆或拉取更新 Git 仓库(如 GitHub、GitLab从 Git 中检索最新的配置清单
2. 使用 `kubectl diff` 将 Git 配置清单与 Kubernetes 集群中的实时资源进行比较
3. 最后,使用 `kubectl apply` 将更改推送到 Kubernetes 集群中
Kubernetes 中 GitOps 的流程如下图所示。
![Kubernetes 中的 GitOps 流程示意图](../images/gitops.png)
该流程虽然看上去很简单,但是有很多隐藏的细节在其中,真正实施起来还是比较复杂的。
### 云原生应用模式 ### 云原生应用模式
> 云原生是通过构建团队、文化和技术利用自动化和架构来管理系统的复杂性和解放生产力。——Joe BedaHeotio CTO联合创始人 > 云原生是通过构建团队、文化和技术利用自动化和架构来管理系统的复杂性和解放生产力。——Joe BedaHeotio CTO联合创始人
这一章的重点是给出了云原生应用的10条关键属性。 云原生应用的 10 条关键属性。
1. 使用轻量级的容器打包 1. 使用轻量级的容器打包
2. 使用最合适的语言和框架开发 2. 使用最合适的语言和框架开发
@ -51,7 +65,7 @@ Kubernetes细化的应用程序的分解粒度同时将服务发现、配置
9. 自动化能力 9. 自动化能力
10. 通过定义和策略驱动的资源分配 10. 通过定义和策略驱动的资源分配
作者然后将应用程序架构中的不同组件映射到云原生的工作负载中,如下图所示: 将应用程序架构中的不同组件映射到云原生的工作负载中,如下图所示:
![云原生工作负载](../images/00704eQkgy1fsayrk6vppj31bu0w0gsd.jpg) ![云原生工作负载](../images/00704eQkgy1fsayrk6vppj31bu0w0gsd.jpg)
@ -59,7 +73,7 @@ Kubernetes细化的应用程序的分解粒度同时将服务发现、配置
![云原生工作负载映射到 Kuberentes 原语](../images/00704eQkgy1fsaytbabxgj31c00w2n4r.jpg) ![云原生工作负载映射到 Kuberentes 原语](../images/00704eQkgy1fsaytbabxgj31c00w2n4r.jpg)
总结概括为以下10条 在 Kubernetes 中发布应用时,需要注意的点总结概括为以下 10 条:
1. 不要直接部署裸的 Pod。 1. 不要直接部署裸的 Pod。
2. 为工作负载选择合适的 Controller。 2. 为工作负载选择合适的 Controller。
@ -72,39 +86,6 @@ Kubernetes细化的应用程序的分解粒度同时将服务发现、配置
9. 定义多个 namespace 来限制默认 service 范围的可视性。 9. 定义多个 namespace 来限制默认 service 范围的可视性。
10. 配置 HPA 来动态扩展无状态工作负载。 10. 配置 HPA 来动态扩展无状态工作负载。
### 使用Spinnaker进行持续交付 ## 参考
作者首先讲到了Spinnaker的各种特性比如面向微服务啦云原生的交付工具啦可视化的交付和基础设施啦支持多个region支持容器和Kubernetes等等不一而足感兴趣大家可以自己看下报告或者登陆Spinnaker官网<https://www.spinnaker.io>查看。 - [CI/CD with Kubernetes - thenewstack.io](https://thenewstack.io/ebooks/kubernetes/ci-cd-with-kubernetes/)
下图是Spinnaker中的组件和角色的交互关系。
![spinnaker中的组件及角色交互关系](../images/00704eQkgy1fsaz2wirz9j31bs0vygsb.jpg)
下图是Spinnaker的几种不同环境的流水线。
![Spinnaker部署流水线](../images/00704eQkgy1fsaz3yo227j31c60mgdim.jpg)
![Spinnaker的预发布流水线](../images/00704eQkgy1fsaz50k2atj31bs0mitbn.jpg)
![Spinnaker的生产流水线](../images/00704eQkgy1fsaz5n5qs9j31by0motbm.jpg)
总之作者就是想说Spinnaker很好很强大啦足以满足您对云原生应用CI/CD的需求。
### 云原生时代的监控
监控是为了实现系统的可观察性,不要以为监控就是简单的出个监控页面,监控其实包括以下部分:
- 日志收集
- 监控和指标度量
- 追踪
- 告警和可视化
要把其中任何一个方面做好都不容易。
![可观察性](../images/00704eQkgy1fsazabn0b9j31by0w6791.jpg)
作者主要讲述的Prometheus和Grafana的开源监控方案。
![Prometheus生态系统中的组件](../images/00704eQkgy1fsazcclee6j31c20w6n5y.jpg)
这一章我不详述,感兴趣大家可以查看报告原文。

View File

@ -8,7 +8,7 @@
**1. 在 Github 上创建一个新的 OAtuh 应用 ** **1. 在 Github 上创建一个新的 OAtuh 应用 **
访问[此頁面](https://github.com/settings/applications/new)创建新的OAuth应用。 访问 [此页面](https://github.com/settings/applications/new),创建新的 OAuth 应用。
![OAuth 注册](../images/github-oauth-register.jpg) ![OAuth 注册](../images/github-oauth-register.jpg)
@ -87,6 +87,5 @@ docker-compose up
## 参考 ## 参考
- [Drone Installation](http://docs.drone.io/installation/) - [harness/drone - github.com](https://github.com/harness/drone)
- [Github - Drone](https://github.com/drone/drone)
- [Drone 搭配 Kubernetes 升級應用程式版本 - blog.wu-boy.com](https://blog.wu-boy.com/2017/10/upgrade-kubernetes-container-using-drone/) - [Drone 搭配 Kubernetes 升級應用程式版本 - blog.wu-boy.com](https://blog.wu-boy.com/2017/10/upgrade-kubernetes-container-using-drone/)

View File

@ -13,8 +13,7 @@
3. 用户在发布应用时需要填写 git 仓库地址和分支、服务类型、服务名称、资源数量、实例个数,确定后触发 Jenkins 自动构建 3. 用户在发布应用时需要填写 git 仓库地址和分支、服务类型、服务名称、资源数量、实例个数,确定后触发 Jenkins 自动构建
4. Jenkins 的 CI 流水线自动编译代码并打包成 docker 镜像推送到 Harbor 镜像仓库 4. Jenkins 的 CI 流水线自动编译代码并打包成 docker 镜像推送到 Harbor 镜像仓库
5. Jenkins 的 CI 流水线中包括了自定义脚本,根据我们已准备好的 kubernetes 的 YAML 模板,将其中的变量替换成用户输入的选项 5. Jenkins 的 CI 流水线中包括了自定义脚本,根据我们已准备好的 kubernetes 的 YAML 模板,将其中的变量替换成用户输入的选项
6. 生成应用的kubernetes YAML配置文件 6. 生成应用的 Kubernetes YAML 配置文件
7. 更新 Ingress 的配置,根据新部署的应用的名称,在 ingress 的配置文件中增加一条路由信息 7. 更新 Ingress 的配置,根据新部署的应用的名称,在 ingress 的配置文件中增加一条路由信息
8. 更新 PowerDNS向其中插入一条 DNS 记录IP 地址是边缘节点的 IP 地址。关于边缘节点,请查看 [边缘节点配置](edge-node-configuration.md) 8. 更新 PowerDNS向其中插入一条 DNS 记录IP 地址是边缘节点的 IP 地址。关于边缘节点,请查看 [边缘节点配置](edge-node-configuration.md)
9. Jenkins 调用 kubernetes 的 API部署应用 9. Jenkins 调用 kubernetes 的 API部署应用