云計(jì)算
11月19日,業(yè)界應(yīng)用最為廣泛的Kubernetes管理平臺(tái)創(chuàng)建者Rancher Labs(以下簡稱Rancher)宣布Rio發(fā)布了beta版本,這是基于Kubernetes的應(yīng)用程序部署引擎。它于今年5月份推出,現(xiàn)在最新的版本是v0.6.0。Rio結(jié)合了多種云原生技術(shù),從而簡化了將代碼從測試環(huán)境發(fā)布到生產(chǎn)環(huán)境的流程,同時(shí)保證了強(qiáng)大而安全的代碼體驗(yàn)。

下圖是Rio的架構(gòu):
Rio采用了諸如Kubernetes、knative、linkerd、cert-manager、buildkit以及gloo等技術(shù),并將它們結(jié)合起來為用戶提供一個(gè)完整的應(yīng)用程序部署環(huán)境。
Rio具有以下功能:
從源代碼構(gòu)建代碼,并將其部署到Kubernetes集群
自動(dòng)為應(yīng)用程序創(chuàng)建dns記錄,并使用Let’s Encrypt的TLS證書保護(hù)這些端點(diǎn)
基于QPS以及工作負(fù)載的指標(biāo)自動(dòng)擴(kuò)縮容
支持金絲雀發(fā)布、藍(lán)綠發(fā)布以及A/B部署
支持通過服務(wù)網(wǎng)格路由流量
支持縮容至零的serverless工作負(fù)載
Git觸發(fā)的部署
Rio屬于Rancher整套產(chǎn)品生態(tài)的一部分,這些產(chǎn)品支持從操作系統(tǒng)到應(yīng)用程序的應(yīng)用程序部署和容器運(yùn)維。當(dāng)Rio和諸如Rancher 2.3、k3s和RKE等產(chǎn)品結(jié)合使用時(shí),企業(yè)可以獲得完整的部署和管理應(yīng)用程序及容器的體驗(yàn)。
要了解Rio如何實(shí)現(xiàn)上述功能,我們來深入了解一些概念以及工作原理。
安裝Rio前期準(zhǔn)備Kubernetes版本在1.15以上的Kubernetes集群使用安裝好的Rio CLI工具,調(diào)用rio install。你可能需要考慮以下情況:
ip-address:節(jié)點(diǎn)的IP地址的逗號(hào)分隔列表。你可以在以下情況使用:
你不使用(或不能使用)layer-4的負(fù)載均衡器在Rio中,service是一個(gè)基本的執(zhí)行單位。從Git倉庫或容器鏡像實(shí)例化之后,一個(gè)service由單個(gè)容器以及服務(wù)網(wǎng)格的關(guān)聯(lián)sidecar組成(默認(rèn)啟用)。例如,運(yùn)行使用Golang構(gòu)建的一個(gè)簡單的“hello world”應(yīng)用程序。
rio run https://github.com/ebauman/rio-demo
或者運(yùn)行容器鏡像版本:
rio run ebauman/demo-rio:v1
還有其他選項(xiàng)也可以傳遞給rio run,如需要公開的任意端口(-p 80:8080/http),或者自動(dòng)擴(kuò)縮的配置(--scale 1-10)。你可以通過這一命令rio help run,查看所有可傳遞的選項(xiàng)。
想要查看你正在運(yùn)行的服務(wù),請(qǐng)執(zhí)行rio ps:
$ rio ps
NAME IMAGE ENDPOINT
demo-service default-demo-service-4dqdw:61825 https://demo-service...
每次你運(yùn)行一個(gè)新的服務(wù),Rio將會(huì)為這一服務(wù)生成一個(gè)全局性的端點(diǎn):
$ rio endpoints
NAME ENDPOINTS
demo-service https://demo-service-default.op0kj0.on-rio.io:30282
請(qǐng)注意,此端點(diǎn)不包括版本——它指向由一個(gè)common name標(biāo)識(shí)的服務(wù),并且流量根據(jù)服務(wù)的權(quán)重進(jìn)行路由。
默認(rèn)情況下,所有Rio集群都將為自己創(chuàng)建一個(gè)on-rio.io主機(jī)名,并以隨機(jī)字符串開頭(如lkjsdf.on-rio.io)。該域名成為通配符域名,它的記錄解析到集群的網(wǎng)關(guān)。如果使用NodePort服務(wù),則該網(wǎng)關(guān)可以是layer-4負(fù)載均衡器,或者是節(jié)點(diǎn)本身。
除了創(chuàng)建這個(gè)通配符域名,Rio還會(huì)使用Let’s Encrypt為這個(gè)域名生成一個(gè)通配符證書。這會(huì)允許自動(dòng)加密任何HTTP工作負(fù)載,而無需用戶進(jìn)行配置。要啟動(dòng)此功能,請(qǐng)傳遞-p參數(shù),將http指定為協(xié)議,例如:
rio run -p 80:8080/http ...自動(dòng)擴(kuò)縮容Rio可以根據(jù)每秒所查詢到的指標(biāo)自動(dòng)擴(kuò)縮服務(wù)。為了啟用這一特性,傳遞--scale 1-10作為參數(shù)到rio run,例如:
rio run -p 80:8080/http -n demo-service --scale 1-10 ebauman/rio-demo:v1
執(zhí)行這個(gè)命令將會(huì)構(gòu)建ebauman/rio-demo并且部署它。如果我們使用一個(gè)工具來添加負(fù)載到端點(diǎn),我們就能夠觀察到自動(dòng)擴(kuò)縮容。為了證明這一點(diǎn),我們需要使用HTTP端點(diǎn)(而不是HTTPS),因?yàn)槲覀兪褂玫墓ぞ卟恢С諸LS:
$ 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除了端點(diǎn)之外還會(huì)顯示其他信息,但我們目前所需要的是端點(diǎn)信息。使用HTTP端點(diǎn)以及HTTP基準(zhǔn)測試工具rakyll / hey,我們可以添加綜合負(fù)載:
hey -n 10000 http://demo-service-v0-default.op0kj0.on-rio.io:31976
這將會(huì)發(fā)送10000個(gè)請(qǐng)求到HTTP端點(diǎn),Rio將會(huì)提高QPS并適當(dāng)擴(kuò)大規(guī)模,執(zhí)行另一個(gè)rio ps將會(huì)展示已經(jīng)擴(kuò)大的規(guī)模:
$ rio ps
NAME ... SCALE WEIGHT
demo-service ... 2/5 (40%) 100%分階段發(fā)布、金絲雀部署以及權(quán)重注意
對(duì)于每個(gè)服務(wù),都會(huì)創(chuàng)建一個(gè)全局端點(diǎn),該端點(diǎn)將根據(jù)基礎(chǔ)服務(wù)的權(quán)重路由流量。
Rio可以先交付新的服務(wù)版本,然后再推廣到生產(chǎn)環(huán)境。分階段發(fā)布一個(gè)新的版本十分簡單:rio stage --image ebauman/rio-demo:v2 demo-service v2
這一命令使用版本v2,分階段發(fā)布demo-service的新版本,并且使用容器鏡像ebauman/rio-demo:v2。我們通過執(zhí)行rio ps這一命令,可以看到新階段的發(fā)布:$ rio ps NAME IMAGE ENDPOINT WEIGHT demo-service@v2 ebauman/rio-demo:v2 https://demo-service-v2... 0% demo-service ebauman/rio-demo:v1 https://demo-service-v0... 100%
請(qǐng)注意,新服務(wù)的端點(diǎn)具有v2的新增功能,因此即使權(quán)重設(shè)置為0%,訪問此端點(diǎn)仍將帶你進(jìn)入服務(wù)的v2。這可以讓你能夠在向其發(fā)送流量之前驗(yàn)證服務(wù)的運(yùn)行情況。
說到發(fā)送流量:
$ rio weight demo-service@v2=5%
$ rio ps
NAME IMAGE ENDPOINT WEIGHT
demo-service@v2 ebauman/rio-demo:v2 https://demo-service-v2... 5%
demo-service ebauman/rio-demo:v1 https://demo-service-v0... 95%
使用rio weight命令,我們現(xiàn)在將發(fā)送我們5%的流量(從全局的服務(wù)端點(diǎn))到新版本。當(dāng)我們覺得demo-service的v2性能感到滿意之后,我們可以將其提升到100%:
$ rio promote --duration 60s demo-service@v2
demo-service@v2 promoted
超過60秒之后,我們的demo-service@v2服務(wù)將會(huì)逐漸提升到接收100%的流量。在這一過程中任意端點(diǎn)上,我們可以執(zhí)行rio ps,并且查看進(jìn)程:
$ rio ps
NAME IMAGE ENDPOINT WEIGHT
demo-service@v2 ebauman/rio-demo:v2 https://demo-service-v2... 34%
demo-service ebauman/rio-demo:v1 https://demo-service-v0... 66%路由(Routing)Rio可以根據(jù)主機(jī)名、路徑、方法、標(biāo)頭和cookie的任意組合將流量路由到端點(diǎn)。Rio還支持鏡像流量、注入故障,配置retry邏輯和超時(shí)。
創(chuàng)建一個(gè)路由器為了開始制定路由決策,我們必須首先創(chuàng)建一個(gè)路由器。路由器代表一個(gè)主機(jī)名和一組規(guī)則,這些規(guī)則確定發(fā)送到主機(jī)名的流量如何在Rio集群內(nèi)進(jìn)行路由。你想要要定義路由器,需要執(zhí)行rio router add。例如,要?jiǎng)?chuàng)建一個(gè)在默認(rèn)測試時(shí)接收流量并將其發(fā)送到demo-service的路由器,請(qǐng)使用以下命令:
rio route add testing to demo-service
這將創(chuàng)建以下路由器:
$ rio routers
NAME URL OPTS ACTION TARGET
router/testing https://testing-default.0pjk... to demo-service,port=80
發(fā)送到https://testing-default...的流量將通過端口80轉(zhuǎn)發(fā)到demo-service。
請(qǐng)注意,此處創(chuàng)建的路由為testing-default.<rio domain>。Rio將始終使用命名空間資源,因此在這種情況下,主機(jī)名測試已在默認(rèn)命名空間中進(jìn)行了命名。要在其他命名空間中創(chuàng)建路由器,請(qǐng)將-n <namespace>傳遞給rio命令:
rio -n <namespace> route add ...基于路徑的路由為了定義一個(gè)基于路徑的路由,當(dāng)調(diào)用rio route add時(shí),指定一個(gè)主機(jī)名加上一個(gè)路徑。這可以是新路由器,也可以是現(xiàn)有路由器。
$ rio route add testing/old to demo-service@v1以上命令可以創(chuàng)建一個(gè)基于路徑的路由,它會(huì)在https://testing-default.<rio-domain>/old接收流量,并且轉(zhuǎn)發(fā)流量到`demo-service@v1`服務(wù)。
br/>以上命令可以創(chuàng)建一個(gè)基于路徑的路由,它會(huì)在https://testing-default.<rio-domain>/old接收流量,并且轉(zhuǎn)發(fā)流量到`demo-service@v1`服務(wù)。
標(biāo)頭和基于方法的路由
Rio支持基于HTTP標(biāo)頭和HTTP verbs的值做出的路由策略。如果你想要?jiǎng)?chuàng)建基于特定標(biāo)頭路由的規(guī)則,請(qǐng)?jiān)趓io route add命令中指定標(biāo)頭:
$ rio route add --header X-Header=SomeValue testing to demo-service
以上命令將創(chuàng)建一個(gè)路由規(guī)則,它可以使用一個(gè)X-Header的HTTP標(biāo)頭和SomeValue的值將流量轉(zhuǎn)發(fā)到demo-service。類似地,你可以為HTTP方法定義規(guī)則:
$ rio route add --method POST testing to demo-service故障注入Rio路由有一項(xiàng)有趣的功能是能夠?qū)⒐收献⑷腠憫?yīng)中。通過定義故障路由規(guī)則,你可以設(shè)置具有指定延遲和HTTP代碼的失敗流量百分比:
$ rio route add --fault-httpcode 502 --fault-delay-milli-seconds 1000 --fault-percentage 75 testing to demo-service其他路由選項(xiàng)Rio支持按照權(quán)重分配流量、為失敗的請(qǐng)求重試邏輯、重定向到其他服務(wù)、定義超時(shí)以及添加重寫規(guī)則。要查看這些選項(xiàng),請(qǐng)參閱以下鏈接:
https://github.com/rancher/rio
將git倉庫傳遞給rio run將指示Rio在提交到受監(jiān)控的branch(默認(rèn)值:master)之后構(gòu)建代碼。對(duì)于Github倉庫,你可以通過Github webhooks啟動(dòng)此功能。對(duì)于任何其他git repo,或者你不想使用webhooks,Rio都會(huì)提供一項(xiàng)“gitwatcher”服務(wù),該服務(wù)會(huì)定期檢查您的倉庫中是否有更改。
Rio還可以根據(jù)受監(jiān)控的branch的拉取請(qǐng)求構(gòu)建代碼。如果你想要進(jìn)行配置,請(qǐng)將--build-pr傳遞到rio run。還有其他配置這一功能的選項(xiàng),包括傳遞Dockerfile的名稱、自定義構(gòu)建的鏡像名稱以及將鏡像推送到指定的鏡像倉庫。
Rio使用稱為Riofile的docker-compose-stylemanifest定義資源
configs:
conf:
index.html: |-
<!DOCTYPE html>
<html>
<body>
<h2>Hello World</h2>
</body>
</html>
services:
nginx:
image: nginx
ports:
- 80/http
configs:
- conf/index.html:/usr/share/nginx/html/index.html
Riofile定義了一個(gè)簡單的nginx Hello World網(wǎng)頁所有必要的組件。通過rio up部署它,會(huì)創(chuàng)建一個(gè)Stack(堆棧),它是Riofile定義的資源的集合。
Riofile具有許多功能,例如觀察Git庫中的更改以及使用Golang模板進(jìn)行模板化。
其他Rio組件Rio還有許多功能,例如configs、secrets以及基于角色訪問控制(RBAC)。詳情可參閱:
https://rio.io/
Rio可視化Rio DashboardRio的beta版本包括了一個(gè)全新的儀表盤,使得Rio組件可視化。要訪問此儀表盤,請(qǐng)執(zhí)行命令:rio dashboard。在有GUI和默認(rèn)瀏覽器的操作系統(tǒng)上,Rio將自動(dòng)打開瀏覽器并加載儀表盤。
你可以使用儀表盤來創(chuàng)建和編輯堆棧、服務(wù)、路由等。此外,可以直接查看和編輯用于各種組件技術(shù)(Linkerd、gloo等)的對(duì)象,盡管不建議這樣做。儀表盤目前處于開發(fā)的早期階段,因此某些功能的可視化(如自動(dòng)縮放和服務(wù)網(wǎng)格)尚不可用。
作為Rio的默認(rèn)服務(wù)網(wǎng)格,Linked附帶了一個(gè)儀表盤作為產(chǎn)品的一部分。該儀表盤可以通過執(zhí)行rio linkerd來使用,它將代理本地本地主機(jī)流量到linkerd儀表盤(不會(huì)在外部公開)。與Rio儀表盤類似,有GUI和默認(rèn)瀏覽器的操作系統(tǒng)上,Rio將自動(dòng)打開瀏覽器并加載儀表盤:
Linkerd儀表盤顯示了Rio集群的網(wǎng)格配置、流量和網(wǎng)格組件。Linkerd提供了Rio路由的某些功能組件,因此這些配置可能會(huì)顯示在此儀表盤上。還有一些工具可用于測試和調(diào)試網(wǎng)格配置和流量。
Rio為用戶提供許多功能,是一款強(qiáng)大的應(yīng)用程序部署引擎。這些組件可以在部署應(yīng)用程序時(shí)為開發(fā)人員提供強(qiáng)大的功能,使流程穩(wěn)定而安全,同時(shí)輕松又有趣。在Rancher產(chǎn)品生態(tài)中,Rio提供了企業(yè)部署和管理應(yīng)用程序和容器的強(qiáng)大功能。
如果你想了解Rio的更多信息,歡迎訪問Rio主頁或Github主頁:
https://rio.io
https://github.com/rancher/rio
本文名稱:Rio手把手教學(xué):如何打造容器化應(yīng)用程序的一站式部署體驗(yàn)
URL地址:http://chinadenli.net/article28/cjiejp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、微信公眾號(hào)、品牌網(wǎng)站建設(shè)、企業(yè)建站、ChatGPT、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)