Rancher极简service mesh产品Rio安装试玩(基于k3s)

1、简介:

istio 是 service mesh 界的明星项目,今天要试玩的是它的低配版Rio。
Rio 是Rancher新出的一款轻量级service mesh产品,基于linkerd2,相当轻。但麻雀虽小,五脏俱全,基本上istio有的功能,它都有。
github:https://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包下载: https://github.com/rancher/k3s/releases
一般服务器都是x86,选择amd64的即可,arm64是低功耗设备的架构,比如手机

image.png

下载工具推荐:
代理: https://github.com/killgcd/chromego
嫌代理麻烦也可以用这个下载工具: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下载地址:https://docs.rancher.cn/rancher2x/install-prepare/download/kubernetes.html
下载后放到/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安装包:https://github.com/rancher/rio/releases
选择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镜像的下载,就不得不推荐一下这个项目:https://github.com/zhangguanzhang/gcr.io
一个命令即可将 查找镜像,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配置镜像: https://github.com/greper/rio-first/
此代码已经打包成镜像上传到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版,不建议生产环境使用

好了,本次试玩到此结束,感谢阅读
.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352