Rancher極簡(jiǎn)service mesh產(chǎn)品Rio安裝試玩(基于k3s)

1、簡(jiǎn)介:

istio 是 service mesh 界的明星項(xiàng)目,今天要試玩的是它的低配版Rio。
Rio 是Rancher新出的一款輕量級(jí)service mesh產(chǎn)品,基于linkerd2,相當(dāng)輕。但麻雀雖小,五臟俱全,基本上istio有的功能,它都有。
github:https://github.com/rancher/rio
由于是低配版,本文集群也選擇k8s的低配版k3s
整個(gè)環(huán)境運(yùn)行起來(lái)只需要2G內(nèi)存,相比istio要輕量很多,一臺(tái)2C4G的主機(jī),即可流暢體驗(yàn)service mesh的魅力。

本文主要介紹一下安裝過(guò)程,然后運(yùn)行一個(gè)bookinfo示例,實(shí)現(xiàn)金絲雀發(fā)布。

2、應(yīng)用版本:

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

開(kāi)始之前我們需準(zhǔn)備最低配置2C4G主機(jī)一臺(tái),安裝好docker

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

官方介紹的安裝方式相當(dāng)簡(jiǎn)單,執(zhí)行如下命令即可

curl -sfL https://get.k3s.io | sh -

(國(guó)內(nèi)網(wǎng)絡(luò)用這條命令會(huì)安裝不成功,github上的release包下載不下來(lái))
Rancher的產(chǎn)品易用性做的還是相當(dāng)不錯(cuò)的,只是這對(duì)國(guó)內(nèi)網(wǎng)絡(luò)的用戶不太友好(* ̄︶ ̄)

下載k3s安裝包

我們需要先f(wàn)an qiang把k3s的安裝包下載下來(lái),然后再安裝
根據(jù)服務(wù)器的架構(gòu)類型選擇相應(yīng)的release包下載: https://github.com/rancher/k3s/releases
一般服務(wù)器都是x86,選擇amd64的即可,arm64是低功耗設(shè)備的架構(gòu),比如手機(jī)

image.png

下載工具推薦:
代理: https://github.com/killgcd/chromego
嫌代理麻煩也可以用這個(gè)下載工具:Free Download Manager

安裝

把下載的release包上傳到服務(wù)器的/usr/local/bin/目錄下,命名為k3s
然后執(zhí)行如下命令

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下即可通過(guò)kubectl訪問(wèn)集群

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

sudo kubectl get nodes #查看安裝主機(jī)節(jié)點(diǎn),需要安裝kubectl

kubectl下載地址:https://docs.rancher.cn/rancher2x/install-prepare/download/kubernetes.html
下載后放到/usr/local/bin目錄下,增加執(zhí)行權(quán)限即可

以上k3s單節(jié)點(diǎn)即安裝完畢

4、Rancher2安裝

(此步驟不是必須,但由于安裝Rio時(shí)很多鏡像是在gcr.io下的,國(guó)內(nèi)無(wú)法訪問(wèn),所以需要安裝Rancher后,才能直觀的知道哪些鏡像需要自己手動(dòng)去下載)

1.Rancher單節(jié)點(diǎn)安裝(兩種方式都可以)

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

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

將以上內(nèi)容保存為/root/deploy/rancher/docker-compose.yaml
然后執(zhí)行如下命令即可

cd /root/deploy/rancher/
docker-compose build
docker-compose up -d
2.訪問(wèn)Rancher

瀏覽器打開(kāi):https://你的服務(wù)器ip:8443/


rancher集群列表頁(yè)

5、Rancher2導(dǎo)入k3s集群

1.創(chuàng)建集群

點(diǎn)擊添加集群,選擇導(dǎo)入,然后輸入集群名稱,點(diǎn)擊創(chuàng)建


選擇導(dǎo)入
添加集群
2.導(dǎo)入k3s集群
復(fù)制最后一條命令

復(fù)制圖示的最后一條命令,去服務(wù)器上執(zhí)行,然后等待導(dǎo)入完成。


導(dǎo)入完成,并且顯示有一臺(tái)主機(jī)

以上為rancher導(dǎo)入k3s集群步驟

6、Rio安裝

經(jīng)過(guò)前面這么長(zhǎng)的準(zhǔn)備,終于來(lái)到今天的主角Rio的安裝了。
官方介紹Rio的安裝也相當(dāng)簡(jiǎn)單

$ curl -sfL https://get.rio.io | sh -  
$ rio install
1.同樣是國(guó)內(nèi)網(wǎng)絡(luò)問(wèn)題,rio的安裝包需要手動(dòng)下載

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

image.png

將下載下來(lái)的rio安裝包復(fù)制到/usr/local/bin/目錄下,重命名為rio

