Linkerd2 (曾命名為 Conduit) 是 Buoyant 公司推出的下一代輕量級服務網格框架,開源在 https://github.com/linkerd/linkerd2。與linkerd 不同的是,它專用於Kubernetes 集群中,並且比linkerd 更輕量級(基於Rust 和Go,沒有了JVM 等大內存的開銷),可以以sidecar 的方式把代理服務跟實際服務的Pod 運行在一起(這點跟Istio 類似)。 Linkerd2 的主要特性包括:
 
輕量級,速度快,每個代理容器僅佔用 10mb RSS,並且額外延遲只有亞毫妙級
安全,基於 Rust,默認開啟 TLS
點到點可視化
增強 Kubernetes 的可靠性、可視性以及安全性

官網 https://linkerd.io/2/getting-started/

先確認有運行1.13或更高版本的Kubernetes環境
kubectl version --short
Client Version: v1.16.2
Server Version: v1.13.11-gke.14
 
1.安裝Linkerd CLI 下載並安裝 這個是可以執行Linkerd互動的後台指令
mac安裝指令
brew install linkerd
檢查安裝是否成功及確認版本
linkerd version
Client version: stable-2.6.1
Server version: unavailable
 
server version看到unavailable是因為還沒在集群上安裝控制介面
 
2.驗證Kubernetes集群是否可以安裝Linkerd
linkerd check --pre
 
3.將Linkerd安裝到集群上
linkerd install | kubectl apply -f -
安裝可能需要1-2分鐘下載映象
可以通過運行以下命令來驗證安裝
linkerd check
直到Linkerd安裝完畢後,正在運作且狀況正常 可以用以下指令查看安裝了哪些組件
kubectl -n linkerd get deploy
這個時候再下linkerd version可以看到server的版本
4.Linkerd控制介面
可以執行以下命令查看Linkerd Dashboard
linkerd dashboard
 
可以看到很詳細的後台 同時在web介面上還配置有Grafana的監控

 
5.安裝測試應用
以下命令將emojivoto安裝到emojivoto Namespace當中
curl -sL https://run.linkerd.io/emojivoto.yml \ | kubectl apply -f -
 
轉發表情應用的web服務
kubectl -n emojivoto port-forward svc/web-svc 8080:80
 
開啟localhost:8080
您可能會注意到emojivoto的某些部分已損壞!例如,如果您單擊甜甜圈表情符號,則將顯示404頁面。不用擔心,這些錯誤是故意的。而且我們可以使用Linkerd來識別問題。如果您有興趣了解如何準確找出問題所在
 
將Linkerd添加emojivoto該命名空間運行的所有部署,通過運行清單linkerd inject,然後將其重新應用於集群。該linkerd inject命令向Pod規範添加註釋,指示Linkerd將代理添加(“注入”)作為Pod規範的容器。
 
 
kubectl get -n emojivoto deploy -o yaml \
  | linkerd inject - \
  | kubectl apply -f -
 
注入還有另一種作法就是寫在Namespace yaml檔裡面 只要有資源開起來指定的命名空間就會自動注入範例檔如下
apiVersion: v1
kind: Namespace
metadata:
  annotations:
    linkerd.io/inject: enabled
  labels:
    istio-injection: disabled
  name: default
spec:
  finalizers:
  - kubernetes
status:
  phase: Active
6.查看執行狀態
 
以下命令查看實時流量指標
linkerd -n emojivoto stat deploy
佈署redis gluster(細節請參考另一篇安裝) 將redis gluster的命名空間default 使用linkerd inject 加入到linkerd
 
cd /Users/tony.wu/ace/redis/cluster
kubectl apply -f redis-sts-istio.yaml
kubectl apply -f redis-svc.yaml
 
驗證檢查安裝是否正確
#kubectl exec -it redis-cluster-0 -- redis-cli -a spock123 cluster info
#for x in $(seq 0 5); do echo "redis-cluster-$x"; kubectl exec redis-cluster-$x -- redis-cli -a spock123 role; echo; done
 
7.把redis gluster加入Linkerd
 
redis集群是在pod 命名空間是default底下
kubectl get -n default pod -o yaml \
  | linkerd inject - \
  | kubectl apply -f -
 
後台選Default即可看到redis相關的項目
 
參考資料
https://linkerd.io/2016/10/04/a-service-mesh-for-kubernetes-part-i-top-line-service-metrics/
https://philcalcado.com/2017/08/03/pattern_service_mesh.html
https://linkerd.io/2/overview/

By tony

自由軟體愛好者~喜歡不斷的思考各種問題,有新的事物都會想去學習嘗試 做實驗並熱衷研究 沒有所謂頂天的技術 只有謙虛及不斷的學習 精進專業,本站主要以分享系統及網路相關知識、資源而建立。 Github http://stnet253.github.io

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料