在 Kubernetes 中有几种不同的方式来发布应用程序,您需要仔细选择正确的策略来使您的基础设施具有弹性。
- 重新创建(recreate): 终止旧版本并发布新版本
- 滚动更新(ramped): 以滚动更新的方式发布新版本,逐个替换
- 蓝绿部署(blue/green): 在旧版本旁边发布新版本,然后切换流量
- 金丝雀发布(canary): 向一部分用户发布新版本,然后进行全面推广
- A/B 测试(ab-testing): 以精确的方式(HTTP 头、Cookie、权重等)向一部分用户发布新版本。这在 Kubernetes 中不是开箱即用的,需要额外的工作来设置更智能的负载均衡系统(Istio、Linkerd、Traeffik、自定义 nginx/haproxy 等)。
- 流量镜像(shadow): 在旧版本旁边发布新版本。传入的流量会被镜像到新版本,但不会影响响应。
在进行实验之前,请查看以下资源:
这些示例是在运行 Kubernetes v1.25.2 的 Minikube 和运行 Kubernetes 1.23.6 的 Rancher Desktop 上创建和测试的。
在 MacOS 上,hypervisor VM 没有外部连接,因此 docker 镜像拉取会失败。为了解决这个问题,请安装另一个驱动程序,如
VirtualBox 并在命令中添加 --vm-driver virtualbox
以便能够拉取镜像。
$ minikube start --kubernetes-version v1.25.2 --memory 8192 --cpus 2
以下步骤描述了如何设置 Prometheus 和 Grafana 来可视化部署的进度和性能。
要安装 Helm3,请按照其 网站上提供的说明进行操作。
$ helm install prometheus prometheus-community/prometheus \
--create-namespace --namespace=monitoring \
-f prometheus-override.yaml
$ helm install grafana \
--namespace=monitoring \
--set=adminUser=admin \
--set=adminPassword=admin \
--set=service.type=NodePort \
grafana/grafana
现在 Prometheus 和 Grafana 已经运行,您可以访问 Grafana:
$ minikube service grafana -n monitoring
要登录,用户名:admin,密码:admin。
然后您需要将 Grafana 连接到 Prometheus,为此,请添加一个数据源:
Name: prometheus
Type: Prometheus
Url: http://prometheus-server
Access: Server
创建一个带有时间序列的仪表板或导入 JSON 导出文件 - 首先更新 Prometheus 源的 UID。使用以下查询:
sum(rate(http_requests_total{app="my-app"}[2m])) by (version)
由于我们使用默认设置安装了 Prometheus,它使用默认的抓取间隔 1m,因此范围不能低于此值。
为了更好地查看版本信息,在图例字段中添加 {{version}}。
重新创建:
滚动更新:
蓝绿部署:
金丝雀发布:
A/B 测试:
流量镜像:






