写点什么

Rio 手把手教学:如何打造容器化应用程序的一站式部署体验

  • 2020-05-18
  • 本文字数:4996 字

    阅读完需:约 16 分钟

Rio手把手教学:如何打造容器化应用程序的一站式部署体验

11 月 19 日,业界应用最为广泛的 Kubernetes 管理平台创建者 Rancher Labs(以下简称 Rancher)宣布极简MicroPaaS平台Rio发布了beta版本,这是基于 Kubernetes 的应用程序部署引擎。它于今年 5 月份推出,现在最新的版本是 v0.6.0。Rio 结合了多种云原生技术,从而简化了将代码从测试环境发布到生产环境的流程,同时保证了强大而安全的代码体验。

什么是 Rio?

下图是 Rio 的架构:



Rio 采用了诸如 Kubernetes、knative、linkerd、cert-manager、buildkit 以及 gloo 等技术,并将它们结合起来为用户提供一个完整的应用程序部署环境。


Rio 具有以下功能:


  1. 从源代码构建代码,并将其部署到 Kubernetes 集群

  2. 自动为应用程序创建 DNS 记录,并使用 Let’s Encrypt 的 TLS 证书保护这些端点

  3. 基于 QPS 以及工作负载的指标自动扩缩容

  4. 支持金丝雀发布、蓝绿发布以及 A/B 部署

  5. 支持通过服务网格路由流量

  6. 支持缩容至零的 serverless 工作负载

  7. Git 触发的部署

Rancher 的产品生态


Rio 属于 Rancher 整套产品生态的一部分,这些产品支持从操作系统到应用程序的应用程序部署和容器运维。当 Rio 和诸如 Rancher 2.3、k3s 和 RKE 等产品结合使用时,企业可以获得完整的部署和管理应用程序及容器的体验。

深入了解 Rio

要了解 Rio 如何实现上述功能,我们来深入了解一些概念以及工作原理。

安装 Rio

前期准备


  • Kubernetes 版本在 1.15 以上的 Kubernetes 集群

  • 为集群配置的 kubeconfig(即上下文是你希望将 Rio 安装到的集群)

  • 在 $PATH 中安装的 Rio CLI 工具,可参阅以下链接,了解如何安装 CLI:

  • https://github.com/rancher/rio/blob/master/README.md


安装


使用安装好的 Rio CLI 工具,调用 rio install。你可能需要考虑以下情况:


ip-address:节点的 IP 地址的逗号分隔列表。你可以在以下情况使用:


  • 你不使用(或不能使用)layer-4 的负载均衡器

  • 你的节点 IP 不是你希望流量到达的 IP 地址(例如,你使用有公共 IP 的 EC2 实例)

服务

在 Rio 中,service 是一个基本的执行单位。从 Git 仓库或容器镜像实例化之后,一个 service 由单个容器以及服务网格的关联 sidecar 组成(默认启用)。例如,运行使用 Golang 构建的一个简单的“hello world”应用程序。


rio run https://github.com/ebauman/rio-demo
复制代码


或者运行容器镜像版本:


rio run ebauman/demo-rio:v1
复制代码


还有其他选项也可以传递给 rio run,如需要公开的任意端口(-p 80:8080/http),或者自动扩缩的配置(–scale 1-10)。你可以通过这一命令 rio help run,查看所有可传递的选项。


想要查看你正在运行的服务,请执行 rio ps:


$ rio psNAME            IMAGE                               ENDPOINTdemo-service    default-demo-service-4dqdw:61825    https://demo-service...
复制代码


每次你运行一个新的服务,Rio 将会为这一服务生成一个全局性的端点:


$ rio endpointsNAME           ENDPOINTSdemo-service   https://demo-service-default.op0kj0.on-rio.io:30282
复制代码


请注意,此端点不包括版本——它指向由一个 common name 标识的服务,并且流量根据服务的权重进行路由。

自动 DNS&TLS

默认情况下,所有 Rio 集群都将为自己创建一个 on-rio.io 主机名,并以随机字符串开头(如 lkjsdf.on-rio.io)。该域名成为通配符域名,它的记录解析到集群的网关。如果使用 NodePort 服务,则该网关可以是 layer-4 负载均衡器,或者是节点本身。


除了创建这个通配符域名,Rio 还会使用 Let’s Encrypt 为这个域名生成一个通配符证书。这会允许自动加密任何 HTTP 工作负载,而无需用户进行配置。要启动此功能,请传递-p 参数,将 http 指定为协议,例如:


rio run -p 80:8080/http ...
复制代码

自动扩缩容

Rio 可以根据每秒所查询到的指标自动扩缩服务。为了启用这一特性,传递–scale 1-10 作为参数到 rio run,例如:


rio run -p 80:8080/http -n demo-service --scale 1-10 ebauman/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 10000 http://demo-service-v0-default.op0kj0.on-rio.io:31976
复制代码


这将会发送 10000 个请求到 HTTP 端点,Rio 将会提高 QPS 并适当扩大规模,执行另一个 rio ps 将会展示已经扩大的规模:


$ rio psNAME            ...     SCALE       WEIGHTdemo-service    ...     2/5 (40%)   100%
复制代码

分阶段发布、金丝雀部署以及权重

注意

对于每个服务,都会创建一个全局端点,该端点将根据基础服务的权重路由流量。


Rio 可以先交付新的服务版本,然后再推广到生产环境。分阶段发布一个新的版本十分简单:


rio stage --image ebauman/rio-demo:v2 demo-service v2
复制代码


这一命令使用版本 v2,分阶段发布 demo-service 的新版本,并且使用容器镜像 ebauman/rio-demo:v2。我们通过执行 rio ps 这一命令,可以看到新阶段的发布:


$ rio psNAME                IMAGE                   ENDPOINT                    WEIGHTdemo-service@v2     ebauman/rio-demo:v2     https://demo-service-v2...  0%demo-service        ebauman/rio-demo:v1     https://demo-service-v0...  100%
复制代码


请注意,新服务的端点具有 v2 的新增功能,因此即使权重设置为 0%,访问此端点仍将带你进入服务的 v2。这可以让你能够在向其发送流量之前验证服务的运行情况。


说到发送流量:


$ rio weight demo-service@v2=5%$ rio psNAME                IMAGE                   ENDPOINT                    WEIGHTdemo-service@v2     ebauman/rio-demo:v2     https://demo-service-v2...  5%demo-service        ebauman/rio-demo:v1     https://demo-service-v0...  95%
复制代码


使用 rio weight 命令,我们现在将发送我们 5%的流量(从全局的服务端点)到新版本。当我们觉得 demo-service 的 v2 性能感到满意之后,我们可以将其提升到 100%:


$ rio promote --duration 60s demo-service@v2demo-service@v2 promoted
复制代码


超过 60 秒之后,我们的 demo-service@v2 服务将会逐渐提升到接收 100%的流量。在这一过程中任意端点上,我们可以执行 rio ps,并且查看进程:


$ rio psNAME                IMAGE                   ENDPOINT                    WEIGHTdemo-service@v2     ebauman/rio-demo:v2     https://demo-service-v2...  34%demo-service        ebauman/rio-demo:v1     https://demo-service-v0...  66%
复制代码

路由(Routing)

Rio 可以根据主机名、路径、方法、标头和 cookie 的任意组合将流量路由到端点。Rio 还支持镜像流量、注入故障,配置 retry 逻辑和超时。

创建一个路由器

为了开始制定路由决策,我们必须首先创建一个路由器。路由器代表一个主机名和一组规则,这些规则确定发送到主机名的流量如何在 Rio 集群内进行路由。你想要要定义路由器,需要执行 rio router add。例如,要创建一个在默认测试时接收流量并将其发送到 demo-service 的路由器,请使用以下命令:


rio route add testing to demo-service
复制代码


这将创建以下路由器:


$ rio routersNAME             URL                            OPTS    ACTION      TARGETrouter/testing   https://testing-default.0pjk...        to          demo-service,port=80
复制代码


发送到 https://testing-default…的流量将通过端口 80 转发到 demo-service。


请注意,此处创建的路由为 testing-default.<rio domain>。Rio 将始终使用命名空间资源,因此在这种情况下,主机名测试已在默认命名空间中进行了命名。要在其他命名空间中创建路由器,请将-n <namespace>传递给 rio 命令:


rio -n <namespace> route add ...
复制代码

基于路径的路由

为了定义一个基于路径的路由,当调用 rio route add 时,指定一个主机名加上一个路径。这可以是新路由器,也可以是现有路由器。


$ rio route add testing/old to demo-service@v1
复制代码


以上命令可以创建一个基于路径的路由,它会在 https://testing-default.<rio-domain>/old 接收流量,并且转发流量到 demo-service@v1 服务。

标头和基于方法的路由

Rio 支持基于 HTTP 标头和 HTTP verbs 的值做出的路由策略。如果你想要创建基于特定标头路由的规则,请在 rio route add 命令中指定标头:


$ rio route add --header X-Header=SomeValue testing to demo-service
复制代码


以上命令将创建一个路由规则,它可以使用一个 X-Header 的 HTTP 标头和 SomeValue 的值将流量转发到 demo-service。类似地,你可以为 HTTP 方法定义规则:


$ rio route add --method POST testing to demo-service
复制代码

故障注入

Rio 路由有一项有趣的功能是能够将故障注入响应中。通过定义故障路由规则,你可以设置具有指定延迟和 HTTP 代码的失败流量百分比:


$ rio route add --fault-httpcode 502 --fault-delay-milli-seconds 1000 --fault-percentage 75 testing to demo-service
复制代码


其他路由选项


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 的名称、自定义构建的镜像名称以及将镜像推送到指定的镜像仓库。

堆栈和 Riofile

Rio 使用称为 Riofile 的 docker-compose-style manifest 定义资源。


configs:  conf:    index.html: |-      <!DOCTYPE html>      <html>      <body>
<h1>Hello World</h1>
</body> </html>services: nginx: image: nginx ports: - 80/http configs: - conf/index.html:/usr/share/nginx/html/index.html
复制代码


Riofile 定义了一个简单的 nginx Hello World 网页所有必要的组件。通过 rio up 部署它,会创建一个 Stack(堆栈),它是 Riofile 定义的资源的集合。


Riofile 具有许多功能,例如观察 Git 库中的更改以及使用 Golang 模板进行模板化。

其他 Rio 组件

Rio 还有许多功能,例如 configs、secrets 以及基于角色访问控制(RBAC)。详情可参阅:


https://rio.io/


Rio 可视化


Rio Dashboard


Rio 的 beta 版本包括了一个全新的仪表盘,使得 Rio 组件可视化。要访问此仪表盘,请执行命令:rio dashboard。在有 GUI 和默认浏览器的操作系统上,Rio 将自动打开浏览器并加载仪表盘。



你可以使用仪表盘来创建和编辑堆栈、服务、路由等。此外,可以直接查看和编辑用于各种组件技术(Linkerd、gloo 等)的对象,尽管不建议这样做。仪表盘目前处于开发的早期阶段,因此某些功能的可视化(如自动缩放和服务网格)尚不可用。

Linkerd

作为 Rio 的默认服务网格,Linked 附带了一个仪表盘作为产品的一部分。该仪表盘可以通过执行 rio linkerd 来使用,它将代理本地本地主机流量到 linkerd 仪表盘(不会在外部公开)。与 Rio 仪表盘类似,有 GUI 和默认浏览器的操作系统上,Rio 将自动打开浏览器并加载仪表盘:



Linkerd 仪表盘显示了 Rio 集群的网格配置、流量和网格组件。Linkerd 提供了 Rio 路由的某些功能组件,因此这些配置可能会显示在此仪表盘上。还有一些工具可用于测试和调试网格配置和流量。

结论

