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ī)
下載工具推薦:
代理: 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/
5、Rancher2導(dǎo)入k3s集群
1.創(chuàng)建集群
點(diǎn)擊添加集群,選擇導(dǎo)入,然后輸入集群名稱,點(diǎn)擊創(chuàng)建
2.導(dǎo)入k3s集群
復(fù)制圖示的最后一條命令,去服務(wù)器上執(zhí)行,然后等待導(dǎo)入完成。
以上為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下載
將下載下來(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詳情
不過(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下
然后進(jìn)入default
點(diǎn)擊紅色安裝有問(wèn)題的負(fù)載,進(jìn)入pod,點(diǎn)擊事件,找到image “gcr.io/linkerd-id/xxxxx” pull失敗之類的錯(cuò)誤,
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 #查看部署情況
如果發(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 #查看部署情況
將圖示中的網(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)到。
7、rio dashboard
rio還提供了一個(gè)管理控制臺(tái)
rio dashboard
不用管報(bào)出來(lái)的錯(cuò)(那是無(wú)法打開(kāi)服務(wù)器上的瀏覽器報(bào)的錯(cuò)),直接復(fù)制打印出來(lái)的瀏覽器地址去訪問(wèn)即可。第一次訪問(wèn)需要設(shè)置管理員賬號(hào)密碼。
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)
瀏覽器訪問(wèn) http://服務(wù)器ip:87/ 即可打開(kāi)linkerd-web
有簡(jiǎn)單的服務(wù)流向圖,不過(guò)比kiali還是差點(diǎn)兒(目前這個(gè)版本rio還沒(méi)有集成kiali,不過(guò)看issue好像快要支持了)
瀏覽器訪問(wèn) http://服務(wù)器ip:87/grafana 即可打開(kāi)grafana
9、實(shí)戰(zhàn),部署一套bookinfo玩玩
打開(kāi)dashboard,點(diǎn)擊services,然后點(diǎn)擊create
如下圖所示,創(chuàng)建productpage服務(wù)
服務(wù)名稱 | 鏡像 | 端口 |
---|---|---|
productpage | docker.io/istio/examples-bookinfo-productpage-v1:1.15.0 | 9080 |
然后創(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)
10、金絲雀發(fā)布
接下來(lái)給reviews進(jìn)行v2 v3版本的金絲雀發(fā)布
現(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é)束,感謝閱讀
.