您好,登錄后才能下訂單哦!
怎樣在Linkerd2中進行流量拆分,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
最新發布的 Linkerd 2.4,加入了對流量拆分的支持。
安裝最新版本之后,可以看到這個流量拆分功能所使用的 API 資源并非來自 Linkerd,而是 SMI 規范的一部分。
$ curl -sL https://run.linkerd.io/install | sh
...
$ kubectl api-resources | grep -i split
trafficsplits ts split.smi-spec.io true TrafficSplit
和 Istio 的 Service + Selector 的拆分方式不同,Linkerd 其實沒有什么特別的上游定義方式,簡單的定義獨立的 Service 即可。例如我們要從 flaskapp
服務分流到 v1 和 v2 兩個版本,在 Istio 中,需要定義一個 flaskapp 服務,然后使用標簽,在 Service 的標簽子集中,選擇兩組 Subset 作為目的地。而在 Linkerd/SMI 中,就需要分別定義三個服務了,例如 flaskapp、flaskapp-v1、flaskapp-v2。下面簡單操練一下。
$ wget https://raw.githubusercontent.com/fleeto/istio-for-beginner/master/code/flaskapp/flaskapp.istio.yaml
$ linkerd inject flaskapp.istio.yaml | kubectl apply -f -
...
$ wget https://raw.githubusercontent.com/fleeto/istio-for-beginner/master/code/sleep/sleep.yaml
$ linkerd inject sleep.yaml | kubectl apply -f -
...
分別安裝了兩個版本的 flaskapp,和一個版本的 sleep 服務之后。再創建兩個 flaskapp 的分版本服務。
apiVersion: v1
kind: Service
metadata:
name: flaskapp-v1
labels:
app: flaskapp
spec:
selector:
app: flaskapp
version: v1
ports:
- name: http
port: 80
targetPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: flaskapp-v2
labels:
app: flaskapp
spec:
selector:
app: flaskapp
version: v2
ports:
- name: http
port: 80
targetPort: 80
創建兩個服務之后,就可以嘗試拆分了,同樣是一個 YAML:
apiVersion: split.smi-spec.io/v1alpha1
kind: TrafficSplit
metadata:
name: flask-split
spec:
service: flaskapp
backends:
- service: flaskapp-v1
weight: 1
- service: flaskapp-v2
weight: 500m
注意這里的定義和 Istio 也稍有不同,使用權重而非百分比進行分流。
可以在 Sleep 中進行測試:
$ for i in {1..1000}; do curl -sSL http://flaskapp/env/version | grep v1; done | wc -l
660
可以看到,按照我們的權重分配,成功進行了分流。但是目前在 SMI 中并沒有看到條件選擇的相關內容,因此目前的功能可能還比較初級。可以通過 Flagger 的加持,實現更加復雜的功能。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。