1. 程式人生 > 程式設計 >Rancher極簡service mesh產品Rio試玩(基於k3s)

Rancher極簡service mesh產品Rio試玩(基於k3s)

1、簡介:

istio 是 service mesh 界的明星專案,今天要試玩的是它的低配版Rio。
Rio 是Rancher新出的一款輕量級service mesh產品,基於linkerd2,相當輕。但麻雀雖小,五臟俱全,基本上istio有的功能,它都有。
github:github.com/rancher/rio

由於是低配版,本文叢集也選擇k8s的低配版k3s
整個環境執行起來只需要2G記憶體,相比istio要輕量很多,一臺2C4G的主機,即可流暢體驗service mesh的魅力。

本文主要介紹一下安裝過程,然後執行一個bookinfo示例,實現金絲雀釋出。

2、應用版本:

  • k3s:1.0.0
  • Rio:0.6.0
  • Rancher:2.3.3

開始之前我們需準備最低配置2C4G主機一臺,安裝好docker

3、安裝k3s:(如果你已有k8s環境,可以跳過此步驟,直接在k8s上體驗Rio)

官方介紹的安裝方式相當簡單,執行如下命令即可

curl -sfL https://get.k3s.io | sh -
複製程式碼

(國內網路用這條命令會安裝不成功,github上的release包下載不下來)
Rancher的產品易用性做的還是相當不錯的,只是這對國內網路的使用者不太友好(* ̄︶ ̄)

下載k3s安裝包

我們需要先fan qiang把k3s的安裝包下載下來,然後再安裝
根據伺服器的架構型別選擇相應的release包下載:

github.com/rancher/k3s…
一般伺服器都是x86,選擇amd64的即可,arm64是低功耗裝置的架構,比如手機

image.png

下載工具推薦:
代理: github.com/killgcd/chr…
嫌代理麻煩也可以用這個下載工具:Free Download Manager

安裝

把下載的release包上傳到伺服器的/usr/local/bin/目錄下,命名為k3s
然後執行如下命令

chmod +x /usr/local/bin/k3s
export INSTALL_K3S_SKIP_DOWNLOAD=true
export INSTALL_K3S_EXEC="server --docker --no-deploy=traefik"
curl -sfL https://get.k3s.io | sh - 複製程式碼

配置kubectl

k3s安裝好之後,叢集配置檔案在/etc/rancher/k3s/k3s.yaml ,把它放到.kube下即可通過kubectl訪問叢集

cp /etc/rancher/k3s/k3s.yaml   ~/.kube/config

sudo kubectl get nodes #檢視安裝主機節點,需要安裝kubectl
複製程式碼

kubectl下載地址:docs.rancher.cn/rancher2x/i…
下載後放到/usr/local/bin目錄下,增加執行許可權即可

以上k3s單節點即安裝完畢

4、Rancher2安裝

(此步驟不是必須,但由於安裝Rio時很多映象是在gcr.io下的,國內無法訪問,所以需要安裝Rancher後,才能直觀的知道哪些映象需要自己手動去下載)

1.Rancher單節點安裝(兩種方式都可以)

1、官方檔案上的方式安裝 2、docker-compose方式安裝(需要安裝docker-compose,不會安裝的自行百度搜索)

version: "2.4"
services:
  rancher:
    image: rancher/rancher:latest
    restart: always
    container_name: rancher2
    volumes:
      - /root/deploy/rancher/rancher2:/var/lib/rancher
      - /root/deploy/rancher/log/auditlog:/var/log/auditlog \
    ports:
      - 8443:443
      - 8000:80
複製程式碼

將以上內容儲存為/root/deploy/rancher/docker-compose.yaml
然後執行如下命令即可

cd /root/deploy/rancher/
docker-compose build
docker-compose up -d
複製程式碼
2.訪問Rancher

瀏覽器開啟:https://你的伺服器ip:8443/

rancher叢集列表頁

5、Rancher2匯入k3s叢集

1.建立叢集

點選新增叢集,選擇匯入,然後輸入叢集名稱,點選建立

