iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0

測試環境版本:
> istio: 1.13.1
> kubernetes: v1.23.4

本次測試使用istio提供的HelloWorld v1v2 example

部署HelloWorld、Sleep

HelloWorld、Sleep兩個微服務在驗證跨叢集流量時已部署,如已存在可跳過

在cluster1部署HelloWorld v1

kubectl apply --context="${CTX_CLUSTER1}" \
    -f samples/helloworld/helloworld.yaml \
    -l version=v1 -n sample

在cluster2部署HelloWorld v2

kubectl apply --context="${CTX_CLUSTER2}" \
    -f samples/helloworld/helloworld.yaml \
    -l version=v2 -n sample

部署sleep

kubectl apply --context="${CTX_CLUSTER1}" \
    -f samples/sleep/sleep.yaml -n sample
kubectl apply --context="${CTX_CLUSTER2}" \
    -f samples/sleep/sleep.yaml -n sample

部署金絲雀部署

  • weight: 流量權重,權重越高的版本會收到較高的流量,如下就是v1會收到大部分的流量

canary.yaml

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: helloworld
spec:
  hosts:
    - helloworld
  http:
  - route:
    - destination:
        host: helloworld.sample.svc.cluster.local
        subset: v1
      weight: 80
    - destination:
        host: helloworld.sample.svc.cluster.local
        subset: v2
      weight: 20
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: helloworld
spec:
  host: helloworld.sample.svc.cluster.local
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2

部署金絲雀部署

kubectl apply -f canary.yaml -n sample


### 結果測試
```bash=
for i in $(seq 10); do kubectl --context=$CTX_CLUSTER1 \
    -n sample exec "$(kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l app=sleep -o jsonpath='{.items[0].metadata.name}')" \
    -c sleep -- curl -s helloworld:5000/hello; done


上一篇
# 17-Istio 多叢集容錯(2)-熔斷
下一篇
19-Istio free5gc 核心網路跨叢集部署
系列文
5哥窟-5G與肝臟買賣30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言