istio 是 service mesh 界的明星项目,今天要试玩的是它的低配版Rio。
Rio 是Rancher新出的一款轻量级service mesh产品,基于linkerd2,相当轻。但麻雀虽小,五脏俱全,基本上istio有的功能,它都有。
github:https://github.com/rancher/rio
由于是低配版,本文集群也选择k8s的低配版k3s
整个环境运行起来只需要2G内存,相比istio要轻量很多,一台2C4G的主机,即可流畅体验service mesh的魅力。
本文主要介绍一下安装过程,然后运行一个bookinfo示例,实现金丝雀发布。
开始之前我们需准备最低配置2C4G主机一台,安装好docker
官方介绍的安装方式相当简单,执行如下命令即可
curl -sfL https://get.k3s.io | sh -
(国内网络用这条命令会安装不成功,github上的release包下载不下来)
Rancher的产品易用性做的还是相当不错的,只是这对国内网络的用户不太友好(* ̄︶ ̄)
我们需要先fan qiang把k3s的安装包下载下来,然后再安装
根据服务器的架构类型选择相应的release包下载: https://github.com/rancher/k3s/releases
一般服务器都是x86,选择amd64的即可,arm64是低功耗设备的架构,比如手机
下载工具推荐:
代理: 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 -
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单节点即安装完毕
(此步骤不是必须,但由于安装Rio时很多镜像是在gcr.io下的,国内无法访问,所以需要安装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
以上为rancher导入k3s集群步骤
经过前面这么长的准备,终于来到今天的主角Rio的安装了。
官方介绍Rio的安装也相当简单
$ curl -sfL https://get.rio.io | sh -
$ rio install
先下载Rio安装包:https://github.com/rancher/rio/releases
选择amd64下载
将下载下来的rio安装包复制到/usr/local/bin/目录下,重命名为rio
chmod +x /usr/local/bin/rio #给rio添加执行权限
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的镜像包下载不来,部署进度会卡住
命令行下无法直观看出我们哪些镜像下载不下的,所以需要借助Rancher2
先进入Rancher控制台,进入k3s集群,点击命名空间管理,将linkerd和rio-system两个命名空间移动到default下
然后进入default
点击红色安装有问题的负载,进入pod,点击事件,找到image “gcr.io/linkerd-id/xxxxx” pull失败之类的错误,
说到这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状态,就需要重新安装,由于之前已经下载好了镜像,重新安装就很顺畅了
rio uninstall # 先卸载
rio install --ip-address 192.168.3.xx --disable-features build #再重新安装
基本上看到succeeded即表示rio成功安装,接下来就可以部署应用进行体验了
通过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上,即可访问到。
rio还提供了一个管理控制台
rio dashboard
不用管报出来的错(那是无法打开服务器上的浏览器报的错),直接复制打印出来的浏览器地址去访问即可。第一次访问需要设置管理员账号密码。
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代理暴露出来
浏览器访问 http://服务器ip:87/ 即可打开linkerd-web
有简单的服务流向图,不过比kiali还是差点儿(目前这个版本rio还没有集成kiali,不过看issue好像快要支持了)
浏览器访问 http://服务器ip:87/grafana 即可打开grafana
打开dashboard,点击services,然后点击create
如下图所示,创建productpage服务
服务名称 | 镜像 | 端口 |
---|---|---|
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 中点击链接访问
现在访问productpage,评论区会轮流出现不同颜色的星星和v1版本的没有星星
当v2 v3版本测试没有问题之后,即可逐步将v1版本的weight设置为0,最后下线v1版本,一次新版本发布就完成了
本文介绍了k3s、rancher、rio的安装(其中rio禁掉了build功能)
然后部署了一套istio的示例应用bookinfo
然后体验了一下使用rio进行金丝雀发布应用版本
总体来说,除了安装时候镜像下载的问题之外,其他都很流畅
资源消耗来讲,istio动不动8g就没有了,rio部署完只用了2G多
资源占用低,适合小公司使用,等后续istio解决了性能问题,也可以直接无痛转到istio上去。
不过目前rio还是beta版,不建议生产环境使用
好了,本次试玩到此结束,感谢阅读
.