溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Rio手把手教學:如何打造容器化應用程序的一站式部署體驗

發(fā)布時間:2020-08-10 11:58:21 來源:網(wǎng)絡 閱讀:284 作者:RancherLabs 欄目:云計算

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

什么是Rio?

 

下圖是Rio的架構:
 
Rio手把手教學:如何打造容器化應用程序的一站式部署體驗
 
Rio采用了諸如Kubernetes、knative、linkerd、cert-manager、buildkit以及gloo等技術,并將它們結合起來為用戶提供一個完整的應用程序部署環(huán)境。

 
Rio具有以下功能:

 

  1. 從源代碼構建代碼,并將其部署到Kubernetes集群

  2. 自動為應用程序創(chuàng)建DNS記錄,并使用Let’s Encrypt的TLS證書保護這些端點

  3. 基于QPS以及工作負載的指標自動擴縮容

  4. 支持金絲雀發(fā)布、藍綠發(fā)布以及A/B部署

  5. 支持通過服務網(wǎng)格路由流量

  6. 支持縮容至零的serverless工作負載

  7. Git觸發(fā)的部署
     

    Rancher的產(chǎn)品生態(tài)

     
    Rio手把手教學:如何打造容器化應用程序的一站式部署體驗
     
    Rio屬于Rancher整套產(chǎn)品生態(tài)的一部分,這些產(chǎn)品支持從操作系統(tǒng)到應用程序的應用程序部署和容器運維。當Rio和諸如Rancher 2.3、k3s和RKE等產(chǎn)品結合使用時,企業(yè)可以獲得完整的部署和管理應用程序及容器的體驗。

 

深入了解Rio

 

要了解Rio如何實現(xiàn)上述功能,我們來深入了解一些概念以及工作原理。

 

安裝Rio

 

前期準備

 

  • Kubernetes版本在1.15以上的Kubernetes集群
     
  • 為集群配置的kubeconfig(即上下文是你希望將Rio安裝到的集群)
     
  • 在$PATH中安裝的Rio CLI工具,可參閱以下鏈接,了解如何安裝CLI:
    https://github.com/rancher/rio/blob/master/README.md

 

安裝

 

使用安裝好的Rio CLI工具,調(diào)用rio install。你可能需要考慮以下情況:

 

ip-address:節(jié)點的IP地址的逗號分隔列表。你可以在以下情況使用:
 

  • 你不使用(或不能使用)layer-4的負載均衡
     
  • 你的節(jié)點IP不是你希望流量到達的IP地址(例如,你使用有公共IP的EC2實例)
     

    服 務

     

在Rio中,service是一個基本的執(zhí)行單位。從Git倉庫或容器鏡像實例化之后,一個service由單個容器以及服務網(wǎng)格的關聯(lián)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,查看所有可傳遞的選項。
 
想要查看你正在運行的服務,請執(zhí)行rio ps
 

$ rio ps
NAME            IMAGE                               ENDPOINT
demo-service    default-demo-service-4dqdw:61825    https://demo-service...

 
每次你運行一個新的服務,Rio將會為這一服務生成一個全局性的端點:
 

$ rio endpoints
NAME           ENDPOINTS
demo-service   https://demo-service-default.op0kj0.on-rio.io:30282

 
請注意,此端點不包括版本——它指向由一個common name標識的服務,并且流量根據(jù)服務的權重進行路由。
 

自動DNS&TLS

 

默認情況下,所有Rio集群都將為自己創(chuàng)建一個on-rio.io主機名,并以隨機字符串開頭(如lkjsdf.on-rio.io)。該域名成為通配符域名,它的記錄解析到集群的網(wǎng)關。如果使用NodePort服務,則該網(wǎng)關可以是layer-4負載均衡器,或者是節(jié)點本身。

 

除了創(chuàng)建這個通配符域名,Rio還會使用Let’s Encrypt為這個域名生成一個通配符證書。這會允許自動加密任何HTTP工作負載,而無需用戶進行配置。要啟動此功能,請傳遞-p參數(shù),將http指定為協(xié)議,例如:
 

