跳转至

流量转移

前提条件

  1. 已安装 Dubbo 控制平面的 Kubernetes 集群
  2. 已配置 kubectl 以访问集群

部署

1. 创建命名空间

kubectl create ns app
kubectl label namespace app dubbo-injection=enabled

2. 部署服务

kubectl apply -f samples/app/deployment.yaml

将 63% 的流量分配到 v1,37% 的流量分配到 v2:

cat <<EOF | kubectl apply -f -
apiVersion: networking.dubbo.apache.org/v1alpha3
kind: MeshService
metadata:
  name: nginx-routing
  namespace: app
spec:
  hosts:
  - nginx.app.svc.cluster.local
  routes:
  - service:
    - name: v1
      host: nginx.app.svc.cluster.local
      labels:
        version: v1
      port:
        number: 80
      weight: 63
    - name: v2
      host: nginx.app.svc.cluster.local
      labels:
        version: v2
      port:
        number: 80
      weight: 37
EOF

xclient 使用逐请求选路,不再先算好固定数量再批量发送。

kubectl -n app exec deploy/nginx-consumer -- dubbod xclient 100 | sort | uniq -c

先在一个终端持续发请求;另一个终端里创建 MeshService 权重。同一个 xclient 进程会继续使用同一条 xDS stream,后续请求会按新权重切换。

kubectl -n app exec deploy/nginx-consumer -- dubbod xclient --request-interval 200ms 200

清理

kubectl -n app delete meshservice nginx-routing
kubectl delete -f samples/app/deployment.yaml
kubectl delete ns app