文档章节

GitOps——像代码一样管理Istio配置

openthings
 openthings
发布于 2018/06/02 11:19
字数 1803
阅读 383
收藏 3

GitOps——像代码一样管理Istio配置

在今年的哥本哈根 Kubecon 大会上,Weaveworks 的 CEO Alexis Richardson 与 Varun Talwar(来自一家隐形创业公司)谈到了GitOps工作流程和Istio。会后Weaveworks的Stefan Prodan进行的演示,介绍如何使用 GitOps上线和管理Istio的金丝雀部署。

会谈和演示中解释了:

  • 什么是 GitOps?为什么需要它?
  • Istio 和 GitOps 的最佳实践是如何管理在其上运行的应用程序的。
  • 如何使用 GitOps 工作流程和 Istio 进行金丝雀部署。

什么是GitOps?

GitOps 是实现持续交付的一种方式。“GitOps 使用 Git 作为声明式基础架构和应用程序的真实来源” Alexis Richardson 说。

当对 Git 进行更改时,自动化交付管道会上线对基础架构的更改。但是这个想法还可以更进一步——使用工具来比较实际的生产状态和源代码控制中描述的状态,然后告诉你什么时候集群的状态跟描述的不符。

Git 启用声明式工具

通过使用 Git 这样的声明式工具可以对整套配置文件做版本控制。通过将 Git 作为唯一的配置来源,可以很方便的复制整套基础架构,从而将系统的平均恢复时间从几小时缩短到几分钟。

GitOps 赋能开发人员拥抱运维

Weave Cloud 的 GitOps 核心机制在于 CI/CD 工具,其关键是支持 Git 集群同步的持续部署(CD)和发布管理。Weave Cloud 部署专为版本控制系统和声明式应用程序堆栈而设计。以往开发人员都是使用 Git 管理代码和提交 PR(Pull Request),现在他们也可以使用 Git 来加速和简化 Kubernetes 和 Istio 等其他声明式技术的运维工作。

GitOps 的三个核心原则

根据 Alexis 的说法,下面描述的是为何 GitOps 既是 Kubernetes 又是云原生核心的原因:

1. GitOps 的核心是声明式配置

通过使用 Git 作为实体源,并使用 Kubernetes 做滚动更新,可以观察集群并将其与期望的状态进行比较。 通过将声明性配置视为代码,它允许您通过在未成功时重新应用更改来强制收敛。

2. 不应该直接使用 Kubectl

根据一般规则来看,将代码经过 CI 直接 push 到生产并不是个好主意。许多人通过 CI 工具驱动部署,但是当你这样做的时候你可能不得不做一个访问生产的东西。

3. 使用 operator 模式

通过 operator 模式,集群将始终与 Git 中签入的内容保持同步。Weave Flux 是开源的,它是使用 Istio 演示下面的金丝雀部署的基础,您可以使用 operator 管理集群中的更改。

无论是开发流程还是生产流程,还是从预发到合并到生产,operator 都会将更改 pull 到集群中,即使是有多个更改也能以原子的方式部署。

Istio 的 GitOps 工作流程

接下来,Varun Talwar 谈到了 Istio 是什么以及如何使用 GitOps 工作流管理应用程序。

Istio 是一年前发布的服务网格。它是一个专用的基础设施层,用于为微服务架构中的所有服务间交互提供服务。Istio 中的所有操作都是通过声明式配置文件驱动的。也就是说像 Istio 这样的服务网格可以让开发人员在 Git 中像管理代码一样完全的管理服务行为。

借助 Git 工作流程,开发人员可以对 Istio 中的任何内容进行建模,包括服务行为及其交互,如超时、断路器、流量路由、负载均衡及 A/B 测试和金丝雀发布等。

跨团队的多组配置

Istio 有四个广泛的领域应用,都是通过声明式配置驱动的:

  1. 流量管理:与管理入口和服务流量有关。
  2. 可观察性:监控、流量延迟、QPS、错误率等。
  3. 安全性:所有服务间调用的认证与授权。
  4. 性能:包括重试超时、故障注入和断路等。