rio run -p 80:8080/http ...

 

自動擴縮容

 

Rio可以根據(jù)每秒所查詢到的指標自動擴縮服務。為了啟用這一特性,傳遞--scale 1-10作為參數(shù)到rio run,例如:
 

rio run -p 80:8080/http -n demo-service --scale 1-10 ebauman/rio-demo:v1

 
執(zhí)行這個命令將會構建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

 
這將會發(fā)送10000個請求到HTTP端點,Rio將會提高QPS并適當擴大規(guī)模,執(zhí)行另一個rio ps將會展示已經(jīng)擴大的規(guī)模:
 

$ rio ps
NAME            ...     SCALE       WEIGHT
demo-service    ...     2/5 (40%)   100%

 

分階段發(fā)布、金絲雀部署以及權重

 

注意

對于每個服務,都會創(chuàng)建一個全局端點,該端點將根據(jù)基礎服務的權重路由流量。
 
Rio可以先交付新的服務版本,然后再推廣到生產(chǎn)環(huán)境。分階段發(fā)布一個新的版本十分簡單:
 

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%

 
請注意,新服務的端點具有v2的新增功能,因此即使權重設置為0%,訪問此端點仍將帶你進入服務的v2。這可以讓你能夠在向其發(fā)送流量之前驗證服務的運行情況。

 

說到發(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%的流量(從全局的服務端點)到新版本。當我們覺得demo-service的v2性能感到滿意之后,我們可以將其提升到100%:
 

$ rio promote --duration 60s demo-service@v2
demo-service@v2 promoted

 
超過60秒之后,我們的demo-service@v2服務將會逐漸提升到接收100%的流量。在這一過程中任意端點上,我們可以執(zhí)行rio ps,并且查看進程:
 

$ 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ù)主機名、路徑、方法、標頭和cookie的任意組合將流量路由到端點。Rio還支持鏡像流量、注入故障,配置retry邏輯和超時。

 

創(chuàng)建一個路由器

 

為了開始制定路由決策,我們必須首先創(chuàng)建一個路由器。路由器代表一個主機名和一組規(guī)則,這些規(guī)則確定發(fā)送到主機名的流量如何在Rio集群內(nèi)進行路由。你想要要定義路由器,需要執(zhí)行rio router add。例如,要創(chuàng)建一個在默認測試時接收流量并將其發(fā)送到demo-service的路由器,請使用以下命令:
 

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轉發(fā)到demo-service。

 
請注意,此處創(chuàng)建的路由為testing-default.<rio domain>。Rio將始終使用命名空間資源,因此在這種情況下,主機名測試已在默認命名空間中進行了命名。要在其他命名空間中創(chuàng)建路由器,請將-n &lt;namespace&gt;傳遞給rio命令:
 

rio -n <namespace> route add ...

 

基于路徑的路由

 

為了定義一個基于路徑的路由,當調(diào)用rio route add時,指定一個主機名加上一個路徑。這可以是新路由器,也可以是現(xiàn)有路由器。
 

$ rio route add testing/old to demo-service@v1

 以上命令可以創(chuàng)建一個基于路徑的路由,它會在https://testing-default.<rio-domain>/old接收流量,并且轉發(fā)流量到`demo-service@v1`服務。
br/>以上命令可以創(chuàng)建一個基于路徑的路由,它會在https://testing-default.<rio-domain>/old接收流量,并且轉發(fā)流量到`demo-service@v1`服務。

標頭和基于方法的路由

 

Rio支持基于HTTP標頭和HTTP verbs的值做出的路由策略。如果你想要創(chuàng)建基于特定標頭路由的規(guī)則,請在rio route add命令中指定標頭:
 

$ rio route add --header X-Header=SomeValue testing to demo-service

 
以上命令將創(chuàng)建一個路由規(guī)則,它可以使用一個X-Header的HTTP標頭和SomeValue的值將流量轉發(fā)到demo-service。類似地,你可以為HTTP方法定義規(guī)則:
 

