仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

Rancher RioをUbuntu + K3sで動かしてみる

Rancher RioはKubernetesのアプリケーションデプロイメントエンジンです。RioはGitベースのアプリケーションデプロイメントを実現するためのツールで、カナリア、A/B、ブルー/グリーンの展開を提供するサービスメッシュソリューションの一つです。内部的にLinkerdが使われています。

早速試してみます。

Rioを動かした構成

この記事は以下の環境で動作を確認しました。

  • Ubuntu 20.04.2 LTS
  • Linux 5.8.0-45-generic
  • k3s version v1.20.4+k3s1 (838a906a)
  • rio version v0.8.0 (af7ad687)

後日、以下の環境でも動作を確認しました。

  • macOS Catalina
  • minikube 1.18.1
  • Kubernetes 1.20.2 (containerdベース)
  • rio version v0.8.0 (af7ad687)

OSのセットアップ

適当なamd64のマシンにUbuntu 20.04.2を標準インストールし、最新の状態に更新しました。 特別なソフトウェアは特にインストールする必要はありません。

Kubernetesのセットアップ

手軽に構築するため、K3sを使うことにしました。

# curl -sfL https://get.k3s.io | sh -

# k3s -version
k3s version v1.20.4+k3s1 (838a906a)
go version go1.15.8

# k3s kubectl get no
NAME       STATUS   ROLES                  AGE   VERSION
rio-test   Ready    control-plane,master   40m   v1.20.4+k3s1

Rioのセットアップ

Rioのセットアップを以下の手順に従って行います。

今回はLet's Encryptは使わない方法をとります。3を入力します。

# curl -sfL https://get.rio.io | sh -
# rio install
Please provide your Let's Encrypt email

[1]: Provide an Email address.
    This is used to send you important notifications and certificate expiration warnings.
    It will never be shared with Rancher.
[2]: Use Let's Encrypt with no email address.
    This is strongly discouraged and lack of notifications may cause you to lose access to your certificates.
[3]: Do not use Let's Encrypt at all.
    Cert-manager will not be deployed and no certificates will be automatically issued for you.
    You will not be able to use dashboard unless you configure custom cluster domain and wildcard certificates.
Select Number [] 3
Deploying Rio control plane....
...
Welcome to Rio!

Run `rio run -p 80:8080 https://github.com/rancher/rio-demo` as an example

以上で、Rioの準備ができました。

Rioを使ってアプリケーションを展開してみる

最後に出力されたアプリケーションを展開してみたいと思います。

リポジトリーにはDockerfileとmain.goの二つが用意されていました。main.goはアプリケーションのソースで、Dockerfileはアプリケーションの実行環境を作るためのものです。

# rio run -p 80:8080 https://github.com/rancher/rio-demo

しばらく待つと、rioによってアプリケーションが配備されます。curlコマンドを使ってアプリケーションアクセスできました。

# rio ps
NAME              IMAGE                                   ENDPOINT                                                   PORTS     SCALE     WEIGHT    CREATED          DETAIL
pensive-feynman   default/pensive-feynman-v06s449:f8fab   http://pensive-feynman-v0-default.zlg9bz.on-rio.io:30499   80:8080   1         100%      27 minutes ago   

# curl http://pensive-feynman-v0-default.zlg9bz.on-rio.io:30499
Hi there, I'm running in Rio

rio infoを実行すると、ドメイン、IPアドレス、Rioがどの名前空間で動いているかなどがわかるようです。

Rio Version: v0.8.0 (af7ad687)
Rio CLI Version: v0.8.0 (af7ad687)
Cluster Domain: zlg9bz.on-rio.io
Cluster Domain IPs: 10.211.55.9
System Namespace: rio-system
Wildcard certificates: zlg9bz.on-rio.io(false)

rio endpointsを実行すると、アプリケーションのアクセス用URLを確認できるようです。

# rio endpoints
NAME              ENDPOINTS
pensive-feynman   http://pensive-feynman-default.zlg9bz.on-rio.io:30499

rio system logsでログを確認できるようです。

# rio system logs
rio-controller | time="2021-03-18T08:27:18Z" level=info msg="Starting rio-controller, version: v0.8.0, git commit: af7ad687"
rio-controller | time="2021-03-18T08:27:18Z" level=info msg="Updating CRD services.rio.cattle.io"
rio-controller | time="2021-03-18T08:27:18Z" level=info msg="Updating CRD stacks.rio.cattle.io"
rio-controller | I0318 08:27:18.410813       1 leaderelection.go:241] attempting to acquire leader lease  rio-system/rio...
rio-controller | time="2021-03-18T08:27:18Z" level=info msg="listening at :443"
rio-controller | I0318 08:27:18.413870       1 leaderelection.go:251] successfully acquired lease rio-system/rio
rio-controller | time="2021-03-18T08:27:18Z" level=info msg="Starting /v1, Kind=ConfigMap controller"
rio-controller | time="2021-03-18T08:27:20Z" level=info msg="Starting apps/v1, Kind=Deployment controller"
rio-controller | time="2021-03-18T08:27:20Z" level=info msg="Starting admin.rio.cattle.io/v1, Kind=PublicDomain controller"
rio-controller | time="2021-03-18T08:27:20Z" level=info msg="Starting rbac.authorization.k8s.io/v1, Kind=ClusterRoleBinding controller"

rio scaleコマンドを実行すると、アプリケーションのスケールができるようです。

# rio ps
NAME              IMAGE                                   ENDPOINT                                                   PORTS     SCALE     WEIGHT    CREATED          DETAIL
pensive-feynman   default/pensive-feynman-v06s449:f8fab   http://pensive-feynman-v0-default.zlg9bz.on-rio.io:30499   80:8080   1         100%      27 minutes ago   

# rio scale pensive-feynman=2
# rio ps
NAME              IMAGE                                   ENDPOINT                                                   PORTS     SCALE     WEIGHT    CREATED          DETAIL
pensive-feynman   default/pensive-feynman-v06s449:f8fab   http://pensive-feynman-v0-default.zlg9bz.on-rio.io:30499   80:8080   2         100%      50 minutes ago   

Gitサーバーを介さないでRioを使ったアプリケーションのデプロイもできるようです。 例えば次のようなRiofileを作成して...

# cat rio/Riofile 
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

rio upコマンドを使うと、任意のコンテナーイメージをベースにファイルを書き換えた上でアプリケーションの配備が可能です。Rioにより、アプリケーションアクセス用のエンドポイントも自動的に提供されます。

# rio up -f rio/Riofile 
default:stack/root

# rio ps
NAME             IMAGE     ENDPOINT                                               PORTS     SCALE     WEIGHT    CREATED          DETAIL
nginx@97a513ae   nginx     http://nginx-97a513ae-default.zlg9bz.on-rio.io:30499   80        1         100%      32 seconds ago   

# curl http://nginx-97a513ae-default.zlg9bz.on-rio.io:30499
<!DOCTYPE html>
<html>
<body>

<h1>Hello World</h1>

</body>

Rioによって展開したアプリケーションはrio rmコマンドを実行すると、アプリケーションをさくっと消すことができるようです。

# rio rm pensive-feynman

まだバージョン1.0には満たないソフトウェアですが、なんか面白そうに感じました。