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には満たないソフトウェアですが、なんか面白そうに感じました。