$ rio route add --method POST testing to demo-service

 

故障注入

 

Rio路由有一項有趣的功能是能夠將故障注入響應中。通過定義故障路由規(guī)則,你可以設置具有指定延遲和HTTP代碼的失敗流量百分比:
 

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

 

其他路由選項

 

Rio支持按照權重分配流量、為失敗的請求重試邏輯、重定向到其他服務、定義超時以及添加重寫規(guī)則。要查看這些選項,請參閱以下鏈接:
 
https://github.com/rancher/rio
 

自動構建

  

將git倉庫傳遞給rio run將指示Rio在提交到受監(jiān)控的branch(默認值:master)之后構建代碼。對于Github倉庫,你可以通過Github webhooks啟動此功能。對于任何其他git repo,或者你不想使用webhooks,Rio都會提供一項“gitwatcher”服務,該服務會定期檢查您的倉庫中是否有更改。

 

Rio還可以根據(jù)受監(jiān)控的branch的拉取請求構建代碼。如果你想要進行配置,請將--build-pr傳遞到rio run。還有其他配置這一功能的選項,包括傳遞Dockerfile的名稱、自定義構建的鏡像名稱以及將鏡像推送到指定的鏡像倉庫。
 

堆棧和Riofile

 

Rio使用稱為Riofile的docker-compose-style manifest定義資源
 

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定義了一個簡單的nginx Hello World網(wǎng)頁所有必要的組件。通過rio up部署它,會創(chuàng)建一個Stack(堆棧),它是Riofile定義的資源的集合。

 

Riofile具有許多功能,例如觀察Git庫中的更改以及使用Golang模板進行模板化。
 

其他Rio組件

 

Rio還有許多功能,例如configs、secrets以及基于角色訪問控制(RBAC)。詳情可參閱:

https://rio.io/

 

Rio可視化

 

Rio Dashboard

 

Rio的beta版本包括了一個全新的儀表盤,使得Rio組件可視化。要訪問此儀表盤,請執(zhí)行命令:rio dashboard。在有GUI和默認瀏覽器的操作系統(tǒng)上,Rio將自動打開瀏覽器并加載儀表盤。
 
Rio手把手教學:如何打造容器化應用程序的一站式部署體驗
 
你可以使用儀表盤來創(chuàng)建和編輯堆棧、服務、路由等。此外,可以直接查看和編輯用于各種組件技術(Linkerd、gloo等)的對象,盡管不建議這樣做。儀表盤目前處于開發(fā)的早期階段,因此某些功能的可視化(如自動縮放和服務網(wǎng)格)尚不可用。

 

Linkerd

 

作為Rio的默認服務網(wǎng)格,Linked附帶了一個儀表盤作為產(chǎn)品的一部分。該儀表盤可以通過執(zhí)行rio linkerd來使用,它將代理本地本地主機流量到linkerd儀表盤(不會在外部公開)。與Rio儀表盤類似,有GUI和默認瀏覽器的操作系統(tǒng)上,Rio將自動打開瀏覽器并加載儀表盤:
 
Rio手把手教學:如何打造容器化應用程序的一站式部署體驗
 
Linkerd儀表盤顯示了Rio集群的網(wǎng)格配置、流量和網(wǎng)格組件。Linkerd提供了Rio路由的某些功能組件,因此這些配置可能會顯示在此儀表盤上。還有一些工具可用于測試和調(diào)試網(wǎng)格配置和流量。
 

結 論

 

Rio為用戶提供許多功能,是一款強大的應用程序部署引擎。這些組件可以在部署應用程序時為開發(fā)人員提供強大的功能,使流程穩(wěn)定而安全,同時輕松又有趣。在Rancher產(chǎn)品生態(tài)中,Rio提供了企業(yè)部署和管理應用程序和容器的強大功能。

 

如果你想了解Rio的更多信息,歡迎訪問Rio主頁或Github主頁:

https://rio.io

https://github.com/rancher/rio

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI