云计算
11月19日,业界使用最广泛的Kubernetes管理平台创建者Rancher Labs (以下简称Rancher )发布了Rio基于Kubernetes的APP应用部署引擎beta版。 今年5月发售,现在的最新版本是v0.6.0。 Rio结合了多种云原生技术,简化了将代码从测试环境发布到生产环境的过程,并确保了强大、安全的代码体验。
什么是Rio?
下图是Rio的体系结构。
Rio采用Kubernetes、knative、linkerd、cert-manager、buildkit和gloo等技术,将它们组合起来为用户提供完整的APP应用程序部署环境。
Rio具有以下功能:
通过源代码生成代码并将其部署到Kubernetes群集中
自动创建APP应用的dns记录,并使用let’s encrypt的TLS证书保护这些端点
根据QPS和工作负载指标自动扩展容量
支持金丝雀发行版、蓝绿色发行版和A/B部署
支持通过服务网格路由流量
支持缩小到零的serverless工作负载
Git部署
Rancher的产品生态
Rio是Rancher产品生态的一部分,它支持从操作系统到APP应用的APP应用部署和集装箱运输。 通过将Rio与Rancher 2.3、k3s和RKE等产品相结合,企业可以全面部署和管理APP应用程序和容器。
深入了解Rio
为了了解Rio如何实现这些功能,让我们来详细了解几个概念和工作原理。
安装Rio
前期准备
Kubernetes版本1.15或更高版本的Kubernetes群集
为群集配置的kubeconfig (即上下文要在其中安装Rio的群集) )。
有关安装在$PATH上的Rio CLI工具的信息,请参阅以下链接以了解如何安装CLI :
3359 github.com/rancher/Rio/blob/master/readme.MD
安装
使用安装的Rio CLI工具调用Rio安装。 您可能需要考虑以下事项:
ip-address节点IP地址的逗号分隔列表。 可用于以下情况:
您不使用或不能使用layer-4负载平衡器
您的节点IP不是希望通信到达的IP地址(例如,使用具有公共IP的EC2实例)
服务
在Rio中,service是基本的执行单位。 从Git仓库或容器镜像实例化后,服务由单个容器和服务网格中的相关sidecar组成。 默认情况下处于启用状态。 例如,运行一个使用Golang构建的简单的" hello world " APP应用程序。
Rio run https://github.com/EB auman/Rio-demo
或运行容器镜像版本:
rio run ebauman/demo-rio:v1
其他选项也可以传递给rio run,例如需要公开的任何端口(-p 80:8080/http )或自动扩展的配置(--scale 1-10 )。 在这个命令rio help run中,你可以看到所有可以传递的选项。
要检查正在运行的服务,请运行rio ps。
$ rio ps
名称图像输入
demo-service default-demo-service-4 dqdw:618253359 demo-service .
每次运行新服务时,Rio都会为此服务生成一个全局端点。
$ rio endpoints
NAME ENDPOINTS
demo-service 3359 demo-service-default.op0kj0. on-Rio.io:30282
请注意,此端点不包含版本——,而是指向由common name标识的服务,并且流量根据服务权重进行路由。
自动DNSTLS
缺省情况下,所有Rio群集都会创建自己的on-rio.io主机名,并以随机字符串开头,如lkjsdf.on-rio.io。 此域名将是通配符域名,并且该记录将被解析到群集的网关。 如果使用的是NodePort服务,则网关可以是第4层负载平衡器,也可以是节点本身。
除了创建此通配符域名外,Rio还将使用let’s encrypt为此域名生成通配符证书。 这样,无需用户设置即可自动加密HTTP工作负载。 要开始此功能,请传递-p参数并指定http作为协议。 例如:
rio run -p 80:8080/http .
自动缩放
Rio可以根据每秒搜索到的指标自动扩展服务。 要启用此功能,请将--scale 1-10作为参数传递给rio run。 例如:
Rio run-p80:8080/http-ndemo-service-- scale1- 10eb auman/Rio-demo:v1
运行此命令将生成并部署ebauman/rio-demo。 您可以看到,在使用工具向端点添加载荷时,容量会自动扩展。 为了证明这一点,必须使用HTTP端点而不是HTTPS。 因为使用的工具不支持TLS。
$ rio inspect demo-service
snipped
endpoints :
- https://demo-service-v0- default.op0kj0. on-Rio.io:30282
- http://demo-service-v0- default.op0kj0. on-Rio.io:31976
snipped
rio inspect还显示非端点信息,但当前需要的是端点信息。 使用HTTP端点和HTTP基准工具rakyll/hey可以添加综合负载。
hey-n 10000http://demo-service-v0- default.op0kj0. on-Rio.io:31976
这将向HTTP端点发送10000个请求,Rio将提高QPS并相应地扩大规模。 再运行一个rio ps,就会显示出扩大的规模。
$ rio ps
NAME . SCALE WEIGHT
demo-service.2/5(40% ) 100%
逐步释放、金丝雀引入、权重
注意
对于每个服务,都会创建一个全局端点,用于根据基本服务的权重路由通信。
Rio可以提供新的服务版本,然后部署到生产环境中。 分阶段发布新版本很简单。
Rio stage-- imageebauman/Rio-demo:v2 demo-service v2
此命令使用版本v2,逐步发布新版本的demo-service,并使用容器镜像ebauman/rio-demo:v2。 通过运行rio ps命令,可以看到新阶段的版本。
$ rio ps
名称image endpoint weight
demo-service @ v2eb auman/Rio-demo:v 2https://demo-service-v2 .0%
demo-serviceebauman/Rio-demo:v 1https://demo-service-v 0.100 %
请注意,新服务端点具有v2的新功能,因此即使将权重设置为0 %,uff0c访问此端点也会将其带到服务的v2。 这样就可以在发送通信之前验证服务器的运行状况。
说到发送的通信量:
$ rio weight demo-service@v2=5%
$ rio ps
名称image endpoint weight
demo-service @ v2eb auman/Rio-demo:v 2https://demo-service-v2 .5%
demo-serviceebauman/Rio-demo:v 1https://demo-service-v 0.95 %
当前使用rio weight命令将5%%u7684通信从全局服务端点发送到新版本。 满足demo-service的v2性能后,可以将其提升到100%%uFF1A
$ Rio promote-- duration 60s demo-service @ v2
demo-service@v2 promoted
如果超过60秒,demo-service@v2服务器将逐渐监听100%%u7684通信。 在此流程的任何端点上,都可以运行rio ps来检查流程。
$ rio ps
名称image endpoint weight
demo-service @ v2eb auman/Rio-demo:v 2https://demo-service-v2 . 34 %
demo-serviceebauman/Rio-demo:v 1https://demo-service-v 0.66 %
路由选择
Rio可以根据主机名、路径、方法、报头和cookie的任意组合将通信路由到端点。 Rio还支持镜像通信、注入故障,并配置retry逻辑和超时。
创建路由器
要开始决定路由,必须首先创建路由器。 路由器表示主机名和一组规则,并确定发送到主机名的通信在Rio群集中的路由方式。 要定义路由器,必须运行rio router add。 例如,要创建一个在缺省测试时接收通信并将其发送到demo-service的路由器,请使用以下命令:
资源寻址服务
这将创建以下路由器:
$ rio routers
name URL opts操作目标
router/testing 3359 testing-default.0 pjk . to demo-service,port=80
发送到https://测试默认……的通信通过端口80转发到仲裁服务。
请注意,您在此处创建的根是testing-default.rio domain。 由于Rio始终使用命名空间资源,因此在这种情况下,主机名测试已在缺省命名空间中命名。 要在其他命名空间中创建路由器,请单击-n lt; 名称空间gt; 传递给rio命令:
Rio-n名称空间路由添加.
基于路径的路由
要定义基于路径的路由,请在调用rio route add时指定主机名和路径。 它可以是新路由器,也可以是现有路由器。
$ riorouteaddtesting/old to demo-service @ v1
上述命令创建基于路径的路由,用于在https://testing-default.Rio-domain/old上接收通信并将通信转发到` demo-service@v1 `服务器
br/以上命令提供基于路径的路由,用于通过https://testing-default.Rio-domain/old接收通信并将通信转发到` demo-service@v1 `服务br/
基于报头和方法的路由
Rio支持基于HTTP报头和HTTP verbs值的路由策略。 如果要创建基于特定标头的路由规则,请在rio route add命令中指定标头。
$ riorouteadd-- headerx-header=somevaluetestingtodemo-service
上述命令创建了一个路由规则,通过该规则可以使用X-Header的HTTP报头和SomeValue值将流量转发到demo-service。 同样,可以定义HTTP方法的规则。
$ riorouteadd-- methodposttestingtodemo-service
故障注入
Rio路由的一个有趣功能是可以将故障注入响应。 定义故障路由规则后,可以设置具有指定延迟和HTTP代码的故障流量的百分比。
$ riorouteadd---fault-httpcode 502---fault-delay-milli-seconds 1000-- fault-percentage 75 testingtodemems
其他路由选择选项
Rio支持分配流量、重试失败请求的逻辑、重定向到其他服务、定义超时和添加重写规则。 要查看这些选项,请参阅以下链接:
https://github.com/rancher/rio
自动构建
如果将git仓库传递给rio run,Rio将在提交给受监视的branch后指示其构建代码。 默认值为master。 对于Github仓库,可以从Github webhooks启动此功能。 如果不想使用其他git repo或webhooks,Rio将提供“gitwatcher”服务,定期检查仓库是否有更改。
Rio还可以基于受监控branch的拉式请求构建代码。 如果想配置,请将--build-pr传递给rio run。 此外,还可以选择配置此功能,包括传递dockerfile名称、自定义内部版本镜像名称以及将镜像推送到指定的镜像仓库。
堆栈和Rio文件
Rio使用称为Rio文件的docker-compose-style manifest定义资源
configs :
conf :
index.html: |-
! DOCTYPE html
html
身体
h2Hello World/h2
/body
/html
服务:
nginx :
image: nginx
端口:
- 80/http
configs :
- conf/index.html:/usr/share/nginx/html/index.html
Riofile定义了简单的nginx Hello World页面所需的所有组件。 在rio up中部署它时,将创建一个堆栈,它是Rio文件定义的资源集合。
Riofile具有许多功能,例如观察Git库的更改并使用Golang模板将其模板化。
其他Rio组件
Rio具有许多功能,包括配置、安全和基于角色的访问控制( RBAC )。 详情请参照以下内容。
https://rio.io/
Rio可视化
Rio Dashboard
Rio的测试版包含用于可视化Rio组件的新仪表板。 要访问此操控板,请运行命令“rio dashboard”。 在具有GUI和默认浏览器的操作系统上,Rio会自动打开浏览器并加载仪表板。
您可以使用仪表板创建和编辑堆栈、服务、路由等。 此外,还可以直接查看和编辑用于各种组件技术(如Linkerd和gloo )的对象,但不建议使用。 仪表板目前处于开发的初期阶段,因此还无法实现自动缩放和服务网格等某些功能的可视化。
Linkerd
作为Rio的默认服务网格,Linked附带了仪表板作为产品的一部分。 通过运行rio linkerd可以使用此仪表板。 rio linkerd将代理本地主机通信发送到linkerd仪表板。 不会对外公开。 与Rio仪表盘一样,在具有GUI和默认浏览器的操作系统上,Rio会自动打开浏览器并加载仪表盘。
“Linkerd”仪表板显示Rio群集的网格配置、流量和网格组件。 由于Linkerd提供了Rio路由的某些功能组件,因此这些配置可能显示在此控制板中。 还有可用于测试和调试网格配置和流量的工具。
关于结论
Rio为用户提供了许多功能,是一个强大的APP应用部署引擎。 这些组件在部署APP应用程序时为开发者提供强大的功能,使过程稳定、安全、简单且有趣。 在Rancher产品生态中,Rio为企业部署和管理APP应用程序和容器提供了强大的功能。
如果您想了解更多关于Rio的信息,欢迎访问Rio主页或Github主页:
https://rio.io
https://github.com/rancher/rio
详情请访问云服务器、域名注册、虚拟主机的问题,请访问西部数码代理商官方网站: www.chenqinet.cn