ダウンタイムなしに Web/API サービスのアップグレードを行う

Published on 06 March 2021 in Version 4.10 / Development - 3 minutes read - Last modified on 14 March 2021 - Read in en

Kubernetes のロールアウトを活用して。

この記事は、Hue Query Service がどのように構築されているのかを説明する一連の投稿です。

自動化がうまくいくと、反復的な作業から解放されると同時に、プロセスが文書化されるので、テームメンバーはより生産的に付加価値のある仕事ができるようになり、勢いを維持することができます。

さて、プロジェクトのウェブ際の更新を、ダウンタイムや手作業を伴わずに自動的に行うにはどうすれば良いでしょうか。

gethue.comgethue.com

gethue.comdocs.gethue.com (jp.gethue.com も忘れてはいけません) の全ては、メインの Kubernetes クラスタ内の小さなコンポーネントで動作しています。コンテナはこの種の静的なウェブサイトには少々太っ腹かもしれませんが、ソースコードの変更によって自動的に駆動し、全てのサービスが全く同じ流れに沿って調和するという便利なパターンを可能にしています。

例えば demo.gethue.com では、デモウェブサイトで提供されている他のデータベースエンジンと同様に、同じデプロイのロジックを再利用しています。これらのウェブサイトも UI ではなく、GitHub のコードの変更によって駆動されます。

例えば、以下は実行中のウェブサイトです。

kubectl get pods -ngethue
NAME READY STATUS RESTARTS AGE
docs-55bf874485-vjnlf 1/1 Running 1 8h
website-5c579d4dd-kqlvt 1/1 Running 0 60m
website-jp-964f9cc57-h97gz 1/1 Running 0 6h38m

最近まで、毎日の再起動を「難しい方法」で行っていました。

kubectl delete pods -ngethue `kubectl get pods -ngethue | egrep ^website | cut -d" "-f1`

これは「動作する」のですが、必要のないダウンタイムや「ノイズ」が発生します。

Hammered by “website is down” notifications「Website is down」という通知に悩まされる

現在、標準的な Kubernetes のrollout コマンドが使用されており、管理者や一般ユーザにとって等価的な移行となっています。

kubectl rollout restart -ngethue deployment/website

First diagram from the Kubernetes documention demoing a rolloutロールアウトをデモするKubernetes のドキュメント からの最初の図

新しいwebsiteinstance/pod を起動し、準備ができたら古いものと入れ替えます。

kubectl get pods -ngethue
NAME                         READY   STATUS    RESTARTS   AGE
docs-55bf874485-vjnlf        1/1     Running   1          13h
website-75c7446d4c-z5p6g     0/1     Running   0          6s
website-bb6fc6b6-nkzqh       1/1     Running   0          18m
website-jp-964f9cc57-h97gz   1/1     Running   0          11h

ここでは latest タグが使用されていますが、毎日レポジトリのミラーが同期されると新しいイメージが構築されることにご注意ください。静的ウェブサイトのイメージのビルドは非常にシンプルで、失敗したり誤ったイメージを送信する可能性は非常に低いです。適切なタグ付けを行うことで全ての状態がバージョン管理され、失敗したアップグレードは自動的に以前の有効な状態にロールバックされます。

現在の要件は「100%自動化された、できる限りシンプルなものを毎日の頻度で」です。しかし、もっと「リアルタイム」にロールアウトしたいとしたらどうでしょう?(例えば各コミットやプルリクエスト、あるいは1時間ごと)これは計画中で、後続のブログ記事で詳しく説明します。



ご意見や質問がありましたらお気軽にこちら、あるいは Discussions までコメントして下さい。quick start で SQL をクエリして下さい!

ご意見やアドバイスがありましたらお気軽にコメントお願いします!

Romain from the Hue Team


comments powered by Disqus

More recent stories

10 June 2021
Hue4.10(新しいSQLエディタコンポーネント、REST API、小さなファイルのインポート、Slackアプリなど)がリリースされました!
Read More
29 May 2021
Sqlスクラッチパッドコンポーネントとパブリック REST API を使用して、5 分で独自の SQL エディター (BYOE) を構築する
Read More
26 May 2021
改善されたHueのImporter -- ファイルの選択、方言の選択、テーブルの作成
Read More