選擇匯入

新增叢集

2.匯入k3s叢集

複製最後一條命令
複製圖示的最後一條命令,去伺服器上執行,然後等待匯入完成。
匯入完成,並且顯示有一臺主機

以上為rancher匯入k3s叢集步驟

6、Rio安裝

經過前面這麼長的準備,終於來到今天的主角Rio的安裝了。
官方介紹Rio的安裝也相當簡單

$ curl -sfL https://get.rio.io | sh -  
$ rio install
複製程式碼
1.同樣是國內網路問題,rio的安裝包需要手動下載

先下載Rio安裝包:github.com/rancher/rio…
選擇amd64下載

image.png

將下載下來的rio安裝包複製到/usr/local/bin/目錄下,重新命名為rio

chmod +x /usr/local/bin/rio #給rio新增執行許可權
複製程式碼
2.將rio安裝到k3s叢集上
rio install --ip-address 192.168.3.xx --disable-features build 
#--ip-address 為你伺服器節點區域網ip,如果有外網ip請使用外網ip,多個可以逗號分隔。
#--disable-features build 當前rio版本國內安裝建議禁用build功能,build功能安裝時拉取的映象是通過簽名獲取的而不是通過tag,所以下載有點問題,即便是通過修改該下載後的映象的tag,使得安裝成功,執行build功能的時候請求github也有tls的問題,各位有興趣可以去嘗試。
rio -n rio-system pods #檢視部署情況
$ rio -a ps # 檢視程式
$ rio info #檢視rio詳情
複製程式碼

succeeded即為安裝成功

不過同樣還是國內網路問題,gcr.io的映象包下載不來,部署進度會卡住

3.檢視哪些gcr.io映象拉不下來

命令列下無法直觀看出我們哪些映象下載不下的,所以需要藉助Rancher2
先進入Rancher控制檯,進入k3s叢集,點選名稱空間管理,將linkerd和rio-system兩個名稱空間移動到default下

將rio的namespace移動到default專案下
然後進入default
此時各位顯示的應該是一片飄紅,因為映象拉不下來
點選紅色安裝有問題的負載,進入pod,點選事件,找到image “gcr.io/linkerd-id/xxxxx” pull失敗之類的錯誤,
可以看到哪些映象拉不下來

4.手動下載gcr.io映象

說到這gcr.io映象的下載,就不得不推薦一下這個專案:github.com/zhangguanzh…
一個命令即可將 查詢映象,pull映象,重新命名tag一次性搞定
比如要拉取gcr.io/google_containers/pause:3.1這映象,則執行如下命令即可

curl -s https://zhangguanzhang.github.io/bash/pull.sh | bash -s -- gcr.io/google_containers/pause:3.1
複製程式碼

有了這個神器,則只需要將rancher上飄紅的所有拉取失敗映象,自己手動拉取一遍即可
直到全部變綠,就沒啥問題了。
執行命令檢視安裝情況

rio -n rio-system pods #檢視部署情況
複製程式碼

succeeded即為安裝成功
如果發現不是succeeded狀態,就需要重新安裝,由於之前已經下載好了映象,重新安裝就很順暢了

rio uninstall # 先解除安裝
rio install --ip-address 192.168.3.xx --disable-features build  #再重新安裝
複製程式碼

基本上看到succeeded即表示rio成功安裝,接下來就可以部署應用進行體驗了

6、部署一個nginx試試

通過rio run 命令即可部署一個nginx服務。

#rio run -p 80:8080 https://github.com/rancher/rio-demo #由於禁用build功能,無法通過原始碼打包映象方式部署
rio run -p 80:80 nginx #只能通過映象庫下載映象部署
rio ps #檢視部署情況
複製程式碼

剛部署的nginx程式
將圖示中的網址複製到瀏覽器上即可訪問服務
rio會自動將*.xxxx.on-rio.io域名解析到安裝時配置的ip-address下,所以該域名指向的就是你叢集節點的伺服器。
如果安裝時沒有配置ip-address,你也可以將該域名在hosts上配置解析到你的伺服器節點ip上,即可訪問到。
image.png

