主要内容源于 https://blog.buoyant.io/2016/11/04/a-service-mesh-for-kubernetes-part-iv-continuous-deployment-via-traffic-shifting/ ,砍掉了 Jenkins 等附加部分,更换了更加易于理解的示例应用,以保证主干突出。
Kubernetes 所提供的 rolling-update 功能提供了一种渐进式的更新过程,然而其滚动过程并不容易控制,对于灰度发布的需要来说,仍稍显不足,这里介绍一种利用 Linkerd 方案进行流量切换的思路。
官网介绍:linker∙d is a transparent proxy that adds service discovery, routing, failure handling, and visibility to modern software applications。
本文从实际操作入手,上线两个版本的简单应用,利用这一组合完成流量的切换和测试过程。
测试目标
- 同时上线两个版本的应用。两个应用均可工作,利用不同输出进行区分。
- 动态调整分配给两个版本的流量。
- 利用 CURL 进行流量分配的测试。
准备工作
这里利用一个 1.2 以上版本的 Kubernetes 集群进行演示:
- API Server / Registry:10.211.55.62
- Node:10.211.66.63
另外因某些原因,需要有能力获取 Dockerhub 的镜像。
例子程序很简单,用一个 PHP 文件显示环境变量中的内容: