NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:05544

评论

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

pip安装时 fatal error C1083 无法打开包括文件 “io.h” No such file or directory

代码的路

Python

不写代码就实现了自动化测试,面试官都惊呆了!Apipost的自动化测试功能强烈推荐

徐天

自动化测试 apipost

redis.conf 7.0 生产配置详解,全网最全

码哥字节

NoSQL 数据库 redis 底层原理 Redis 7

怎样快速地迁移 MySQL 中的数据?

C++后台开发

MySQL 数据库 中间件 后端开发 C++开发

Linux常用命令

代码的路

Linux

从TMMI角度谈谈质量度量

老张

软件测试 质量度量

跨域:后端工程师最熟悉的陌生“人”

华为云开发者联盟

后端 华为云 跨域 企业号 1 月 PK 榜

【碎碎念】下雪了

Firshare

年终总结

Halcon快速入门教程

嵌入式视觉

定位 算子 测量 HALCON 工业智慧视觉

新一代 IT 服务管理平台 DOSM,助力企业数字化转型

云智慧AIOps社区

数字化转型 运维自动化 智能运维 云智慧 IT管理

Apache IoTDB 中的时间精度 | 铁头乔分享

Apache IoTDB

站酷基于服务网格 ASM 的生产实践

阿里巴巴中间件

阿里云 云原生 服务网格

等保堡垒机选择哪个厂家好?咨询电话多少?

行云管家

等保 堡垒机 等级保护

屡获殊荣|旺链科技亮相2022中国双链年会并喜获佳绩

旺链科技

区块链 区块链技术 双链年会

软件测试/测试开发 | 做到这几点,你也能成为 BAT 的抢手人!

测试人

软件测试 自动化测试 测试开发 测试工程师

易观:2022年中国产业数字化发展成熟度指数报告

易观分析

数字化 产业 报告

如何管理项目干系人?

敏捷开发

项目管理 项目干系人

软件测试/测试开发 | Jenkins job 机制该如何使用?

测试人

软件测试 jenkins 自动化测试 测试开发

服务网格|如何使用 Amesh 配置插件

API7.ai 技术团队

Service Mesh 服务网格 APISIX 网关 Kubernetes Serverless

年中盘点 | 2022年,PaaS 再升级

亚马逊云科技 (Amazon Web Services)

PaaS 亚马逊云科技 Builder 专栏

【HA小知识】DRBD数据不一致怎么办?怎么处理?

行云管家

高可用 ha 高可用软件

软件测试/测试开发 | Jenkins 持续集成体系介绍

测试人

软件测试 持续集成 jenkins 自动化测试 测试开发

华为云发布CodeArts Check代码检查服务 守护软件质量和安全

科技热闻

Apache IoTDB & SeaTunnel 联合 Meetup | 10月15日 线上直播预约开启!

Apache IoTDB

算力攻坚,视频云背后的「硬」核玩家

云布道师

阿里云 视频云

性能再升级,XMeter Cloud专业版正式上线

EMQ映云科技

物联网 IoT 云服务 mqtt 企业号 1 月 PK 榜

当你输入网址,小手一点,然后发生了什么

华为云开发者联盟

前端 HTTP 华为云 企业号 1 月 PK 榜

Linux安装tensorflow

代码的路

Linux

对话 BitSail Contributor | 姚泽宇:新生火焰,未来亦可燎原

字节跳动数据平台

大数据 开源 字节跳动 数据引擎

长安汽车*IoTDB | 构建1.5亿时间序列车况数据处理方案,查询稳定实现毫秒级返回

Apache IoTDB

NFTScan 与 AlienSwap 达成战略合作伙伴,双方在 NFT 数据层面展开合作

NFT Research

NFT

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