7、rio dashboard

rio還提供了一個管理控制檯

rio dashboard
複製程式碼

image.png

不用管報出來的錯(那是無法開啟伺服器上的瀏覽器報的錯),直接複製打印出來的瀏覽器地址去訪問即可。第一次訪問需要設定管理員賬號密碼。

dashboard

8、linkerd-web

rio內部集成了linkerd2作為微服務治理框架,所以也提供了linkerd-web的管理後臺

# rio linkerd # 官方介紹的訪問命令是這個,不過對這個命令連檔案都沒有,應該還不太完善
Forwarding from 127.0.0.1:9999 -> 8084
Forwarding from [::1]:9999 -> 8084
複製程式碼

執行這個命令後,會阻塞,然後開啟9999埠,可以通過9999埠在去訪問linkerd-web
不過它forwarding出來的卻不支援外網或區域網訪問,只支援ipv4/ipv6的本機訪問,伺服器上又沒有裝瀏覽器,訪問個鳥o(╥﹏╥)o 因為linkerd-web目前沒有認證鑑權功能,暴露出來不太安全,所以僅本機訪問也說的過去。
那就只能另尋辦法了,我們通過nginx代理將linkerd-web暴露出來

nginx配置映象: github.com/greper/rio-…
此程式碼已經打包成映象上傳到dockerhub上
映象名稱為: xiao5233/linkerd-web-nginx:1.1

在linkerd名稱空間部署該映象,隨便暴露一個埠,如下圖建立服務即可將linkerd-web代理暴露出來

通過nginx代理將linkerd-web暴露出來
瀏覽器訪問 http://伺服器ip:87/ 即可開啟linkerd-web
有簡單的服務流向圖,不過比kiali還是差點兒(目前這個版本rio還沒有整合kiali,不過看issue好像快要支援了)
linkerd-web
瀏覽器訪問 http://伺服器ip:87/grafana 即可開啟grafana
grafana

9、實戰,部署一套bookinfo玩玩

開啟dashboard,點選services,然後點選create

部署服務
如下圖所示,建立productpage服務

服務名稱 映象
productpage docker.io/istio/examples-bookinfo-productpage-v1:1.15.0 9080

productpage

然後建立其他服務,埠都是9080,可以不勾選Exposed,這些都是內部服務,無需暴露訪問地址

服務名稱 映象
details docker.io/istio/examples-bookinfo-details-v1:1.15.0 9080
ratings docker.io/istio/examples-bookinfo-ratings-v1:1.15.0 9080
reviews docker.io/istio/examples-bookinfo-reviews-v1:1.15.0 9080

部署完成
訪問productpage試試

rio ps #找到productpage的訪問地址,複製到瀏覽器訪問
複製程式碼

也可以在dashboard點選服務,找到endpoints 中點選連結訪問

bookinfo v1
linkerd-web會展示如下服務結構圖以及流量情況

10、金絲雀釋出

接下來給reviews進行v2 v3版本的金絲雀釋出

點選Stage New Version
釋出v2版本,承擔50的流量
再釋出一個v3版本,承擔33的流量
3個版本分別承擔33%的流量

現在訪問productpage,評論區會輪流出現不同顏色的星星和v1版本的沒有星星

黑星星
紅星星
流量圖

當v2 v3版本測試沒有問題之後,即可逐步將v1版本的weight設定為0,最後下線v1版本,一次新版本釋出就完成了

11、總結

本文介紹了k3s、rancher、rio的安裝(其中rio禁掉了build功能)
然後部署了一套istio的示例應用bookinfo
然後體驗了一下使用rio進行金絲雀釋出應用版本

總體來說,除了安裝時候映象下載的問題之外,其他都很流暢
資源消耗來講,istio動不動8g就沒有了,rio部署完只用了2G多
資源佔用低,適合小公司使用,等後續istio解決了效能問題,也可以直接無痛轉到istio上去。
不過目前rio還是beta版,不建議生產環境使用

好了,本次試玩到此結束,感謝閱讀 .