chmod +x /usr/local/bin/rio #給rio添加執(zhí)行權(quán)限
2.將rio安裝到k3s集群上
rio install --ip-address 192.168.3.xx --disable-features build 
#--ip-address 為你服務(wù)器節(jié)點(diǎn)局域網(wǎng)ip,如果有外網(wǎng)ip請(qǐng)使用外網(wǎng)ip,多個(gè)可以逗號(hào)分隔。
#--disable-features build 當(dāng)前rio版本國(guó)內(nèi)安裝建議禁用build功能,build功能安裝時(shí)拉取的鏡像是通過(guò)簽名獲取的而不是通過(guò)tag,所以下載有點(diǎn)問(wèn)題,即便是通過(guò)修改該下載后的鏡像的tag,使得安裝成功,運(yùn)行build功能的時(shí)候請(qǐng)求github也有tls的問(wèn)題,各位有興趣可以去嘗試。
rio -n rio-system pods #查看部署情況
$ rio -a ps # 查看進(jìn)程
$ rio info #查看rio詳情
succeeded即為安裝成功

不過(guò)同樣還是國(guó)內(nèi)網(wǎng)絡(luò)問(wèn)題,gcr.io的鏡像包下載不來(lái),部署進(jìn)度會(huì)卡住

3.查看哪些gcr.io鏡像拉不下來(lái)

命令行下無(wú)法直觀看出我們哪些鏡像下載不下的,所以需要借助Rancher2
先進(jìn)入Rancher控制臺(tái),進(jìn)入k3s集群,點(diǎn)擊命名空間管理,將linkerd和rio-system兩個(gè)命名空間移動(dòng)到default下


將rio的namespace移動(dòng)到default項(xiàng)目下

然后進(jìn)入default


此時(shí)各位顯示的應(yīng)該是一片飄紅,因?yàn)殓R像拉不下來(lái)

點(diǎn)擊紅色安裝有問(wèn)題的負(fù)載,進(jìn)入pod,點(diǎn)擊事件,找到image “gcr.io/linkerd-id/xxxxx” pull失敗之類的錯(cuò)誤,
可以看到哪些鏡像拉不下來(lái)
4.手動(dòng)下載gcr.io鏡像

說(shuō)到這gcr.io鏡像的下載,就不得不推薦一下這個(gè)項(xiàng)目:https://github.com/zhangguanzhang/gcr.io
一個(gè)命令即可將 查找鏡像,pull鏡像,重命名tag一次性搞定
比如要拉取gcr.io/google_containers/pause:3.1這鏡像,則執(zhí)行如下命令即可

curl -s https://zhangguanzhang.github.io/bash/pull.sh | bash -s -- gcr.io/google_containers/pause:3.1

有了這個(gè)神器,則只需要將rancher上飄紅的所有拉取失敗鏡像,自己手動(dòng)拉取一遍即可
直到全部變綠,就沒(méi)啥問(wèn)題了。
執(zhí)行命令查看安裝情況

rio -n rio-system pods #查看部署情況
succeeded即為安裝成功

如果發(fā)現(xiàn)不是succeeded狀態(tài),就需要重新安裝,由于之前已經(jīng)下載好了鏡像,重新安裝就很順暢了

rio uninstall # 先卸載
rio install --ip-address 192.168.3.xx --disable-features build  #再重新安裝

基本上看到succeeded即表示rio成功安裝,接下來(lái)就可以部署應(yīng)用進(jìn)行體驗(yàn)了

6、部署一個(gè)nginx試試

通過(guò)rio run 命令即可部署一個(gè)nginx服務(wù)。

#rio run -p 80:8080 https://github.com/rancher/rio-demo #由于禁用build功能,無(wú)法通過(guò)源碼打包鏡像方式部署
rio run -p 80:80 nginx #只能通過(guò)鏡像庫(kù)下載鏡像部署
rio ps #查看部署情況
剛部署的nginx進(jìn)程

將圖示中的網(wǎng)址復(fù)制到瀏覽器上即可訪問(wèn)服務(wù)
rio會(huì)自動(dòng)將*.xxxx.on-rio.io域名解析到安裝時(shí)配置的ip-address下,所以該域名指向的就是你集群節(jié)點(diǎn)的服務(wù)器。
如果安裝時(shí)沒(méi)有配置ip-address,你也可以將該域名在hosts上配置解析到你的服務(wù)器節(jié)點(diǎn)ip上,即可訪問(wèn)到。


image.png

7、rio dashboard

rio還提供了一個(gè)管理控制臺(tái)

rio dashboard
image.png

不用管報(bào)出來(lái)的錯(cuò)(那是無(wú)法打開(kāi)服務(wù)器上的瀏覽器報(bào)的錯(cuò)),直接復(fù)制打印出來(lái)的瀏覽器地址去訪問(wèn)即可。第一次訪問(wèn)需要設(shè)置管理員賬號(hào)密碼。


dashboard

8、linkerd-web

rio內(nèi)部集成了linkerd2作為微服務(wù)治理框架,所以也提供了linkerd-web的管理后臺(tái)

