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

发布时间:2024-10-27 点击:91
云计算
11月19日,业界应用最为广泛的kubernetes管理平台创建者rancher labs(以下简称rancher)宣布rio发布了beta版本,这是基于kubernetes的应用程序部署引擎。它于今年5月份推出,现在最新的版本是v0.6.0。rio结合了多种云原生技术,从而简化了将代码从测试环境发布到生产环境的流程,同时保证了强大而安全的代码体验。
什么是rio?
下图是rio的架构:
rio采用了诸如kubernetes、knative、linkerd、cert-manager、buildkit以及gloo等技术,并将它们结合起来为用户提供一个完整的应用程序部署环境。
rio具有以下功能:
从源代码构建代码,并将其部署到kubernetes集群
自动为应用程序创建dns记录,并使用let’s encrypt的tls证书保护这些端点
基于qps以及工作负载的指标自动扩缩容
支持金丝雀发布、蓝绿发布以及a/b部署
支持通过服务网格路由流量
支持缩容至零的serverless工作负载
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%%uff0c访问此端点仍将带你进入服务的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%%u7684流量(从全局的服务端点)到新版本。当我们觉得demo-service的v2性能感到满意之后,我们可以将其提升到100%%uff1a
$ rio promote --duration 60s demo-service@v2demo-service@v2 promoted
超过60秒之后,我们的demo-service@v2服务将会逐渐提升到接收100%%u7684流量。在这一过程中任意端点上,我们可以执行rio ps,并且查看进程:
$ rio psname image endpoint

均衡型10g云服务器配置多少钱
doc文档和docx文档有什么区别?
ecs云服务器可以用来做网站嘛
小咖秀,凭什么3个月暴增1500万用户?——全凭演技!
娘娘集团 微商亿姐李娘娘
怎样选云服务器租赁费用
香港主机推荐丨SugarHosts香港主机测评
怎么租用云服务器哪个平台最优惠