/k8s-deploy

k8s发布策略

Primary LanguageGo

Kubernetes 部署策略

在 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 进行可视化

以下步骤描述了如何设置 Prometheus 和 Grafana 来可视化部署的进度和性能。

安装 Helm3

要安装 Helm3,请按照其 网站上提供的说明进行操作。

安装 Prometheus

$ helm install prometheus prometheus-community/prometheus \
    --create-namespace --namespace=monitoring \
    -f prometheus-override.yaml

安装 Grafana

$ helm install grafana \
    --namespace=monitoring \
    --set=adminUser=admin \
    --set=adminPassword=admin \
    --set=service.type=NodePort \
    grafana/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}}

示例图表

重新创建:

Kubernetes deployment recreate

滚动更新:

Kubernetes deployment ramped

蓝绿部署:

Kubernetes deployment blue-green

金丝雀发布:

Kubernetes deployment canary

A/B 测试:

kubernetes ab-testing deployment

流量镜像:

kubernetes shadow deployment