Rio 为用户提供许多功能,是一款强大的应用程序部署引擎。这些组件可以在部署应用程序时为开发人员提供强大的功能,使流程稳定而安全,同时轻松又有趣。在 Rancher 产品生态中,Rio 提供了企业部署和管理应用程序和容器的强大功能。


如果你想了解 Rio 的更多信息,欢迎访问 Rio 主页或 Github 主页:


https://rio.io


https://github.com/rancher/rio


2020-05-18 18:05651

评论

发布
暂无评论
发现更多内容

项目管理达人推荐:顶级文档管理系统大比拼

爱吃小舅的鱼

文档管理

10个你可能不知道的Gmail技巧

理理

科大讯飞t20pro和t10区别 对比评测

妙龙

科大讯飞 学习机

系统综合清理软件MacCleaner Pro for Mac

Mac相关知识分享

Mac清理软件 系统清理

mac剪切板管理工具:Paste for Mac 免激活版

你的猪会飞吗

mac软件下载 Paste for Mac paste mac破解版

一键生成PPT?讯飞智文2.0迎来重磅升级!马斯克宣布人工智能模型Grok 2测试版即将发布|AI日报

可信AI进展

打造企业专属人工智能助理

霍格沃兹测试开发学社

仿冒网站横行,奥运会票务网站安全性遭质疑,SSL证书成关键

国科云

24年湖北正规等保测评机构名称以及地址看这里!

行云管家

湖北 等保 等级测评

云高性能计算平台 CHPC 让企业的传统 HPC 玩出新花样

百度Geek说

百度智能云

工作中遇到的RSA问题,这里或许能找到答案

三七互娱后端技术团队

非对称加密 rsa

macOS Sequoia 15 beta 6 (24A5320a) ISO、IPSW、PKG 下载

sysin

macos sequoia

必读|Postgres 如何在磁盘上存储和索引数据?

小猿姐

数据库 postgresql 容器

小间距LED显示屏:新时代的传播利器

Dylan

媒体 时代 LED LED display LED显示屏

TextIn文档树引擎,助力RAG知识库问答检索召回能力提升

合合技术团队

科技 文档识别 PDF解析

特权账号的“三生三世”:识别、监测、审计

极盾科技

数据安全 特权账号

科大讯飞学习机p30和t20pro 区别

妙龙

科大讯飞 学习机

Mac mini 将迎来重大设计更新,将成为“苹果有史以来最小的电脑”

理理

HGDD 荣耀开发者日丨沙龙北京站现场亮点回顾

荣耀开发者服务平台

行业趋势 开发者沙龙 应用上架 荣耀开发者服务平台 开发者激励计划

第63期 | GPTSecurity周报

云起无垠

供应行业怎么定义?行业也需要堡垒机吗?

行云管家

网络安全 堡垒机 供应行业

macOS Sequoia 15.1 beta 2 (24B5024e) ISO、IPSW、PKG 下载

sysin

macos sequoia

【YashanDB数据库】Yashandb表闪回业务表实践

YashanDB

yashandb 崖山数据库 崖山DB

【YashanDB数据库】yasboot查询数据库状态时显示数据库状态为off

YashanDB

yashandb 崖山数据库 崖山DB

选择全周期项目管理系统的5大技巧

爱吃小舅的鱼

项目管理 PLM

望繁信科技与金智维达成金融行业独家战略合作,共塑数字化转型新格局

望繁信科技

数字化转型 金融行业 流程挖掘 数字员工 流程智能

绿电、DePIN+AI:塑造未来二十年金融体系的新兴基石

TechubNews

科大讯飞t20pro和X3 Pro选哪个

妙龙

科大讯飞 学习机

工作五年后,做技术还是做管理?

老张

技术管理 职场成长 技术专家

TapData 信创数据源 | 国产信创数据库 PolarDB MySQL 数据同步指南,加速国产化进程,推进自主创新建设

tapdata

如何更改Apple Watch上的表盘?(含苹果手表表盘素材)

理理

Rio手把手教学:如何打造容器化应用程序的一站式部署体验_文化 & 方法_Rancher_InfoQ精选文章