因为所有这些领域都可以跨越组织内的不同团队,所以这使得在 Istio 上管理应用程序尤其具有挑战性。

这些配置驱动的很多设置是跨团队的。例如,有的团队想用 Zipkin 进行跟踪,而另一个团队可能想用 Jaeger。这些决策可以针对某一项服务进行,也可以跨服务进行。当决策跨越团队时,审批工作流程将变得更加复杂,并不总是原子性的。金丝雀发布不是原子的一次性事情。

通过 GitOps 工作流程在 Istio 上做金丝雀部署

Stefan Prodan 向我们展示了如何使用带有 Weave Flux 和 Prometheus 的 GitOps 工作流程在 Istio 中做一次金丝雀发布——您可以在 Weave Cloud 中使用这些工具以及金丝雀部署和可观察性。

简而言之,当您想要用一部分用户测试某些新功能时,会使用金丝雀部署或发布。传统上,您可能拥有两台几乎完全相同的服务器:一台用于所有用户,另一台用于将新功能部署到某一组用户。

但通过使用 GitOps 工作流程,您可以通过 Git 控制您的金丝雀,而不是设置两个独立的服务器。当出现问题时,可以回滚到旧版本,并且可以在金丝雀部署分支上进行迭代,并继续发布,直到满足预期为止。

在 Weave Cloud 中,Git 控制的金丝雀发布具有完全可观察性

通过流水线推送变更,您可以向用户发送部分一定比例的流量。使用 Weave Cloud,您可以在仪表板中观察金丝雀是否按预期工作。如果有问题可以继续修改,然后推出下一个版本,对其进行标记后通过同一流水线部署。这就是 GitOps 工作流程帮助您管理的迭代过程。

总结

Alexis Richardson 给了我们关于 GitOps 的概述,以及为什么您需要在管理运行在 Kubernetes 和 Istio 上的应用程序时考虑这种方法。然后 Varun Talwar 谈到了 Istio 是什么以及如何使用 GitOps 工作流程来管理应用程序。最后,Stefan Prodan 向我们展示了一个特殊用例,其中非原子工作流程(如金丝雀发布)也可以通过像 Istio 这样的服务网格上的 GitOps 进行管理。

本文转载自:https://mp.weixin.qq.com/s/Zt8BjW4GhR89jhprG8hD8A

openthings
粉丝 320
博文 1129
码字总数 675031
作品 1
东城
架构师
私信 提问
服务网格Istio管理面板-Naftis

Naftis(https://github.com/xiaomi/naftis) 是一个基于 web 的 Istio dashboard,通过任务模板的方式来帮助用户更方便地执行 Istio 任务。 用户可以在 Naftis 中定义自己的任务模板,并填充变...

openthings
01/03
148
0
小米正式开源 Istio 管理面板 Naftis

近年来服务网格(Service Mesh)已成为各大公司关注重点,各大公司纷纷开始调研 Service Mesh 相关架构。作为 Service Mesh 中的佼佼者, Istio 诞生之初就已吸引众多目光。 作为基础设施层,...

Newt0n
2018/10/25
10.6K
7
五大Kubernetes最佳实践

在最近的一次Weave用户组在线会议WOUG[1]上两个工程师做了Kubernetes相关的分享。 谷歌云的开发者布道师Sandeep Dinesh(@SandeepDinesh)做了一个演讲,给大家列举了在Kubernetes上运行应用...

Docker
2018/04/15
0
0
数人云|服务网格新生代Istio进化,与传统模式相较5大特性更助容器扩展

关于Service Mesh,数人云之前给大家分享了敖小剑老师的《Qcon2017实录 Service Mesh:下一代微服务》那么它对于容器相比传统模式都有哪方面的优势呢?同作为Service Mesh的新生代,Istio v...

数人云
2017/10/31
73
0
Choerodon猪齿鱼 0.18 发布,开源多云技术平台

Choerodon猪齿鱼开源多云技术平台,是基于开源技术Kubernetes,Istio,knative,Gitlab,Spring Cloud来实现本地和云端环境的集成,实现企业多云/混合云应用环境的一致性。平台通过提供精益敏...

Choerodon
07/01
2K
2

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部