RioでGitHubリポジトリからのRunを試す
新しくなったRio
KubeCon EUにあわせ新しくなったRioがアナウンスされました。
Rio自体は以前からOSSとして公開されていましたが、今回はRancher Labsからのリリースアナウンスもありある程度開発に区切りがついたということなのでしょう。
公式サイトもできてました。
今回は新しくなったRioを軽く触ってみました。
なおRioについては以前ブログ書いてますのでこちらもご一読ください。
事前準備
Kubernetesクラスタ
以前のRioはスタンドアロンという、embeddedなk8sクラスタ(後のk3s)を起動してくれるモードがありましたが、 新しいRioではk8sクラスタはあらかじめ準備しておく必要があります。
お好みのクラスタを用意しておきましょう。
k3sやDocker for Mac(のk8s)、minikubeもOKですし、GKE/AKS/EKSももちろんOKとのことです。 なおk8s v1.13以降が必要とのことですのでバージョンには注意しておいてください。
rio
コマンドのインストール
フロントエンドとなるコマンドrio
をインストールしておきます。
以下のコマンドでOKです。
$ curl -sfL https://get.rio.io | sh -
上記コマンドで実行されるシェルスクリプトの確認がめんどくさい場合はGitHubのReleaseページから直接バイナリをダウンロードしてもOKです。
Releases · rancher/rio · GitHub
Rioのセットアップ
各種コンポーネントのデプロイ
まずはRioの各種コンポーネントをk8sクラスタ上にデプロイします。
rio install
コマンドを実行することでrio-system
というnamespaceにデプロイされます。
$ rio install Creating namespace rio-system Defaulting cluster CIDR to 10.43.0.1/16 Deploying Rio control plane.... Waiting for rio controller to initialize Waiting for rio controller to initialize Waiting for rio controller to initialize Waiting for rio controller to initialize Waiting for rio controller to initialize Waiting for rio controller to initialize Waiting for rio controller to initialize Waiting for all the system components to be up. Not ready component: [autoscaler build-controller buildkit cert-manager grafana istio-citadel istio-pilot istio-telemetry kiali prometheus registry webhook] Waiting for all the system components to be up. Not ready component: [autoscaler build-controller buildkit cert-manager grafana istio-citadel istio-pilot istio-telemetry kiali prometheus registry webhook] Waiting for all the system components to be up. Not ready component: [autoscaler buildkit cert-manager grafana istio-citadel istio-pilot istio-telemetry kiali webhook] Waiting for all the system components to be up. Not ready component: [cert-manager grafana istio-pilot kiali] Waiting for service loadbalancer to be up Waiting for service loadbalancer to be up Waiting for service loadbalancer to be up Waiting for service loadbalancer to be up rio controller version v0.1.1-rc3 (2771703b) installed into namespace rio-system Please make sure all the system pods are actually running. Run `kubectl get po -n rio-system` to get more detail. Controller logs are available from `rio systemlogs` Welcome to Rio! Run `rio run https://github.com/rancher/rio-demo` as an example
なお、ここでtype=LoadBalancer
なserviceが使えない場合はこのまま待つかHostPortsを使うか聞かれます。
コードを見るとそのほかにも分岐するパターンが結構あるようですね。
環境に合わせ適宜回答しましょう。
デプロイされたか確認
rio install
が完了したらkubectl get pod -n rio-system
で確認してみます。
$ kubectl get pod -n rio-system NAME READY STATUS RESTARTS AGE autoscaler-696866b8f7-9fbcq 1/1 Running 0 9m11s build-controller-94b48b58f-m5kgw 2/2 Running 0 8m38s buildkit-7f46884f98-qkjv9 2/2 Running 0 9m6s cert-manager-57b4f876c5-hnxq6 1/1 Running 0 8m43s grafana-68c6d8494d-rt9gg 2/2 Running 0 9m6s istio-citadel-d76685f74-kczqs 1/1 Running 0 9m3s istio-gateway-4ssl5 2/2 Running 0 8m57s istio-gateway-872gl 2/2 Running 0 8m57s istio-gateway-979xb 2/2 Running 0 8m57s istio-pilot-85b894cd75-gg4n5 2/2 Running 0 8m54s istio-telemetry-6b686cbbf5-bzwq5 2/2 Running 0 9m7s kiali-7d4b6dc78c-mm5r2 2/2 Running 0 8m46s prometheus-59c5655d9c-rw8mp 1/1 Running 0 9m11s registry-6c4fddb8b6-2bvrm 2/2 Running 0 8m40s registry-proxy-46ftw 1/1 Running 0 9m8s registry-proxy-shjf9 1/1 Running 0 9m8s registry-proxy-smszz 1/1 Running 0 9m8s rio-controller-86c4bf9698-6blb5 1/1 Running 0 9m27s webhook-5f6fc8f6f9-q6h6w 2/2 Running 0 8m28s
AutoScalerやKnativeのbuild-controller、buildkit、cert-manager、grafana、istio、kiali、prometheus、、、、と色々なPodが並んでますね。
Rioの新機能を試す - GitリポジトリからのRun
前回Rioを試した時にはなかった機能としてGitHubのリポジトリのURLを指定してRunする機能が入っていました。
RioはデフォルトでKnative+buildkitでイメージをビルドするようになっているようです。
(オプションでbuildpackなども使えるようですがまだ試してないです)
ということで早速試してみました。
確認にはこちらのリポジトリを用意しました。
これはgolangでHTTPサーバを立ち上げHello Rio!
というメッセージを返すだけの簡単なもので、main.go
とDockerfile
の2ファイルだけで構成されているリポジトリとなっています。
main.goは以下の通りです。
package main import ( "fmt" "log" "net/http" "time" ) func handler(w http.ResponseWriter, r *http.Request) { time.Sleep(100 * time.Millisecond) fmt.Fprintln(w, "Hello Rio!!") } func main() { http.HandleFunc("/", handler) log.Fatal(http.ListenAndServe(":8080", nil)) }
Dockerfileは以下の通りです。
FROM golang:1.11.1 ENV GOPATH="/go" RUN ["mkdir", "-p", "/go/src/github.com/yamamoto-febc/rio-demo"] COPY * /go/src/github.com/yamamoto-febc/rio-demo/ WORKDIR /go/src/github.com/yamamoto-febc/rio-demo RUN ["go", "build", "-o", "demo"] CMD ["./demo"]
Runしてみる
ということで早速Runしてみました。
# -pオプション: 公開するポート -nオプション: 名前(今回はbuildという名前) $ rio run -p 8080/http -n build https://github.com/yamamoto-febc/rio-demo
rio ps
を実行してみるとイメージのビルドを待機中と出ました。
$ rio ps # イメージのビルド待ち NAME CREATED ENDPOINT REVISIONS SCALE WEIGHT DETAIL default/build 2 seconds ago https://build-default.7vlxuv.on-rio.io:9443 v0 0/1 100% v0 NotReady; v0 waiting on build
しばらく待つとイメージがビルドされ、コンテナの起動~公開まで行われました。
# イメージがビルドされ、コンテナ起動~公開までされた状態 $ rio ps NAME CREATED ENDPOINT REVISIONS SCALE WEIGHT DETAIL default/build 6 minutes ago https://build-default.7vlxuv.on-rio.io:9443 v0 1 100% # エンドポイント宛てにリクエストしてみる $ curl https://build-default.7vlxuv.on-rio.io:9443 Hello Rio!!
無事表示されましたね!!!
コードの修正〜pushを試す
次にコードを修正し、コミットとプッシュを試してみます。 Rioはデフォルトではmasterブランチへのタグ/コミットのpushをポーリングで検知してくれるとのことです。 (オプションでWebhookも利用できるとのこと)
ということで先ほどのコードを修正しpushして反映されるか確認してみます。
# メッセージを書き換えてみる: "Hello Rio!" から"Bonjour Rio!"へ $ vi main.go $ コミットしてpush $ git add main.go $ git commit -m"Update messages" $ git push origin master
pushしたらRioが検知しているかrio revision
コマンドで確認してみます。
$ rio revision default/build NAME IMAGE CREATED SCALE ENDPOINT WEIGHT DETAIL default/build:v0 localhost:5442/default/build:ff1d967decbfd34ecd1268d72b5a4e8e1067f9ee 19 minutes ago 1 https://build-v0-default.7vlxuv.on-rio.io:9443 100 default/build:v37d26 28 seconds ago 0/1 https://build-v37d26-default.7vlxuv.on-rio.io:9443 0
default/build
に:v37d26
というリビジョンができてますね。こちらをビルド中のようです。
しばらく待つと次のようになりました。
rio revision default/build NAME IMAGE CREATED SCALE ENDPOINT WEIGHT DETAIL default/build:v0 localhost:5442/default/build:ff1d967decbfd34ecd1268d72b5a4e8e1067f9ee 21 minutes ago 1 https://build-v0-default.7vlxuv.on-rio.io:9443 0 default/build:v37d26 localhost:5442/default/build-169daa9-b92af:37d2632cb0d649dda800f5375b48b19419836f93 2 minutes ago 1 https://build-v37d26-default.7vlxuv.on-rio.io:9443 100
新しい方のリビジョンのビルドが終わり、そちらに切り替わっているようですね。WEIGHTが新しいリビジョンの方に100%となりました。
では先ほどのエンドポイントあてに再度リクエストしてみます。
# 再度エンドポイント宛てにリクエストしてみる $ curl https://build-default.7vlxuv.on-rio.io:9443 Bonjour Rio!!
お!!!!更新されてますね!
この手軽さはなかなか良いですね!
ということで
時間と体力切れのため今回はここまでです。 とっつきにくいKubernetesのあれこれを上手く覆い隠すフロントエンド、という印象を持ちました。
モニタリング面なども面白そうなので時間を見つけてもう少し触ってみたいところです。
以上です。