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包下載:
一般伺服器都是x86,選擇amd64的即可,arm64是低功耗裝置的架構,比如手機
下載工具推薦:
代理: 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/
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下載
將下載下來的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詳情
複製程式碼
不過同樣還是國內網路問題,gcr.io的映象包下載不來,部署進度會卡住
3.檢視哪些gcr.io映象拉不下來
命令列下無法直觀看出我們哪些映象下載不下的,所以需要藉助Rancher2
先進入Rancher控制檯,進入k3s叢集,點選名稱空間管理,將linkerd和rio-system兩個名稱空間移動到default下
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狀態,就需要重新安裝,由於之前已經下載好了映象,重新安裝就很順暢了
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 #檢視部署情況
複製程式碼
將圖示中的網址複製到瀏覽器上即可訪問服務rio會自動將*.xxxx.on-rio.io域名解析到安裝時配置的ip-address下,所以該域名指向的就是你叢集節點的伺服器。
如果安裝時沒有配置ip-address,你也可以將該域名在hosts上配置解析到你的伺服器節點ip上,即可訪問到。
7、rio dashboard
rio還提供了一個管理控制檯
rio 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代理暴露出來
有簡單的服務流向圖,不過比kiali還是差點兒(目前這個版本rio還沒有整合kiali,不過看issue好像快要支援了)
瀏覽器訪問 http://伺服器ip:87/grafana 即可開啟grafana
9、實戰,部署一套bookinfo玩玩
開啟dashboard,點選services,然後點選create
服務名稱 | 映象 | 埠 |
---|---|---|
productpage | docker.io/istio/examples-bookinfo-productpage-v1:1.15.0 | 9080 |
然後建立其他服務,埠都是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 |
rio ps #找到productpage的訪問地址,複製到瀏覽器訪問
複製程式碼
也可以在dashboard點選服務,找到endpoints 中點選連結訪問
10、金絲雀釋出
接下來給reviews進行v2 v3版本的金絲雀釋出
現在訪問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版,不建議生產環境使用
好了,本次試玩到此結束,感謝閱讀 .