# rio linkerd # 官方介紹的訪問(wèn)命令是這個(gè),不過(guò)對(duì)這個(gè)命令連文檔都沒(méi)有,應(yīng)該還不太完善
Forwarding from 127.0.0.1:9999 -> 8084
Forwarding from [::1]:9999 -> 8084

執(zhí)行這個(gè)命令后,會(huì)阻塞,然后打開(kāi)9999端口,可以通過(guò)9999端口在去訪問(wèn)linkerd-web
不過(guò)它forwarding出來(lái)的卻不支持外網(wǎng)或局域網(wǎng)訪問(wèn),只支持ipv4/ipv6的本機(jī)訪問(wèn),服務(wù)器上又沒(méi)有裝瀏覽器,訪問(wèn)個(gè)鳥(niǎo)o(╥﹏╥)o
因?yàn)閘inkerd-web目前沒(méi)有認(rèn)證鑒權(quán)功能,暴露出來(lái)不太安全,所以僅本機(jī)訪問(wèn)也說(shuō)的過(guò)去。
那就只能另尋辦法了,我們通過(guò)nginx代理將linkerd-web暴露出來(lái)

nginx配置鏡像: https://github.com/greper/rio-first/
此代碼已經(jīng)打包成鏡像上傳到dockerhub上
鏡像名稱為: xiao5233/linkerd-web-nginx:1.1

在linkerd命名空間部署該鏡像,隨便暴露一個(gè)端口,如下圖創(chuàng)建服務(wù)即可將linkerd-web代理暴露出來(lái)


通過(guò)nginx代理將linkerd-web暴露出來(lái)

瀏覽器訪問(wèn) http://服務(wù)器ip:87/ 即可打開(kāi)linkerd-web
有簡(jiǎn)單的服務(wù)流向圖,不過(guò)比kiali還是差點(diǎn)兒(目前這個(gè)版本rio還沒(méi)有集成kiali,不過(guò)看issue好像快要支持了)


linkerd-web

瀏覽器訪問(wèn) http://服務(wù)器ip:87/grafana 即可打開(kāi)grafana
grafana

9、實(shí)戰(zhàn),部署一套bookinfo玩玩

打開(kāi)dashboard,點(diǎn)擊services,然后點(diǎn)擊create


部署服務(wù)

如下圖所示,創(chuàng)建productpage服務(wù)

服務(wù)名稱 鏡像 端口
productpage docker.io/istio/examples-bookinfo-productpage-v1:1.15.0 9080
productpage

然后創(chuàng)建其他服務(wù),端口都是9080,可以不勾選Exposed,這些都是內(nèi)部服務(wù),無(wú)需暴露訪問(wèn)地址

服務(wù)名稱 鏡像 端口
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
部署完成

訪問(wèn)productpage試試

rio ps #找到productpage的訪問(wèn)地址,復(fù)制到瀏覽器訪問(wèn)

也可以在dashboard點(diǎn)擊服務(wù),找到endpoints 中點(diǎn)擊鏈接訪問(wèn)


bookinfo v1

linkerd-web會(huì)展示如下服務(wù)結(jié)構(gòu)圖以及流量情況

10、金絲雀發(fā)布

接下來(lái)給reviews進(jìn)行v2 v3版本的金絲雀發(fā)布


點(diǎn)擊Stage New Version

發(fā)布v2版本,承擔(dān)50的流量

再發(fā)布一個(gè)v3版本,承擔(dān)33的流量

3個(gè)版本分別承擔(dān)33%的流量

現(xiàn)在訪問(wèn)productpage,評(píng)論區(qū)會(huì)輪流出現(xiàn)不同顏色的星星和v1版本的沒(méi)有星星


黑星星

紅星星

流量圖

當(dāng)v2 v3版本測(cè)試沒(méi)有問(wèn)題之后,即可逐步將v1版本的weight設(shè)置為0,最后下線v1版本,一次新版本發(fā)布就完成了

11、總結(jié)

本文介紹了k3s、rancher、rio的安裝(其中rio禁掉了build功能)
然后部署了一套istio的示例應(yīng)用bookinfo
然后體驗(yàn)了一下使用rio進(jìn)行金絲雀發(fā)布應(yīng)用版本

總體來(lái)說(shuō),除了安裝時(shí)候鏡像下載的問(wèn)題之外,其他都很流暢
資源消耗來(lái)講,istio動(dòng)不動(dòng)8g就沒(méi)有了,rio部署完只用了2G多
資源占用低,適合小公司使用,等后續(xù)istio解決了性能問(wèn)題,也可以直接無(wú)痛轉(zhuǎn)到istio上去。
不過(guò)目前rio還是beta版,不建議生產(chǎn)環(huán)境使用

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,125評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 175,506評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 62,614評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,402評(píng)論 6 404
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 54,934評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 42,168評(píng)論 0 287
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,690評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,596評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,784評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評(píng)論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,027評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 34,404評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 35,662評(píng)論 1 280
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,398評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,743評(píng)論 2 370